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 }