Mercurial > MadButterfly
comparison examples/calculator/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 | 565b55508c8d |
children | 3a4d6179e6a9 |
comparison
equal
deleted
inserted
replaced
121:76ba6fd61c7d | 122:17e97e92b76e |
---|---|
59 } | 59 } |
60 | 60 |
61 static void show_text(calc_data_t *calc_data, int num, int saved, int op, | 61 static void show_text(calc_data_t *calc_data, int num, int saved, int op, |
62 const char *suffix) { | 62 const char *suffix) { |
63 char buf[20]; | 63 char buf[20]; |
64 redraw_man_t *rdman; | |
65 | |
66 rdman = X_MB_rdman(calc_data->rt); | |
64 | 67 |
65 sprintf(buf, "%d%s", num, suffix); | 68 sprintf(buf, "%d%s", num, suffix); |
66 sh_text_set_text(calc_data->code->screen_text, buf); | 69 sh_text_set_text(calc_data->code->screen_text, buf); |
67 rdman_shape_changed(calc_data->rt->rdman, calc_data->code->screen_text); | 70 rdman_shape_changed(rdman, calc_data->code->screen_text); |
68 | 71 |
69 if(op == 'n') | 72 if(op == 'n') |
70 sprintf(buf, "None"); | 73 sprintf(buf, "None"); |
71 else | 74 else |
72 sprintf(buf, "%d%c", saved, op); | 75 sprintf(buf, "%d%c", saved, op); |
73 sh_text_set_text(calc_data->code->saved_text, buf); | 76 sh_text_set_text(calc_data->code->saved_text, buf); |
74 rdman_shape_changed(calc_data->rt->rdman, calc_data->code->saved_text); | 77 rdman_shape_changed(rdman, calc_data->code->saved_text); |
75 } | 78 } |
76 | 79 |
77 static void compute(calc_data_t *calc_data, coord_t *tgt) { | 80 static void compute(calc_data_t *calc_data, coord_t *tgt) { |
78 int i; | 81 int i; |
79 coord_t **coord_p; | 82 coord_t **coord_p; |
83 redraw_man_t *rdman; | |
80 static int valid_num = 0; | 84 static int valid_num = 0; |
81 static int factor = 1; | 85 static int factor = 1; |
82 static int num = 0; | 86 static int num = 0; |
83 static int op = 'n'; | 87 static int op = 'n'; |
84 static int saved = 0; | 88 static int saved = 0; |
129 num = 0; | 133 num = 0; |
130 op = 'N'; | 134 op = 'N'; |
131 break; | 135 break; |
132 } | 136 } |
133 } | 137 } |
134 rdman_redraw_changed(calc_data->rt->rdman); | 138 rdman = X_MB_rdman(calc_data->rt); |
139 rdman_redraw_changed(rdman); | |
135 } | 140 } |
136 | 141 |
137 static void buttons_handler(event_t *evt, void *arg) { | 142 static void buttons_handler(event_t *evt, void *arg) { |
138 calc_data_t *calc_data = (calc_data_t *)arg; | 143 calc_data_t *calc_data = (calc_data_t *)arg; |
139 | 144 |
147 static void setup_observers(calc_data_t *calc_data) { | 152 static void setup_observers(calc_data_t *calc_data) { |
148 calculator_scr_t *calculator_scr; | 153 calculator_scr_t *calculator_scr; |
149 ob_factory_t *factory; | 154 ob_factory_t *factory; |
150 subject_t *subject; | 155 subject_t *subject; |
151 coord_t *coord; | 156 coord_t *coord; |
157 redraw_man_t *rdman; | |
152 int off; | 158 int off; |
153 int i; | 159 int i; |
154 | 160 |
155 calculator_scr = calc_data->code; | 161 calculator_scr = calc_data->code; |
156 factory = rdman_get_ob_factory(calc_data->rt->rdman); | 162 rdman = X_MB_rdman(calc_data->rt); |
163 factory = rdman_get_ob_factory(rdman); | |
157 | 164 |
158 for(i = 0; i < 16; i++) { | 165 for(i = 0; i < 16; i++) { |
159 off = tgt_list[i].off; | 166 off = tgt_list[i].off; |
160 coord = OFF2TYPE(calculator_scr, off, coord_t *); | 167 coord = OFF2TYPE(calculator_scr, off, coord_t *); |
161 subject = coord_get_mouse_event(coord); | 168 subject = coord_get_mouse_event(coord); |
162 subject_add_observer(factory, subject, buttons_handler, calc_data); | 169 subject_add_observer(factory, subject, buttons_handler, calc_data); |
163 } | 170 } |
164 } | 171 } |
165 | 172 |
166 int main(int argc, char * const argv[]) { | 173 int main(int argc, char * const argv[]) { |
167 X_MB_runtime_t rt; | 174 X_MB_runtime_t *rt; |
175 redraw_man_t *rdman; | |
168 calculator_scr_t *calculator_scr; | 176 calculator_scr_t *calculator_scr; |
169 calc_data_t calc_data; | 177 calc_data_t calc_data; |
170 int r; | |
171 | 178 |
172 r = X_MB_init(":0.0", 300, 400, &rt); | 179 rt = X_MB_new(":0.0", 300, 400); |
173 | 180 |
174 calculator_scr = calculator_scr_new(rt.rdman); | 181 rdman = X_MB_rdman(rt); |
182 calculator_scr = calculator_scr_new(rdman); | |
175 | 183 |
176 calc_data.rt = &rt; | 184 calc_data.rt = rt; |
177 calc_data.code = calculator_scr; | 185 calc_data.code = calculator_scr; |
178 setup_observers(&calc_data); | 186 setup_observers(&calc_data); |
179 | 187 |
180 X_MB_handle_connection(&rt); | 188 X_MB_handle_connection(rt); |
181 | 189 |
182 calculator_scr_free(calculator_scr); | 190 calculator_scr_free(calculator_scr); |
183 X_MB_destroy(&rt); | 191 X_MB_free(rt); |
184 | 192 |
185 return 0; | 193 return 0; |
186 } | 194 } |