Mercurial > MadButterfly
comparison src/mbaf/animated_menu.c @ 1067:7b4e80ab671a openvg
merge from default branch
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 01 Dec 2010 12:25:56 +0800 |
parents | dffecd62817c |
children | 1993e5ae60aa |
comparison
equal
deleted
inserted
replaced
630:bd18951b51d5 | 1067:7b4e80ab671a |
---|---|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- | |
2 // vim: sw=4:ts=8:sts=4 | |
1 #include <stdio.h> | 3 #include <stdio.h> |
2 #include <mb.h> | 4 #include <mb.h> |
3 #include <string.h> | 5 #include <string.h> |
4 //#include "menu.h" | 6 //#include "menu.h" |
5 #include "mb_af.h" | 7 #include "mb_af.h" |
10 geo_t *geo; | 12 geo_t *geo; |
11 shape_t *shape; | 13 shape_t *shape; |
12 | 14 |
13 FOR_COORD_MEMBERS(g, geo) { | 15 FOR_COORD_MEMBERS(g, geo) { |
14 shape = geo_get_shape(geo); | 16 shape = geo_get_shape(geo); |
17 #ifdef SH_TEXT | |
15 if(shape->obj.obj_type == MBO_TEXT) { | 18 if(shape->obj.obj_type == MBO_TEXT) { |
16 sh_text_set_text(shape, text); | 19 sh_text_set_text(shape, text); |
17 } | 20 } |
21 #endif | |
18 } | 22 } |
19 } | 23 } |
20 | 24 |
21 static void mb_animated_menu_fillMenuContent(mb_animated_menu_t *m) | 25 static void mb_animated_menu_fillMenuContent(mb_animated_menu_t *m) |
22 { | 26 { |
23 int i; | 27 int i; |
24 coord_t *textgroup; | 28 coord_t *textgroup; |
25 shape_t *text; | |
26 coord_t *group; | 29 coord_t *group; |
27 coord_t *lightbar; | 30 coord_t *lightbar; |
28 int tmp; | |
29 mb_timeval_t start, playing, now; | |
30 mb_progm_t *progm; | |
31 mb_word_t *word; | |
32 | 31 |
33 // fill new item | 32 // fill new item |
34 for(i=0;i<8;i++) { | 33 for(i=0;i<8;i++) { |
35 group = (coord_t *) m->objects[m->items[i]]; | 34 group = (coord_t *) m->objects[m->items[i]]; |
36 if (i < m->max) | 35 if (i < m->max) |
61 | 60 |
62 static void mb_animated_menu_fillMenuContentUp(mb_animated_menu_t *m) | 61 static void mb_animated_menu_fillMenuContentUp(mb_animated_menu_t *m) |
63 { | 62 { |
64 int i; | 63 int i; |
65 coord_t *textgroup; | 64 coord_t *textgroup; |
66 shape_t *text; | |
67 coord_t *group; | 65 coord_t *group; |
68 coord_t *lightbar; | 66 coord_t *lightbar; |
69 int tmp; | 67 int tmp; |
70 mb_timeval_t start, playing, now; | 68 mb_timeval_t start, playing, now; |
71 mb_progm_t *progm; | 69 mb_progm_t *progm; |
98 coord_show(textgroup); | 96 coord_show(textgroup); |
99 mb_shift_new(0,100, textgroup,word); | 97 mb_shift_new(0,100, textgroup,word); |
100 | 98 |
101 lightbar = (coord_t *) m->lightbar; | 99 lightbar = (coord_t *) m->lightbar; |
102 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word); | 100 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word); |
103 | 101 |
104 MB_TIMEVAL_SET(&start, 0, m->speed); | 102 MB_TIMEVAL_SET(&start, 0, m->speed); |
105 MB_TIMEVAL_SET(&playing, 0, 0); | 103 MB_TIMEVAL_SET(&playing, 0, 0); |
106 word = mb_progm_next_word(progm, &start, &playing); | 104 word = mb_progm_next_word(progm, &start, &playing); |
107 textgroup = (coord_t *) m->objects[m->items[7]]; | 105 textgroup = (coord_t *) m->objects[m->items[7]]; |
108 mb_visibility_new(VIS_HIDDEN, textgroup,word); | 106 mb_visibility_new(VIS_HIDDEN, textgroup,word); |
109 | 107 |
110 mb_progm_free_completed(progm); | 108 mb_progm_free_completed(progm); |
111 m->ready--; | 109 m->ready--; |
112 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); | 110 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); |
113 mb_progm_start(progm, X_MB_tman(MBAF_RDMAN(m->app)->rt), &now); | 111 mb_progm_start(progm, mb_runtime_timer_man(MBAF_RDMAN(m->app)->rt), &now); |
114 rdman_redraw_changed(MBAF_RDMAN(m->app)); | 112 rdman_redraw_changed(MBAF_RDMAN(m->app)); |
115 tmp = m->items[8]; | 113 tmp = m->items[8]; |
116 for(i=8;i>0;i--) { | 114 for(i=8;i>0;i--) { |
117 m->items[i] = m->items[i-1]; | 115 m->items[i] = m->items[i-1]; |
118 } | 116 } |
121 | 119 |
122 | 120 |
123 static void mb_animated_menu_fillMenuContentDown(mb_animated_menu_t *m) | 121 static void mb_animated_menu_fillMenuContentDown(mb_animated_menu_t *m) |
124 { | 122 { |
125 int i; | 123 int i; |
126 coord_t *textgroup; | |
127 shape_t *text; | |
128 coord_t *group; | |
129 coord_t *lightbar; | |
130 char name[255]; | |
131 int tmp; | 124 int tmp; |
132 mb_timeval_t start, playing, now; | 125 mb_timeval_t start, playing, now; |
133 mb_progm_t *progm; | 126 mb_progm_t *progm; |
134 mb_word_t *word; | 127 mb_word_t *word; |
135 | 128 |
163 mb_visibility_new(VIS_VISIBLE, (coord_t *) m->objects[m->items[0]],word); | 156 mb_visibility_new(VIS_VISIBLE, (coord_t *) m->objects[m->items[0]],word); |
164 | 157 |
165 mb_progm_free_completed(progm); | 158 mb_progm_free_completed(progm); |
166 m->ready--; | 159 m->ready--; |
167 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); | 160 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); |
168 mb_progm_start(progm, X_MB_tman(MBAF_RDMAN(m->app)->rt), &now); | 161 mb_progm_start(progm, mb_runtime_timer_man(MBAF_RDMAN(m->app)->rt), &now); |
169 rdman_redraw_changed(MBAF_RDMAN(m->app)); | 162 rdman_redraw_changed(MBAF_RDMAN(m->app)); |
170 tmp = m->items[0]; | 163 tmp = m->items[0]; |
171 for(i=0;i<8;i++) { | 164 for(i=0;i<8;i++) { |
172 m->items[i] = m->items[i+1]; | 165 m->items[i] = m->items[i+1]; |
173 } | 166 } |
177 void mb_animated_menu_moveLightBar(mb_animated_menu_t *m) | 170 void mb_animated_menu_moveLightBar(mb_animated_menu_t *m) |
178 { | 171 { |
179 mb_timeval_t start, playing, now; | 172 mb_timeval_t start, playing, now; |
180 mb_progm_t *progm; | 173 mb_progm_t *progm; |
181 mb_word_t *word; | 174 mb_word_t *word; |
182 coord_t *group; | |
183 coord_t *lightbar; | 175 coord_t *lightbar; |
184 | 176 |
185 m->progm = progm = mb_progm_new(1, MBAF_RDMAN(m->app)); | 177 m->progm = progm = mb_progm_new(1, MBAF_RDMAN(m->app)); |
186 MB_TIMEVAL_SET(&start, 0, 0); | 178 MB_TIMEVAL_SET(&start, 0, 0); |
187 MB_TIMEVAL_SET(&playing, 0, m->speed); | 179 MB_TIMEVAL_SET(&playing, 0, m->speed); |
191 lightbar = (coord_t *) m->lightbar; | 183 lightbar = (coord_t *) m->lightbar; |
192 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word); | 184 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word); |
193 mb_progm_free_completed(progm); | 185 mb_progm_free_completed(progm); |
194 m->ready--; | 186 m->ready--; |
195 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); | 187 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); |
196 mb_progm_start(progm, X_MB_tman(MBAF_RDMAN(m->app)->rt), &now); | 188 mb_progm_start(progm, mb_runtime_timer_man(MBAF_RDMAN(m->app)->rt), &now); |
197 rdman_redraw_changed(MBAF_RDMAN(m->app)); | 189 rdman_redraw_changed(MBAF_RDMAN(m->app)); |
198 } | 190 } |
199 | 191 |
200 static void mb_animated_menu_up(mb_animated_menu_t *m) | 192 static void mb_animated_menu_up(mb_animated_menu_t *m) |
201 { | 193 { |
207 if (m->top > 0) { | 199 if (m->top > 0) { |
208 m->top--; | 200 m->top--; |
209 mb_animated_menu_fillMenuContentUp(m); | 201 mb_animated_menu_fillMenuContentUp(m); |
210 mb_animated_menu_update(m); | 202 mb_animated_menu_update(m); |
211 } else { | 203 } else { |
212 if (m->cur == 0) | 204 if (m->cur == 0) |
213 return; | 205 return; |
214 m->cur--; | 206 m->cur--; |
215 mb_animated_menu_moveLightBar(m); | 207 mb_animated_menu_moveLightBar(m); |
216 mb_animated_menu_update(m); | 208 mb_animated_menu_update(m); |
217 } | 209 } |
266 static void mb_animated_menu_keyHandler(event_t *ev, void *arg); | 258 static void mb_animated_menu_keyHandler(event_t *ev, void *arg); |
267 static void mb_animated_menu_send_pending_key(event_t *ev,void *arg) | 259 static void mb_animated_menu_send_pending_key(event_t *ev,void *arg) |
268 { | 260 { |
269 mb_animated_menu_t *m = (mb_animated_menu_t *) arg; | 261 mb_animated_menu_t *m = (mb_animated_menu_t *) arg; |
270 X_kb_event_t *xkey; | 262 X_kb_event_t *xkey; |
271 | 263 |
272 xkey = &m->pending_keys[m->pending_pos]; | 264 xkey = &m->pending_keys[m->pending_pos]; |
273 m->pending_pos = (m->pending_pos + 1) & 0xf; | 265 m->pending_pos = (m->pending_pos + 1) & 0xf; |
274 mb_animated_menu_keyHandler((event_t *) xkey, m); | 266 mb_animated_menu_keyHandler((event_t *) xkey, m); |
275 } | 267 } |
276 static void mb_animated_menu_keyHandler(event_t *ev, void *arg) | 268 static void mb_animated_menu_keyHandler(event_t *ev, void *arg) |
312 default: | 304 default: |
313 return; | 305 return; |
314 } | 306 } |
315 } | 307 } |
316 | 308 |
317 /** \brief Create an instace of animated menu. | 309 /** \brief Create an instace of animated menu. |
318 * | 310 * |
319 * The objectnames is used to extract symbols from the SVG file. | 311 * The objectnames is used to extract symbols from the SVG file. |
320 * ${objectnames}0 - ${objectnames}8 is the text object. | 312 * ${objectnames}0 - ${objectnames}8 is the text object. |
321 * ${objectnames}_lightbar is the lightbar. | 313 * ${objectnames}_lightbar is the lightbar. |
322 * | 314 * |
323 */ | 315 */ |
324 mb_animated_menu_t *mb_animated_menu_new(mbaf_t *app,mb_sprite_t *sp,char *objnames,char *menus[]) | 316 mb_animated_menu_t *mb_animated_menu_new(mbaf_t *app,mb_sprite_t *sp,char *objnames,char *menus[]) |
325 { | 317 { |
326 mb_animated_menu_t *m; | 318 mb_animated_menu_t *m; |
327 int i,len; | 319 int i; |
328 char name[255]; | 320 char name[255]; |
329 mb_obj_t *l; | 321 mb_obj_t *l; |
330 int ii; | 322 int ii; |
331 | 323 |
332 if (menus == NULL) | 324 if (menus == NULL) |
333 i=0; | 325 i=0; |
334 else | 326 else |
335 for(i=0;menus[i];i++); | 327 for(i=0;menus[i];i++); |
336 ii=9; | 328 ii=9; |
337 | 329 |
338 m = (mb_animated_menu_t *) malloc(sizeof(mb_animated_menu_t)); | 330 m = (mb_animated_menu_t *) malloc(sizeof(mb_animated_menu_t)); |
339 m->items = (int *) malloc(sizeof(int)*ii*2+sizeof(mb_obj_t *)*ii); | 331 m->items = (int *) malloc(sizeof(int)*ii*2+sizeof(mb_obj_t *)*ii); |
340 m->app = app; | 332 m->app = app; |
341 m->sprite = sp; | 333 m->sprite = sp; |
342 m->top = 0; | 334 m->top = 0; |