annotate src/mbaf/animated_menu.c @ 1381:9a585df24e52

Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
author wycc
date Wed, 23 Mar 2011 23:02:36 +0800
parents 1993e5ae60aa
children
rev   line source
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*-
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
2 // vim: sw=4:ts=8:sts=4
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
3 #include <stdio.h>
4b58e58c78da Add missing file
wycc
parents:
diff changeset
4 #include <mb.h>
4b58e58c78da Add missing file
wycc
parents:
diff changeset
5 #include <string.h>
325
4453ea44a83d Remove the menu.h
root@localhost.localdomain
parents: 321
diff changeset
6 //#include "menu.h"
456
26c302b47de1 Change name of header files.
Thinker K.F. Li <thinker@branda.to>
parents: 455
diff changeset
7 #include "mb_af.h"
26c302b47de1 Change name of header files.
Thinker K.F. Li <thinker@branda.to>
parents: 455
diff changeset
8 #include "mb_ani_menu.h"
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
9 static void mb_animated_menu_update(mb_animated_menu_t *m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
10 static void set_text(coord_t *g, char *text)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
11 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
12 geo_t *geo;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
13 shape_t *shape;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
14
4b58e58c78da Add missing file
wycc
parents:
diff changeset
15 FOR_COORD_MEMBERS(g, geo) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
16 shape = geo_get_shape(geo);
922
152bc503dc99 Conditional compile for sh_text in mbaf
Thinker K.F. Li <thinker@codemud.net>
parents: 822
diff changeset
17 #ifdef SH_TEXT
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
18 if(shape->obj.obj_type == MBO_TEXT) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
19 sh_text_set_text(shape, text);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
20 }
922
152bc503dc99 Conditional compile for sh_text in mbaf
Thinker K.F. Li <thinker@codemud.net>
parents: 822
diff changeset
21 #endif
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
22 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
23 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
24
4b58e58c78da Add missing file
wycc
parents:
diff changeset
25 static void mb_animated_menu_fillMenuContent(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
26 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
27 int i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
28 coord_t *textgroup;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
29 coord_t *group;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
30 coord_t *lightbar;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
31
4b58e58c78da Add missing file
wycc
parents:
diff changeset
32 // fill new item
4b58e58c78da Add missing file
wycc
parents:
diff changeset
33 for(i=0;i<8;i++) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
34 group = (coord_t *) m->objects[m->items[i]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
35 if (i < m->max)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
36 set_text(group, m->titles[m->top+i]);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
37 else
4b58e58c78da Add missing file
wycc
parents:
diff changeset
38 set_text(group, "");
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
39 rdman_coord_changed(MBAF_RDMAN(m->app),group);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
40 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
41
4b58e58c78da Add missing file
wycc
parents:
diff changeset
42
4b58e58c78da Add missing file
wycc
parents:
diff changeset
43 textgroup = (coord_t *) m->objects[m->items[i]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
44 coord_hide(textgroup);
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
45 rdman_coord_changed(MBAF_RDMAN(m->app),textgroup);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
46
4b58e58c78da Add missing file
wycc
parents:
diff changeset
47 lightbar = (coord_t *) m->lightbar;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
48 group = (coord_t *) m->objects[m->cur];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
49 coord_y(lightbar) = coord_y(group);
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
50 rdman_coord_changed(MBAF_RDMAN(m->app),lightbar);
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
51 rdman_redraw_changed(MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
52 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
53
4b58e58c78da Add missing file
wycc
parents:
diff changeset
54 static void mb_animated_menu_complete(event_t *ev,void *arg)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
55 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
56 mb_animated_menu_t *m = (mb_animated_menu_t *) arg;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
57
4b58e58c78da Add missing file
wycc
parents:
diff changeset
58 m->ready++;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
59 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
60
4b58e58c78da Add missing file
wycc
parents:
diff changeset
61 static void mb_animated_menu_fillMenuContentUp(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
62 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
63 int i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
64 coord_t *textgroup;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
65 coord_t *group;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
66 coord_t *lightbar;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
67 int tmp;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
68 mb_timeval_t start, playing, now;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
69 mb_progm_t *progm;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
70 mb_word_t *word;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
71
4b58e58c78da Add missing file
wycc
parents:
diff changeset
72
4b58e58c78da Add missing file
wycc
parents:
diff changeset
73 // fill new item
4b58e58c78da Add missing file
wycc
parents:
diff changeset
74 group = (coord_t *) m->objects[m->items[8]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
75 set_text(group, m->titles[m->top]);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
76
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
77 m->progm = progm = mb_progm_new(2, MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
78 MB_TIMEVAL_SET(&start, 0, 0);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
79 MB_TIMEVAL_SET(&playing, 0, m->speed);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
80 word = mb_progm_next_word(progm, &start, &playing);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
81 get_now(&now);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
82
4b58e58c78da Add missing file
wycc
parents:
diff changeset
83 for(i=0;i<7;i++) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
84 //shift to the next item
4b58e58c78da Add missing file
wycc
parents:
diff changeset
85 textgroup = (coord_t *) m->objects[m->items[i]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
86 mb_shift_new(0,m->menus_y[i+1]-coord_y(textgroup), textgroup,word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
87 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
88 // fade out the item[7]
4b58e58c78da Add missing file
wycc
parents:
diff changeset
89 textgroup = (coord_t *) m->objects[m->items[7]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
90 mb_shift_new(0,100, textgroup,word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
91
4b58e58c78da Add missing file
wycc
parents:
diff changeset
92 // fade in the item[8]
4b58e58c78da Add missing file
wycc
parents:
diff changeset
93 textgroup = (coord_t *) m->objects[m->items[8]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
94 group = (coord_t *) m->objects[m->items[0]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
95 coord_y(textgroup) = m->menus_y[0]-100;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
96 coord_show(textgroup);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
97 mb_shift_new(0,100, textgroup,word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
98
4b58e58c78da Add missing file
wycc
parents:
diff changeset
99 lightbar = (coord_t *) m->lightbar;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
100 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word);
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
101
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
102 MB_TIMEVAL_SET(&start, 0, m->speed);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
103 MB_TIMEVAL_SET(&playing, 0, 0);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
104 word = mb_progm_next_word(progm, &start, &playing);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
105 textgroup = (coord_t *) m->objects[m->items[7]];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
106 mb_visibility_new(VIS_HIDDEN, textgroup,word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
107
4b58e58c78da Add missing file
wycc
parents:
diff changeset
108 mb_progm_free_completed(progm);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
109 m->ready--;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
110 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m);
1023
dffecd62817c Use mb_timer_man_t instead of mb_tman_t in mbaf
Thinker K.F. Li <thinker@codemud.net>
parents: 922
diff changeset
111 mb_progm_start(progm, mb_runtime_timer_man(MBAF_RDMAN(m->app)->rt), &now);
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
112 rdman_redraw_changed(MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
113 tmp = m->items[8];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
114 for(i=8;i>0;i--) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
115 m->items[i] = m->items[i-1];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
116 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
117 m->items[0] = tmp;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
118 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
119
4b58e58c78da Add missing file
wycc
parents:
diff changeset
120
4b58e58c78da Add missing file
wycc
parents:
diff changeset
121 static void mb_animated_menu_fillMenuContentDown(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
122 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
123 int i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
124 int tmp;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
125 mb_timeval_t start, playing, now;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
126 mb_progm_t *progm;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
127 mb_word_t *word;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
128
4b58e58c78da Add missing file
wycc
parents:
diff changeset
129
4b58e58c78da Add missing file
wycc
parents:
diff changeset
130 // fill new item
4b58e58c78da Add missing file
wycc
parents:
diff changeset
131 set_text((coord_t *)m->objects[m->items[8]], m->titles[m->top+7]);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
132
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
133 m->progm = progm = mb_progm_new(2, MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
134 MB_TIMEVAL_SET(&start, 0, 0);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
135 MB_TIMEVAL_SET(&playing, 0, m->speed);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
136 word = mb_progm_next_word(progm, &start, &playing);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
137 get_now(&now);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
138
4b58e58c78da Add missing file
wycc
parents:
diff changeset
139 for(i=1;i<8;i++) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
140 //shift to the next item
4b58e58c78da Add missing file
wycc
parents:
diff changeset
141 mb_shift_new(0,m->menus_y[i-1]-coord_y((coord_t *)m->objects[m->items[i]]), (coord_t *) m->objects[m->items[i]],word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
142 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
143 // fade out the item[0]
4b58e58c78da Add missing file
wycc
parents:
diff changeset
144 mb_shift_new(0,-100, (coord_t *)m->objects[m->items[0]],word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
145
4b58e58c78da Add missing file
wycc
parents:
diff changeset
146 // fade in the item[8]
4b58e58c78da Add missing file
wycc
parents:
diff changeset
147 coord_y((coord_t *)m->objects[m->items[8]]) = m->menus_y[7]+100;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
148 coord_show(((coord_t *)(m->objects[m->items[8]])));
4b58e58c78da Add missing file
wycc
parents:
diff changeset
149 mb_shift_new(0,-100, (coord_t *)m->objects[m->items[8]],word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
150
4b58e58c78da Add missing file
wycc
parents:
diff changeset
151 mb_shift_new(0,m->menus_y[m->cur]-coord_y((coord_t *)m->lightbar),((coord_t *)(m->lightbar)),word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
152
4b58e58c78da Add missing file
wycc
parents:
diff changeset
153 MB_TIMEVAL_SET(&start, 0, m->speed);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
154 MB_TIMEVAL_SET(&playing, 0, 0);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
155 word = mb_progm_next_word(progm, &start, &playing);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
156 mb_visibility_new(VIS_VISIBLE, (coord_t *) m->objects[m->items[0]],word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
157
4b58e58c78da Add missing file
wycc
parents:
diff changeset
158 mb_progm_free_completed(progm);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
159 m->ready--;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
160 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m);
1023
dffecd62817c Use mb_timer_man_t instead of mb_tman_t in mbaf
Thinker K.F. Li <thinker@codemud.net>
parents: 922
diff changeset
161 mb_progm_start(progm, mb_runtime_timer_man(MBAF_RDMAN(m->app)->rt), &now);
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
162 rdman_redraw_changed(MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
163 tmp = m->items[0];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
164 for(i=0;i<8;i++) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
165 m->items[i] = m->items[i+1];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
166 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
167 m->items[8] = tmp;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
168 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
169
4b58e58c78da Add missing file
wycc
parents:
diff changeset
170 void mb_animated_menu_moveLightBar(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
171 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
172 mb_timeval_t start, playing, now;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
173 mb_progm_t *progm;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
174 mb_word_t *word;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
175 coord_t *lightbar;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
176
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
177 m->progm = progm = mb_progm_new(1, MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
178 MB_TIMEVAL_SET(&start, 0, 0);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
179 MB_TIMEVAL_SET(&playing, 0, m->speed);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
180 word = mb_progm_next_word(progm, &start, &playing);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
181 get_now(&now);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
182
4b58e58c78da Add missing file
wycc
parents:
diff changeset
183 lightbar = (coord_t *) m->lightbar;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
184 mb_shift_new(0,m->menus_y[m->cur]-coord_y(lightbar),lightbar,word);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
185 mb_progm_free_completed(progm);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
186 m->ready--;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
187 subject_add_observer(mb_progm_get_complete(progm), mb_animated_menu_complete,m);
1023
dffecd62817c Use mb_timer_man_t instead of mb_tman_t in mbaf
Thinker K.F. Li <thinker@codemud.net>
parents: 922
diff changeset
188 mb_progm_start(progm, mb_runtime_timer_man(MBAF_RDMAN(m->app)->rt), &now);
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
189 rdman_redraw_changed(MBAF_RDMAN(m->app));
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
190 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
191
4b58e58c78da Add missing file
wycc
parents:
diff changeset
192 static void mb_animated_menu_up(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
193 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
194 if (m->cur > 5) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
195 m->cur--;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
196 mb_animated_menu_moveLightBar(m);
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
197 mb_animated_menu_update(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
198 } else {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
199 if (m->top > 0) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
200 m->top--;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
201 mb_animated_menu_fillMenuContentUp(m);
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
202 mb_animated_menu_update(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
203 } else {
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
204 if (m->cur == 0)
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
205 return;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
206 m->cur--;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
207 mb_animated_menu_moveLightBar(m);
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
208 mb_animated_menu_update(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
209 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
210 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
211 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
212 static void mb_animated_menu_down(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
213 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
214
4b58e58c78da Add missing file
wycc
parents:
diff changeset
215 if (m->cur < 5) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
216 if (m->top+m->cur <= m->max) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
217 m->cur++;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
218 mb_animated_menu_moveLightBar(m);
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
219 mb_animated_menu_update(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
220 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
221 } else {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
222 if ((m->top+8) < m->max-1) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
223 m->top++;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
224 mb_animated_menu_fillMenuContentDown(m);
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
225 mb_animated_menu_update(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
226 } else {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
227 if (m->cur+m->top < m->max-1) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
228 m->cur++;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
229 mb_animated_menu_moveLightBar(m);
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
230 mb_animated_menu_update(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
231 } else
4b58e58c78da Add missing file
wycc
parents:
diff changeset
232 return;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
233 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
234 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
235 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
236
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
237 void mb_animated_menu_set_update_callback(mb_animated_menu_t *m, void (*f)(mb_animated_menu_t *m, int sel))
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
238 {
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
239 m->update_callback = f;
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
240 }
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
241 void mb_animated_menu_set_callback(mb_animated_menu_t *m, void (*f)(mb_animated_menu_t *m, int sel))
4b58e58c78da Add missing file
wycc
parents:
diff changeset
242 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
243 m->callback = f;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
244 }
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
245 static void mb_animated_menu_update(mb_animated_menu_t *m)
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
246 {
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
247 if (m->update_callback)
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
248 m->update_callback(m,m->top+m->cur);
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
249
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
250 }
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
251 static void mb_animated_menu_select(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
252 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
253 if (m->callback)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
254 m->callback(m,m->top+m->cur);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
255 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
256
332
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
257 // Send the pending key in the animation progm complete callback
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
258 static void mb_animated_menu_keyHandler(event_t *ev, void *arg);
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
259 static void mb_animated_menu_send_pending_key(event_t *ev,void *arg)
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
260 {
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
261 mb_animated_menu_t *m = (mb_animated_menu_t *) arg;
1112
1993e5ae60aa Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents: 1023
diff changeset
262 mb_kb_event_t *xkey;
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
263
455
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
264 xkey = &m->pending_keys[m->pending_pos];
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
265 m->pending_pos = (m->pending_pos + 1) & 0xf;
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
266 mb_animated_menu_keyHandler((event_t *) xkey, m);
332
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
267 }
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
268 static void mb_animated_menu_keyHandler(event_t *ev, void *arg)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
269 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
270 mb_animated_menu_t *m = (mb_animated_menu_t *) arg;
1112
1993e5ae60aa Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents: 1023
diff changeset
271 mb_kb_event_t *xkey = (mb_kb_event_t *)ev;
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
272 if(xkey->event.type != EVT_KB_PRESS) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
273 return;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
274 }
332
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
275 if (m->ready<=0) {
455
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
276 m->pending_keys[m->pending_last++] = *xkey;
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
277 m->pending_last &= 0xf;
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
278 if(m->pending_last == m->pending_pos)
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
279 m->pending_last = (m->pending_last - 1) & 0xf;
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
280 else
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
281 subject_add_observer(mb_progm_get_complete(m->progm),
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
282 mb_animated_menu_send_pending_key,
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
283 m);
332
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
284 return;
f90c60967a9c Add mb_progm_finish to terminate the current animation and put all objects in the final position.
wycc
parents: 329
diff changeset
285 }
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
286 switch(xkey->sym) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
287 case 0xff51: /* left */
4b58e58c78da Add missing file
wycc
parents:
diff changeset
288 break;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
289
4b58e58c78da Add missing file
wycc
parents:
diff changeset
290 case 0xff52: /* up */
4b58e58c78da Add missing file
wycc
parents:
diff changeset
291 mb_animated_menu_up(m);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
292 break;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
293
4b58e58c78da Add missing file
wycc
parents:
diff changeset
294 case 0xff53: /* right */
4b58e58c78da Add missing file
wycc
parents:
diff changeset
295 break;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
296
4b58e58c78da Add missing file
wycc
parents:
diff changeset
297 case 0xff54: /* down */
4b58e58c78da Add missing file
wycc
parents:
diff changeset
298 mb_animated_menu_down(m);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
299 break;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
300
4b58e58c78da Add missing file
wycc
parents:
diff changeset
301 case 0xff0d: /* enter */
4b58e58c78da Add missing file
wycc
parents:
diff changeset
302 mb_animated_menu_select(m);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
303 break;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
304 default:
4b58e58c78da Add missing file
wycc
parents:
diff changeset
305 return;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
306 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
307 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
308
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
309 /** \brief Create an instace of animated menu.
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
310 *
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
311 * The objectnames is used to extract symbols from the SVG file.
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
312 * ${objectnames}0 - ${objectnames}8 is the text object.
4b58e58c78da Add missing file
wycc
parents:
diff changeset
313 * ${objectnames}_lightbar is the lightbar.
4b58e58c78da Add missing file
wycc
parents:
diff changeset
314 *
4b58e58c78da Add missing file
wycc
parents:
diff changeset
315 */
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
316 mb_animated_menu_t *mb_animated_menu_new(mbaf_t *app,mb_sprite_t *sp,char *objnames,char *menus[])
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
317 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
318 mb_animated_menu_t *m;
757
f43224bf3524 Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents: 456
diff changeset
319 int i;
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
320 char name[255];
4b58e58c78da Add missing file
wycc
parents:
diff changeset
321 mb_obj_t *l;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
322 int ii;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
323
4b58e58c78da Add missing file
wycc
parents:
diff changeset
324 if (menus == NULL)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
325 i=0;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
326 else
4b58e58c78da Add missing file
wycc
parents:
diff changeset
327 for(i=0;menus[i];i++);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
328 ii=9;
822
586e50f82c1f Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents: 757
diff changeset
329
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
330 m = (mb_animated_menu_t *) malloc(sizeof(mb_animated_menu_t));
4b58e58c78da Add missing file
wycc
parents:
diff changeset
331 m->items = (int *) malloc(sizeof(int)*ii*2+sizeof(mb_obj_t *)*ii);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
332 m->app = app;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
333 m->sprite = sp;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
334 m->top = 0;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
335 m->cur = 0;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
336 m->ready = 1;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
337 m->max = i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
338 m->menus_y = (int *) (m->items+ii);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
339 m->objects = (mb_obj_t **) (m->menus_y+ii);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
340 m->callback = NULL;
344
ab7f3c00fd05 Implement PMNG viewer
wycc
parents: 332
diff changeset
341 m->update_callback = NULL;
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
342 m->speed = 300000;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
343 for(i=0;i<9;i++) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
344 m->items[i] = i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
345 snprintf(name,sizeof(name),"%s%d", objnames, i+1);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
346 l = MB_SPRITE_GET_OBJ(sp,name);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
347 if (l == NULL) {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
348 fprintf(stderr,"Can not find symbol %s\n",name);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
349 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
350 m->objects[i] = (mb_obj_t *) l;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
351 m->menus_y[i] = coord_y((coord_t*)l);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
352 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
353 m->titles = menus;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
354 snprintf(name,sizeof(name), "%s_lightbar", objnames);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
355 m->lightbar = (mb_obj_t *) MB_SPRITE_GET_OBJ(sp,name);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
356 if (m->lightbar==NULL)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
357 fprintf(stderr,"Can not find object %s\n",name);
455
58b6337fb3b2 Fix bugs of pending keys of animated menu.
Thinker K.F. Li <thinker@branda.to>
parents: 454
diff changeset
358 m->pending_pos = m->pending_last = 0;
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
359 mb_animated_menu_fillMenuContent(m);
454
9b8dda201ccb Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 368
diff changeset
360 subject_add_observer(MBAF_KB_SUBJECT(app), mb_animated_menu_keyHandler,m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
361 return m;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
362 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
363
4b58e58c78da Add missing file
wycc
parents:
diff changeset
364 void mb_animated_menu_set_titles(mb_animated_menu_t *m, char *menus[])
4b58e58c78da Add missing file
wycc
parents:
diff changeset
365 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
366 int i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
367 for(i=0;menus[i];i++);
4b58e58c78da Add missing file
wycc
parents:
diff changeset
368
4b58e58c78da Add missing file
wycc
parents:
diff changeset
369 m->max = i;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
370 m->top = 0;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
371 m->cur = 0;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
372 m->titles = menus;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
373 mb_animated_menu_fillMenuContent(m);
329
740844ee48c4 Update position of light-bar after update menu item
Thinker K.F. Li <thinker@branda.to>
parents: 328
diff changeset
374 mb_animated_menu_moveLightBar(m);
318
4b58e58c78da Add missing file
wycc
parents:
diff changeset
375 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
376
4b58e58c78da Add missing file
wycc
parents:
diff changeset
377
4b58e58c78da Add missing file
wycc
parents:
diff changeset
378 void mb_animated_menu_set_speed(mb_animated_menu_t *m,int speed)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
379 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
380 m->speed = speed*1000;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
381 }
4b58e58c78da Add missing file
wycc
parents:
diff changeset
382
4b58e58c78da Add missing file
wycc
parents:
diff changeset
383 int mb_animated_menu_get_speed(mb_animated_menu_t *m)
4b58e58c78da Add missing file
wycc
parents:
diff changeset
384 {
4b58e58c78da Add missing file
wycc
parents:
diff changeset
385 return m->speed/1000;
4b58e58c78da Add missing file
wycc
parents:
diff changeset
386 }