Mercurial > MadButterfly
comparison examples/svg2code_ex/main.c @ 122:17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Mon, 15 Sep 2008 20:33:06 +0800 |
parents | e4e47d2cdbcd |
children | 3a4d6179e6a9 |
comparison
equal
deleted
inserted
replaced
121:76ba6fd61c7d | 122:17e97e92b76e |
---|---|
19 | 19 |
20 switch(evt->type) { | 20 switch(evt->type) { |
21 case EVT_MOUSE_BUT_PRESS: | 21 case EVT_MOUSE_BUT_PRESS: |
22 coord_show(ex_rt->code->file_menu); | 22 coord_show(ex_rt->code->file_menu); |
23 /* Tell redraw manager that a coord (group) is chagned. */ | 23 /* Tell redraw manager that a coord (group) is chagned. */ |
24 rdman_coord_changed(ex_rt->rt->rdman, ex_rt->code->file_menu); | 24 rdman_coord_changed(X_MB_rdman(ex_rt->rt), ex_rt->code->file_menu); |
25 /* Update changed part to UI. */ | 25 /* Update changed part to UI. */ |
26 rdman_redraw_changed(ex_rt->rt->rdman); | 26 rdman_redraw_changed(X_MB_rdman(ex_rt->rt)); |
27 break; | 27 break; |
28 } | 28 } |
29 } | 29 } |
30 | 30 |
31 static void file_menu_handler(event_t *evt, void *arg) { | 31 static void file_menu_handler(event_t *evt, void *arg) { |
32 ex_rt_t *ex_rt = (ex_rt_t *)arg; | 32 ex_rt_t *ex_rt = (ex_rt_t *)arg; |
33 redraw_man_t *rdman; | |
33 | 34 |
35 rdman = X_MB_rdman(ex_rt->rt); | |
34 switch(evt->type) { | 36 switch(evt->type) { |
35 case EVT_MOUSE_BUT_PRESS: | 37 case EVT_MOUSE_BUT_PRESS: |
36 coord_hide(ex_rt->code->file_menu); | 38 coord_hide(ex_rt->code->file_menu); |
37 /* Tell redraw manager that a coord (group) is chagned. */ | 39 /* Tell redraw manager that a coord (group) is chagned. */ |
38 rdman_coord_changed(ex_rt->rt->rdman, ex_rt->code->file_menu); | 40 rdman_coord_changed(rdman, ex_rt->code->file_menu); |
39 /* Update changed part to UI. */ | 41 /* Update changed part to UI. */ |
40 rdman_redraw_changed(ex_rt->rt->rdman); | 42 rdman_redraw_changed(rdman); |
41 break; | 43 break; |
42 } | 44 } |
43 } | 45 } |
44 | 46 |
45 int main(int argc, char * const argv[]) { | 47 int main(int argc, char * const argv[]) { |
46 X_MB_runtime_t rt; | 48 X_MB_runtime_t *rt; |
49 redraw_man_t *rdman; | |
47 svg2code_ex_t *svg2code; | 50 svg2code_ex_t *svg2code; |
48 ob_factory_t *factory; | 51 ob_factory_t *factory; |
49 subject_t *subject; | 52 subject_t *subject; |
50 ex_rt_t ex_rt; | 53 ex_rt_t ex_rt; |
51 int r; | |
52 | 54 |
53 /* | 55 /* |
54 * Initialize a runtime with XLib as backend. | 56 * Initialize a runtime with XLib as backend. |
55 */ | 57 */ |
56 r = X_MB_init(":0.0", 800, 600, &rt); | 58 rt = X_MB_new(":0.0", 800, 600); |
57 | 59 |
58 /* | 60 /* |
59 * Instantiate objects from a SVG file. | 61 * Instantiate objects from a SVG file. |
60 */ | 62 */ |
61 svg2code = svg2code_ex_new(rt.rdman); | 63 rdman = X_MB_rdman(rt); |
64 svg2code = svg2code_ex_new(rdman); | |
62 | 65 |
63 /* | 66 /* |
64 * Get observer factory | 67 * Get observer factory |
65 */ | 68 */ |
66 factory = rdman_get_ob_factory(rt.rdman); | 69 factory = rdman_get_ob_factory(rdman); |
67 /* | 70 /* |
68 * Register observers to subjects of events for objects. | 71 * Register observers to subjects of events for objects. |
69 */ | 72 */ |
70 subject = coord_get_mouse_event(svg2code->file_button); | 73 subject = coord_get_mouse_event(svg2code->file_button); |
71 ex_rt.rt = &rt; | 74 ex_rt.rt = rt; |
72 ex_rt.code = svg2code; | 75 ex_rt.code = svg2code; |
73 subject_add_observer(factory, subject, file_button_handler, &ex_rt); | 76 subject_add_observer(factory, subject, file_button_handler, &ex_rt); |
74 subject = coord_get_mouse_event(svg2code->file_menu); | 77 subject = coord_get_mouse_event(svg2code->file_menu); |
75 subject_add_observer(factory, subject, file_menu_handler, &ex_rt); | 78 subject_add_observer(factory, subject, file_menu_handler, &ex_rt); |
76 | 79 |
77 /* | 80 /* |
78 * Start handle connections, includes one to X server. | 81 * Start handle connections, includes one to X server. |
79 * User start to interact with the application. | 82 * User start to interact with the application. |
80 */ | 83 */ |
81 X_MB_handle_connection(&rt); | 84 X_MB_handle_connection(rt); |
82 | 85 |
83 /* | 86 /* |
84 * Clean | 87 * Clean |
85 */ | 88 */ |
86 svg2code_ex_free(svg2code); | 89 svg2code_ex_free(svg2code); |
87 X_MB_destroy(&rt); | 90 X_MB_free(rt); |
88 | 91 |
89 return 0; | 92 return 0; |
90 } | 93 } |