Mercurial > MadButterfly
comparison examples/menu/main.c @ 305:0231b05552fe
Wait for the last animation done before we send the next one.
author | wycc |
---|---|
date | Sun, 15 Feb 2009 09:19:59 +0800 |
parents | c8f31eef947b |
children | c981e561ac37 |
comparison
equal
deleted
inserted
replaced
304:c8f31eef947b | 305:0231b05552fe |
---|---|
52 "Item 18", | 52 "Item 18", |
53 }; | 53 }; |
54 | 54 |
55 int menus_y[10]; | 55 int menus_y[10]; |
56 int items[10]; | 56 int items[10]; |
57 #define SPEED 600000 | 57 #define SPEED 300000 |
58 | 58 |
59 typedef struct { | 59 typedef struct { |
60 mb_animated_menu_t *m; | 60 mb_animated_menu_t *m; |
61 }MyAppData; | 61 }MyAppData; |
62 | 62 |
106 coord_x(lightbar) = coord_x(group); | 106 coord_x(lightbar) = coord_x(group); |
107 coord_y(lightbar) = coord_y(group); | 107 coord_y(lightbar) = coord_y(group); |
108 rdman_redraw_changed(MBAPP_RDMAN(m->app)); | 108 rdman_redraw_changed(MBAPP_RDMAN(m->app)); |
109 } | 109 } |
110 | 110 |
111 static void mb_animated_menu_complete(void *arg) | 111 static void mb_animated_menu_complete(event_t *ev,void *arg) |
112 { | 112 { |
113 mb_animated_menu_t *m = (mb_animated_menu_t *) arg; | 113 mb_animated_menu_t *m = (mb_animated_menu_t *) arg; |
114 | 114 |
115 m->ready++; | 115 m->ready++; |
116 printf("animated done ready=%d\n", m->ready); | |
116 } | 117 } |
117 | 118 |
118 static void mb_animated_menu_fillMenuContentUp(mb_animated_menu_t *m) | 119 static void mb_animated_menu_fillMenuContentUp(mb_animated_menu_t *m) |
119 { | 120 { |
120 int i; | 121 int i; |
238 coord_t *group; | 239 coord_t *group; |
239 coord_t *lightbar; | 240 coord_t *lightbar; |
240 | 241 |
241 progm = mb_progm_new(1, MBAPP_RDMAN(m->app)); | 242 progm = mb_progm_new(1, MBAPP_RDMAN(m->app)); |
242 MB_TIMEVAL_SET(&start, 0, 0); | 243 MB_TIMEVAL_SET(&start, 0, 0); |
243 MB_TIMEVAL_SET(&playing, 0, 200000); | 244 MB_TIMEVAL_SET(&playing, 0, SPEED); |
244 word = mb_progm_next_word(progm, &start, &playing); | 245 word = mb_progm_next_word(progm, &start, &playing); |
245 get_now(&now); | 246 get_now(&now); |
246 | 247 |
247 lightbar = (coord_t *) m->lightbar; | 248 lightbar = (coord_t *) m->lightbar; |
248 group = (coord_t *) m->objects[m->cur]; | 249 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word); |
249 mb_shift_new(coord_x(group)-coord_x(lightbar),coord_y(group)-coord_y(lightbar),lightbar,word); | |
250 mb_progm_free_completed(progm); | 250 mb_progm_free_completed(progm); |
251 m->ready--; | |
252 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m); | |
251 mb_progm_start(progm, X_MB_tman(MBAPP_RDMAN(m->app)->rt), &now); | 253 mb_progm_start(progm, X_MB_tman(MBAPP_RDMAN(m->app)->rt), &now); |
252 rdman_redraw_changed(MBAPP_RDMAN(m->app)); | 254 rdman_redraw_changed(MBAPP_RDMAN(m->app)); |
253 } | 255 } |
254 | 256 |
255 void mb_animated_menu_up(mb_animated_menu_t *m) | 257 void mb_animated_menu_up(mb_animated_menu_t *m) |
270 } | 272 } |
271 } | 273 } |
272 void mb_animated_menu_down(mb_animated_menu_t *m) | 274 void mb_animated_menu_down(mb_animated_menu_t *m) |
273 { | 275 { |
274 | 276 |
275 if (m->cur < 4) { | 277 if (m->cur < 5) { |
276 if (m->top+m->cur <= m->max) { | 278 if (m->top+m->cur <= m->max) { |
277 m->cur++; | 279 m->cur++; |
278 mb_animated_menu_moveLightBar(m); | 280 mb_animated_menu_moveLightBar(m); |
279 } | 281 } |
280 } else { | 282 } else { |
299 mb_animated_menu_t *m = (mb_animated_menu_t *) arg; | 301 mb_animated_menu_t *m = (mb_animated_menu_t *) arg; |
300 X_kb_event_t *xkey = (X_kb_event_t *)ev; | 302 X_kb_event_t *xkey = (X_kb_event_t *)ev; |
301 if(xkey->event.type != EVT_KB_PRESS) { | 303 if(xkey->event.type != EVT_KB_PRESS) { |
302 return; | 304 return; |
303 } | 305 } |
306 printf("read=%d\n",m->ready); | |
307 if (m->ready<=0) return; | |
304 switch(xkey->sym) { | 308 switch(xkey->sym) { |
305 case 0xff51: /* left */ | 309 case 0xff51: /* left */ |
306 break; | 310 break; |
307 | 311 |
308 case 0xff52: /* up */ | 312 case 0xff52: /* up */ |
362 m->menus_y[i] = coord_y((coord_t*)l); | 366 m->menus_y[i] = coord_y((coord_t*)l); |
363 } | 367 } |
364 m->titles = menus; | 368 m->titles = menus; |
365 snprintf(name,sizeof(name), "%s_lightbar", objnames); | 369 snprintf(name,sizeof(name), "%s_lightbar", objnames); |
366 m->lightbar = (mb_obj_t *) MB_SPRITE_GET_OBJ(sp,name); | 370 m->lightbar = (mb_obj_t *) MB_SPRITE_GET_OBJ(sp,name); |
367 if (m->lightbar) | 371 if (m->lightbar==NULL) |
368 fprintf(stderr,"Can not find object %s\n",name); | 372 fprintf(stderr,"Can not find object %s\n",name); |
369 mb_animated_menu_fillMenuContent(m); | 373 mb_animated_menu_fillMenuContent(m); |
370 subject_add_observer(MBAPP_keySubject(myApp), mb_animated_menu_keyHandler,m); | 374 subject_add_observer(MBAPP_keySubject(myApp), mb_animated_menu_keyHandler,m); |
371 return m; | 375 return m; |
372 } | 376 } |