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 }