|
15 | 15 | #include "events.h"
|
16 | 16 |
|
17 | 17 | static struct app_events_t {
|
18 |
| - /** list_t<app_event_t> */ |
19 |
| - list_t queue; |
| 18 | + /** list_t<app_event_t> */ |
| 19 | + list_t queue; |
20 | 20 |
|
21 |
| - /** list_t<app_listener_t> */ |
22 |
| - list_t listeners; |
| 21 | + /** list_t<app_listener_t> */ |
| 22 | + list_t listeners; |
23 | 23 |
|
24 |
| - app_event_dispatcher_t dispatcher; |
| 24 | + app_event_dispatcher_t dispatcher; |
25 | 25 | } app_events;
|
26 | 26 |
|
27 | 27 | int app_touch_event_init(app_event_t *e, touch_point_t *points, int n_points)
|
28 | 28 | {
|
29 |
| - e->type = APP_EVENT_TOUCH; |
30 |
| - e->touch.n_points = n_points; |
31 |
| - e->touch.points = malloc(sizeof(touch_point_t) * n_points); |
32 |
| - if (!e->touch.points) { |
33 |
| - return -ENOMEM; |
34 |
| - } |
35 |
| - for (n_points -= 1; n_points >= 0; --n_points) { |
36 |
| - e->touch.points[n_points] = points[n_points]; |
37 |
| - } |
38 |
| - return 0; |
| 29 | + e->type = APP_EVENT_TOUCH; |
| 30 | + e->touch.n_points = n_points; |
| 31 | + e->touch.points = malloc(sizeof(touch_point_t) * n_points); |
| 32 | + if (!e->touch.points) { |
| 33 | + return -ENOMEM; |
| 34 | + } |
| 35 | + for (n_points -= 1; n_points >= 0; --n_points) { |
| 36 | + e->touch.points[n_points] = points[n_points]; |
| 37 | + } |
| 38 | + return 0; |
39 | 39 | }
|
40 | 40 |
|
41 | 41 | int app_composition_event_init(app_event_t *e, const wchar_t *text, size_t len)
|
42 | 42 | {
|
43 |
| - if (len == 0) { |
44 |
| - len = wcslen(text); |
45 |
| - } |
46 |
| - e->type = APP_EVENT_COMPOSITION; |
47 |
| - e->text.length = len; |
48 |
| - e->text.text = malloc(sizeof(wchar_t) * (len + 1)); |
49 |
| - if (!e->text.text) { |
50 |
| - return -ENOMEM; |
51 |
| - } |
52 |
| - wcscpy(e->text.text, text); |
53 |
| - return 0; |
| 43 | + if (len == 0) { |
| 44 | + len = wcslen(text); |
| 45 | + } |
| 46 | + e->type = APP_EVENT_COMPOSITION; |
| 47 | + e->text.length = len; |
| 48 | + e->text.text = malloc(sizeof(wchar_t) * (len + 1)); |
| 49 | + if (!e->text.text) { |
| 50 | + return -ENOMEM; |
| 51 | + } |
| 52 | + wcscpy(e->text.text, text); |
| 53 | + return 0; |
54 | 54 | }
|
55 | 55 |
|
56 | 56 | int app_event_copy(app_event_t *dest, app_event_t *src)
|
57 | 57 | {
|
58 |
| - switch (src->type) { |
59 |
| - case APP_EVENT_TOUCH: |
60 |
| - return app_touch_event_init(dest, src->touch.points, |
61 |
| - src->touch.n_points); |
62 |
| - case APP_EVENT_TEXTINPUT: |
63 |
| - return app_composition_event_init(dest, src->text.text, 0); |
64 |
| - default: |
65 |
| - *dest = *src; |
66 |
| - break; |
67 |
| - } |
68 |
| - return 0; |
| 58 | + switch (src->type) { |
| 59 | + case APP_EVENT_TOUCH: |
| 60 | + return app_touch_event_init(dest, src->touch.points, |
| 61 | + src->touch.n_points); |
| 62 | + case APP_EVENT_TEXTINPUT: |
| 63 | + return app_composition_event_init(dest, src->text.text, 0); |
| 64 | + default: |
| 65 | + *dest = *src; |
| 66 | + break; |
| 67 | + } |
| 68 | + return 0; |
69 | 69 | }
|
70 | 70 |
|
71 | 71 | void app_event_destroy(app_event_t *e)
|
72 | 72 | {
|
73 |
| - switch (e->type) { |
74 |
| - case APP_EVENT_TOUCH: |
75 |
| - if (e->touch.points) { |
76 |
| - free(e->touch.points); |
77 |
| - } |
78 |
| - e->touch.points = NULL; |
79 |
| - e->touch.n_points = 0; |
80 |
| - break; |
81 |
| - case APP_EVENT_COMPOSITION: |
82 |
| - if (e->text.text) { |
83 |
| - free(e->text.text); |
84 |
| - } |
85 |
| - e->text.text = NULL; |
86 |
| - e->text.length = 0; |
87 |
| - break; |
88 |
| - default: |
89 |
| - break; |
90 |
| - } |
91 |
| - e->type = APP_EVENT_NONE; |
| 73 | + switch (e->type) { |
| 74 | + case APP_EVENT_TOUCH: |
| 75 | + if (e->touch.points) { |
| 76 | + free(e->touch.points); |
| 77 | + } |
| 78 | + e->touch.points = NULL; |
| 79 | + e->touch.n_points = 0; |
| 80 | + break; |
| 81 | + case APP_EVENT_COMPOSITION: |
| 82 | + if (e->text.text) { |
| 83 | + free(e->text.text); |
| 84 | + } |
| 85 | + e->text.text = NULL; |
| 86 | + e->text.length = 0; |
| 87 | + break; |
| 88 | + default: |
| 89 | + break; |
| 90 | + } |
| 91 | + e->type = APP_EVENT_NONE; |
92 | 92 | }
|
93 | 93 |
|
94 | 94 | int app_post_event(app_event_t *e)
|
95 | 95 | {
|
96 |
| - app_event_t *ev; |
97 |
| - |
98 |
| - ev = malloc(sizeof(app_event_t)); |
99 |
| - if (!ev) { |
100 |
| - return -ENOMEM; |
101 |
| - } |
102 |
| - app_event_copy(ev, e); |
103 |
| - list_append(&app_events.queue, ev); |
104 |
| - return 0; |
| 96 | + app_event_t *ev; |
| 97 | + |
| 98 | + ev = malloc(sizeof(app_event_t)); |
| 99 | + if (!ev) { |
| 100 | + return -ENOMEM; |
| 101 | + } |
| 102 | + app_event_copy(ev, e); |
| 103 | + list_append(&app_events.queue, ev); |
| 104 | + return 0; |
105 | 105 | }
|
106 | 106 |
|
107 | 107 | int app_add_event_listener(int event_type, app_event_handler_t handler,
|
108 |
| - void *data) |
| 108 | + void *data) |
109 | 109 | {
|
110 |
| - app_event_listener_t *listener; |
111 |
| - |
112 |
| - listener = malloc(sizeof(app_event_listener_t)); |
113 |
| - if (!listener) { |
114 |
| - return -ENOMEM; |
115 |
| - } |
116 |
| - listener->handler = handler; |
117 |
| - listener->data = data; |
118 |
| - listener->type = event_type; |
119 |
| - list_append(&app_events.listeners, listener); |
120 |
| - return 0; |
| 110 | + app_event_listener_t *listener; |
| 111 | + |
| 112 | + listener = malloc(sizeof(app_event_listener_t)); |
| 113 | + if (!listener) { |
| 114 | + return -ENOMEM; |
| 115 | + } |
| 116 | + listener->handler = handler; |
| 117 | + listener->data = data; |
| 118 | + listener->type = event_type; |
| 119 | + list_append(&app_events.listeners, listener); |
| 120 | + return 0; |
121 | 121 | }
|
122 | 122 |
|
123 | 123 | int app_remove_event_listener(int event_type, app_event_handler_t handler)
|
124 | 124 | {
|
125 |
| - list_node_t *node, *prev; |
126 |
| - app_event_listener_t *listener; |
127 |
| - |
128 |
| - for (list_each(node, &app_events.listeners)) { |
129 |
| - prev = node->prev; |
130 |
| - listener = node->data; |
131 |
| - if (listener->handler == handler && |
132 |
| - listener->type == event_type) { |
133 |
| - list_delete_node(&app_events.listeners, node); |
134 |
| - free(listener); |
135 |
| - node = prev; |
136 |
| - return 0; |
137 |
| - } |
138 |
| - } |
139 |
| - return -1; |
| 125 | + list_node_t *node, *prev; |
| 126 | + app_event_listener_t *listener; |
| 127 | + |
| 128 | + for (list_each(node, &app_events.listeners)) { |
| 129 | + prev = node->prev; |
| 130 | + listener = node->data; |
| 131 | + if (listener->handler == handler && |
| 132 | + listener->type == event_type) { |
| 133 | + list_delete_node(&app_events.listeners, node); |
| 134 | + free(listener); |
| 135 | + node = prev; |
| 136 | + return 0; |
| 137 | + } |
| 138 | + } |
| 139 | + return -1; |
140 | 140 | }
|
141 | 141 |
|
142 | 142 | int app_process_event(app_event_t *e)
|
143 | 143 | {
|
144 |
| - int count = 0; |
145 |
| - list_node_t *node; |
146 |
| - app_event_listener_t *listener; |
147 |
| - |
148 |
| - for (list_each(node, &app_events.listeners)) { |
149 |
| - listener = node->data; |
150 |
| - if (listener->type == e->type) { |
151 |
| - listener->handler(e, listener->data); |
152 |
| - ++count; |
153 |
| - } |
154 |
| - } |
155 |
| - if (app_events.dispatcher) { |
156 |
| - app_events.dispatcher(e); |
157 |
| - } |
158 |
| - return count; |
| 144 | + int count = 0; |
| 145 | + list_node_t *node; |
| 146 | + app_event_listener_t *listener; |
| 147 | + |
| 148 | + for (list_each(node, &app_events.listeners)) { |
| 149 | + listener = node->data; |
| 150 | + if (listener->type == e->type) { |
| 151 | + listener->handler(e, listener->data); |
| 152 | + ++count; |
| 153 | + } |
| 154 | + } |
| 155 | + if (app_events.dispatcher) { |
| 156 | + app_events.dispatcher(e); |
| 157 | + } |
| 158 | + return count; |
159 | 159 | }
|
160 | 160 |
|
161 | 161 | void app_process_events(void)
|
162 | 162 | {
|
163 |
| - app_event_t *e; |
164 |
| - |
165 |
| - while ((e = list_get(&app_events.queue, 0)) != NULL) { |
166 |
| - list_delete(&app_events.queue, 0); |
167 |
| - app_process_event(e); |
168 |
| - app_event_destroy(e); |
169 |
| - free(e); |
170 |
| - } |
| 163 | + app_event_t *e; |
| 164 | + |
| 165 | + while ((e = list_get(&app_events.queue, 0)) != NULL) { |
| 166 | + list_delete(&app_events.queue, 0); |
| 167 | + app_process_event(e); |
| 168 | + app_event_destroy(e); |
| 169 | + free(e); |
| 170 | + } |
171 | 171 | }
|
172 | 172 |
|
173 | 173 | void app_set_event_dispatcher(app_event_dispatcher_t dispatcher)
|
174 | 174 | {
|
175 |
| - app_events.dispatcher = dispatcher; |
| 175 | + app_events.dispatcher = dispatcher; |
176 | 176 | }
|
177 | 177 |
|
178 | 178 | void app_init_events(void)
|
179 | 179 | {
|
180 |
| - list_create(&app_events.queue); |
| 180 | + list_create(&app_events.queue); |
181 | 181 | }
|
182 | 182 |
|
183 | 183 | void app_destroy_events(void)
|
184 | 184 | {
|
185 |
| - app_set_event_dispatcher(NULL); |
186 |
| - list_destroy(&app_events.queue, free); |
| 185 | + app_set_event_dispatcher(NULL); |
| 186 | + list_destroy(&app_events.queue, free); |
187 | 187 | }
|
0 commit comments