annotate examples/svg2code_ex/main.c @ 108:565b55508c8d

More dox
author Thinker K.F. Li <thinker@branda.to>
date Fri, 12 Sep 2008 13:58:30 +0800
parents 42698de1f653
children c14cb6d12030
rev   line source
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
1 #include <stdio.h>
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
2 #include <mb/mb.h>
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
3 #include "svg2code_ex.h"
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
4
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
5 typedef struct _ex_rt ex_rt_t;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
6 struct _ex_rt {
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
7 X_MB_runtime_t *rt;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
8 svg2code_ex_t *code;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
9 };
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
10
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
11 static void file_button_handler(event_t *evt, void *arg) {
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
12 ex_rt_t *ex_rt = (ex_rt_t *)arg;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
13
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
14 switch(evt->type) {
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
15 case EVT_MOUSE_BUT_PRESS:
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
16 coord_show(ex_rt->code->file_menu);
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
17 /* Tell redraw manager that a coord (group) is chagned. */
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
18 rdman_coord_changed(ex_rt->rt->rdman, ex_rt->code->file_menu);
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
19 /* Update changed part to UI. */
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
20 rdman_redraw_changed(ex_rt->rt->rdman);
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
21 break;
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
22 }
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
23 }
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
24
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
25 static void file_menu_handler(event_t *evt, void *arg) {
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
26 ex_rt_t *ex_rt = (ex_rt_t *)arg;
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
27
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
28 switch(evt->type) {
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
29 case EVT_MOUSE_BUT_PRESS:
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
30 coord_hide(ex_rt->code->file_menu);
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
31 /* Tell redraw manager that a coord (group) is chagned. */
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
32 rdman_coord_changed(ex_rt->rt->rdman, ex_rt->code->file_menu);
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
33 /* Update changed part to UI. */
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
34 rdman_redraw_changed(ex_rt->rt->rdman);
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
35 break;
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
36 }
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
37 }
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
38
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
39 int main(int argc, char * const argv[]) {
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
40 X_MB_runtime_t rt;
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
41 svg2code_ex_t *svg2code;
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
42 ob_factory_t *factory;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
43 subject_t *subject;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
44 ex_rt_t ex_rt;
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
45 int r;
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
46
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
47 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
48 * Initialize a runtime with XLib as backend.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
49 */
79
5bcb329a5157 Fix bug of core dump caused by forget to check if parent is NULL, root.
Thinker K.F. Li <thinker@branda.to>
parents: 78
diff changeset
50 r = X_MB_init(":0.0", 800, 600, &rt);
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
51
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
52 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
53 * Instantiate objects from a SVG file.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
54 */
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
55 svg2code = svg2code_ex_new(rt.rdman);
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
56
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
57 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
58 * Get observer factory
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
59 */
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
60 factory = rdman_get_ob_factory(rt.rdman);
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
61 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
62 * Register observers to subjects of events for objects.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
63 */
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
64 subject = coord_get_mouse_event(svg2code->file_button);
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
65 ex_rt.rt = &rt;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
66 ex_rt.code = svg2code;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
67 subject_add_observer(factory, subject, file_button_handler, &ex_rt);
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
68 subject = coord_get_mouse_event(svg2code->file_menu);
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
69 subject_add_observer(factory, subject, file_menu_handler, &ex_rt);
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
70
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
71 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
72 * Start handle connections, includes one to X server.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
73 * User start to interact with the application.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
74 */
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
75 X_MB_handle_connection(&rt);
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
76
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
77 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
78 * Clean
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
79 */
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
80 svg2code_ex_free(svg2code);
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
81 X_MB_destroy(&rt);
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
82
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
83 return 0;
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
84 }