Mercurial > MadButterfly
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; |