comparison examples/dynamic/main.c @ 224:29e1b2bffe4c

X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly. - backend does not interpret mouse events (over/out/move), now. - redraw manager, now, interpret mouse events to make it backend independent. - The task (interpret mouse events) should be moved to somewhere in futhure. - backend only sent MotionNotify as EVT_MOUSE_MOVE_RAW. - EVT_MOUSE_MOVE_RAW is interpreted by backend independent code.
author Thinker K.F. Li <thinker@branda.to>
date Mon, 15 Dec 2008 10:13:03 +0800
parents ad4f8a956505
children b24d7889cbda
comparison
equal deleted inserted replaced
223:8be36a0d4239 224:29e1b2bffe4c
53 engine_t *en = btn->en; 53 engine_t *en = btn->en;
54 54
55 55
56 printf("Mouse move\n"); 56 printf("Mouse move\n");
57 COORD_SHOW(btn->active); 57 COORD_SHOW(btn->active);
58 COORD_HIDE(btn->normal); 58 #if 0
59 rdman_coord_changed(btn->en->rdman,btn->root); 59 rdman_coord_changed(btn->en->rdman,btn->root);
60 #endif
60 rdman_redraw_changed(btn->en->rdman); 61 rdman_redraw_changed(btn->en->rdman);
61 subject_remove_observer(CMOUSE(btn->normal), btn->obs_move);
62 btn->obs_press = subject_add_event_observer(CMOUSE(btn->active), EVT_MOUSE_BUT_PRESS, mb_button_pressed,btn);
63 btn->obs_out = subject_add_event_observer(CMOUSE(btn->active), EVT_MOUSE_OUT, mb_button_out,btn);
64 } 62 }
65 static void mb_button_out(event_t *evt, void *arg) 63 static void mb_button_out(event_t *evt, void *arg)
66 { 64 {
67 mb_button_t *btn = (mb_button_t *) arg; 65 mb_button_t *btn = (mb_button_t *) arg;
68 engine_t *en = btn->en; 66 engine_t *en = btn->en;
69 67
70 printf("mouse out\n"); 68 printf("mouse out\n");
71 COORD_HIDE(btn->active); 69 COORD_HIDE(btn->active);
72 COORD_SHOW(btn->normal); 70 #if 0
73 rdman_coord_changed(btn->en->rdman,btn->root); 71 rdman_coord_changed(btn->en->rdman,btn->root);
72 #endif
74 rdman_redraw_changed(btn->en->rdman); 73 rdman_redraw_changed(btn->en->rdman);
75 subject_remove_observer(CMOUSE(btn->active), btn->obs_press);
76 subject_remove_observer(CMOUSE(btn->active), btn->obs_out);
77 btn->obs_move = subject_add_event_observer(CMOUSE(btn->normal), EVT_MOUSE_MOVE, mb_button_move,btn);
78 } 74 }
79 75
80 void mb_button_show_active(event_t *evt, void *arg) 76 void mb_button_show_active(event_t *evt, void *arg)
81 { 77 {
82 mb_button_t *btn = (mb_button_t *) arg; 78 mb_button_t *btn = (mb_button_t *) arg;
83 engine_t *en = btn->en; 79 engine_t *en = btn->en;
84 80
85 COORD_HIDE(btn->click);
86 COORD_SHOW(btn->active); 81 COORD_SHOW(btn->active);
87 rdman_coord_changed(btn->en->rdman,btn->root); 82 rdman_coord_changed(btn->en->rdman,btn->root);
88 rdman_redraw_changed(btn->en->rdman); 83 rdman_redraw_changed(btn->en->rdman);
89 subject_remove_observer(CMOUSE(btn->click), btn->obs_press);
90 btn->obs_press = subject_add_event_observer(CMOUSE(btn->active), EVT_MOUSE_BUT_PRESS, mb_button_pressed,btn);
91 btn->obs_out = subject_add_event_observer(CMOUSE(btn->active), EVT_MOUSE_OUT, mb_button_out,btn);
92 } 84 }
93 85
94 void mb_button_pressed(event_t *evt, void *arg) 86 void mb_button_pressed(event_t *evt, void *arg)
95 { 87 {
96 mb_button_t *btn = (mb_button_t *) arg; 88 mb_button_t *btn = (mb_button_t *) arg;
97 engine_t *en = btn->en; 89 engine_t *en = btn->en;
98 mb_timeval_t now,to; 90 mb_timeval_t start, playing, now;
91 mb_progm_t *progm;
92 mb_word_t *word;
99 93
100 printf("Pressed\n"); 94 printf("Pressed\n");
101 COORD_SHOW(btn->click); 95 COORD_SHOW(btn->click);
102 COORD_HIDE(btn->active); 96 COORD_HIDE(btn->active);
103 rdman_coord_changed(en->rdman,en->button->root_coord); 97 rdman_coord_changed(en->rdman,en->button->root_coord);
104 rdman_redraw_changed(en->rdman); 98 rdman_redraw_changed(en->rdman);
99
100 progm = mb_progm_new(1, en->rdman);
101 MB_TIMEVAL_SET(&start, 0, 500000);
102 MB_TIMEVAL_SET(&playing, 0, 0);
103 word = mb_progm_next_word(progm, &start, &playing);
104 mb_visibility_new(VIS_HIDDEN, btn->click, word);
105 mb_visibility_new(VIS_VISIBLE, btn->active, word);
106 mb_progm_free_completed(progm);
105 get_now(&now); 107 get_now(&now);
106 MB_TIMEVAL_SET(&to, 0, 500); 108 mb_progm_start(progm, X_MB_tman(en->rt), &now);
107 MB_TIMEVAL_ADD(&to,&now);
108 subject_remove_observer(CMOUSE(btn->active), btn->obs_press);
109 subject_remove_observer(CMOUSE(btn->active), btn->obs_out);
110 btn->obs_press = subject_add_event_observer(CMOUSE(btn->click), EVT_MOUSE_BUT_RELEASE, mb_button_show_active,btn);
111 btn->obs_out = NULL;
112 } 109 }
113 mb_button_t *mb_button_new(engine_t *en,mb_sprite_t *sp, char *name) 110 mb_button_t *mb_button_new(engine_t *en,mb_sprite_t *sp, char *name)
114 { 111 {
115 mb_button_t *btn = (mb_button_t *) malloc(sizeof(mb_button_t)); 112 mb_button_t *btn = (mb_button_t *) malloc(sizeof(mb_button_t));
116 char *buf = (char *) malloc(strlen(name)+5); 113 char *buf = (char *) malloc(strlen(name)+5);
142 btn->normal->matrix[2] = 200; 139 btn->normal->matrix[2] = 200;
143 btn->normal->matrix[5] = 200; 140 btn->normal->matrix[5] = 200;
144 btn->click->matrix[2] = 200; 141 btn->click->matrix[2] = 200;
145 btn->click->matrix[5] = 200; 142 btn->click->matrix[5] = 200;
146 btn->en = en; 143 btn->en = en;
147 btn->obs_move = subject_add_event_observer(CMOUSE(btn->normal), EVT_MOUSE_MOVE, mb_button_move,btn); 144 btn->obs_move = subject_add_event_observer(CMOUSE(btn->root), EVT_MOUSE_MOVE, mb_button_move,btn);
148 btn->obs_out = NULL; 145 btn->obs_press = subject_add_event_observer(CMOUSE(btn->root), EVT_MOUSE_BUT_PRESS, mb_button_pressed,btn);
149 btn->obs_press = NULL; 146 btn->obs_out = subject_add_event_observer(CMOUSE(btn->root), EVT_MOUSE_OUT, mb_button_out,btn);
150 rdman_coord_changed(en->rdman,en->button->root_coord);
151 rdman_redraw_changed(en->rdman); 147 rdman_redraw_changed(en->rdman);
152 return btn; 148 return btn;
153 } 149 }
154 150
155 151
184 */ 180 */
185 menu_free(en->menu); 181 menu_free(en->menu);
186 X_MB_free(en->rt); 182 X_MB_free(en->rt);
187 free(en); 183 free(en);
188 } 184 }
189
190
191
192 void coord_move(coord_t *c, co_aix x, co_aix y)
193 {
194 c->matrix[2] = x;
195 c->matrix[5] = y;
196 }
197
198 185
199 186
200 static void add_rect_move(event_t *evt, void *arg) 187 static void add_rect_move(event_t *evt, void *arg)
201 { 188 {
202 engine_t *en = (engine_t *) arg; 189 engine_t *en = (engine_t *) arg;