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 }