aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/canvas/evas_object_intercept.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/canvas/evas_object_intercept.c')
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_intercept.c625
1 files changed, 625 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/canvas/evas_object_intercept.c b/libraries/evas/src/lib/canvas/evas_object_intercept.c
new file mode 100644
index 0000000..c3e5e24
--- /dev/null
+++ b/libraries/evas/src/lib/canvas/evas_object_intercept.c
@@ -0,0 +1,625 @@
1#include "evas_common.h"
2#include "evas_private.h"
3
4/* local calls */
5
6static void evas_object_intercept_init(Evas_Object *obj);
7static void evas_object_intercept_deinit(Evas_Object *obj);
8
9static void
10evas_object_intercept_init(Evas_Object *obj)
11{
12 /* MEM OK */
13 if (!obj->interceptors)
14 obj->interceptors = evas_mem_calloc(sizeof(Evas_Intercept_Func));
15}
16
17static void
18evas_object_intercept_deinit(Evas_Object *obj)
19{
20 /* MEM OK */
21 if (!obj->interceptors) return;
22 if ((obj->interceptors->show.func) ||
23 (obj->interceptors->hide.func) ||
24 (obj->interceptors->move.func) ||
25 (obj->interceptors->resize.func) ||
26 (obj->interceptors->raise.func) ||
27 (obj->interceptors->lower.func) ||
28 (obj->interceptors->stack_above.func) ||
29 (obj->interceptors->stack_below.func) ||
30 (obj->interceptors->layer_set.func) ||
31 (obj->interceptors->color_set.func) ||
32 (obj->interceptors->clip_set.func) ||
33 (obj->interceptors->clip_unset.func))
34 return;
35 free(obj->interceptors);
36 obj->interceptors = NULL;
37}
38
39/* private calls */
40
41void
42evas_object_intercept_cleanup(Evas_Object *obj)
43{
44 /* MEM OK */
45 if (obj->interceptors) free(obj->interceptors);
46}
47
48int
49evas_object_intercept_call_show(Evas_Object *obj)
50{
51 /* MEM OK */
52 int ret;
53
54 if (!obj->interceptors) return 0;
55 if (obj->intercepted) return 0;
56 obj->intercepted = 1;
57 ret = !!(obj->interceptors->show.func);
58 if (obj->interceptors->show.func)
59 obj->interceptors->show.func(obj->interceptors->show.data, obj);
60 obj->intercepted = 0;
61 return ret;
62}
63
64int
65evas_object_intercept_call_hide(Evas_Object *obj)
66{
67 /* MEM OK */
68 int ret;
69
70 if (!obj->interceptors) return 0;
71 if (obj->intercepted) return 0;
72 obj->intercepted = 1;
73 ret = !!(obj->interceptors->hide.func);
74 if (obj->interceptors->hide.func)
75 obj->interceptors->hide.func(obj->interceptors->hide.data, obj);
76 obj->intercepted = 0;
77 return ret;
78}
79
80int
81evas_object_intercept_call_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
82{
83 /* MEM OK */
84 int ret;
85
86 if (!obj->interceptors) return 0;
87 if (obj->intercepted) return 0;
88 obj->intercepted = 1;
89 ret = !!(obj->interceptors->move.func);
90 if (obj->interceptors->move.func)
91 obj->interceptors->move.func(obj->interceptors->move.data, obj, x, y);
92 obj->intercepted = 0;
93 return ret;
94}
95
96int
97evas_object_intercept_call_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
98{
99 /* MEM OK */
100 int ret;
101
102 if (!obj->interceptors) return 0;
103 if (obj->intercepted) return 0;
104 obj->intercepted = 1;
105 ret = !!(obj->interceptors->resize.func);
106 if (obj->interceptors->resize.func)
107 obj->interceptors->resize.func(obj->interceptors->resize.data, obj, w, h);
108 obj->intercepted = 0;
109 return ret;
110}
111
112int
113evas_object_intercept_call_raise(Evas_Object *obj)
114{
115 /* MEM OK */
116 int ret;
117
118 if (!obj->interceptors) return 0;
119 if (obj->intercepted) return 0;
120 obj->intercepted = 1;
121 ret = !!(obj->interceptors->raise.func);
122 if (obj->interceptors->raise.func)
123 obj->interceptors->raise.func(obj->interceptors->raise.data, obj);
124 obj->intercepted = 0;
125 return ret;
126}
127
128int
129evas_object_intercept_call_lower(Evas_Object *obj)
130{
131 /* MEM OK */
132 int ret;
133
134 if (!obj->interceptors) return 0;
135 if (obj->intercepted) return 0;
136 obj->intercepted = 1;
137 ret = !!(obj->interceptors->lower.func);
138 if (obj->interceptors->lower.func)
139 obj->interceptors->lower.func(obj->interceptors->lower.data, obj);
140 obj->intercepted = 0;
141 return ret;
142}
143
144int
145evas_object_intercept_call_stack_above(Evas_Object *obj, Evas_Object *above)
146{
147 /* MEM OK */
148 int ret;
149
150 if (!obj->interceptors) return 0;
151 if (obj->intercepted) return 0;
152 obj->intercepted = 1;
153 ret = !!(obj->interceptors->stack_above.func);
154 if (obj->interceptors->stack_above.func)
155 obj->interceptors->stack_above.func(obj->interceptors->stack_above.data, obj, above);
156 obj->intercepted = 0;
157 return ret;
158}
159
160int
161evas_object_intercept_call_stack_below(Evas_Object *obj, Evas_Object *below)
162{
163 /* MEM OK */
164 int ret;
165
166 if (!obj->interceptors) return 0;
167 if (obj->intercepted) return 0;
168 obj->intercepted = 1;
169 ret = !!(obj->interceptors->stack_below.func);
170 if (obj->interceptors->stack_below.func)
171 obj->interceptors->stack_below.func(obj->interceptors->stack_below.data, obj, below);
172 obj->intercepted = 0;
173 return ret;
174}
175
176int
177evas_object_intercept_call_layer_set(Evas_Object *obj, int l)
178{
179 /* MEM OK */
180 int ret;
181
182 if (!obj->interceptors) return 0;
183 if (obj->intercepted) return 0;
184 obj->intercepted = 1;
185 ret = !!(obj->interceptors->layer_set.func);
186 if (obj->interceptors->layer_set.func)
187 obj->interceptors->layer_set.func(obj->interceptors->layer_set.data, obj, l);
188 obj->intercepted = 0;
189 return ret;
190}
191
192int
193evas_object_intercept_call_color_set(Evas_Object *obj, int r, int g, int b, int a)
194{
195 /* MEM OK */
196 int ret;
197
198 if (!obj->interceptors) return 0;
199 if (obj->intercepted) return 0;
200 obj->intercepted = 1;
201 ret = !!(obj->interceptors->color_set.func);
202 if (obj->interceptors->color_set.func)
203 obj->interceptors->color_set.func(obj->interceptors->color_set.data, obj, r, g, b, a);
204 obj->intercepted = 0;
205 return ret;
206}
207
208int
209evas_object_intercept_call_clip_set(Evas_Object *obj, Evas_Object *clip)
210{
211 /* MEM OK */
212 int ret;
213
214 if (!obj->interceptors) return 0;
215 if (obj->intercepted) return 0;
216 obj->intercepted = 1;
217 ret = !!(obj->interceptors->clip_set.func);
218 if (obj->interceptors->clip_set.func)
219 obj->interceptors->clip_set.func(obj->interceptors->clip_set.data, obj, clip);
220 obj->intercepted = 0;
221 return ret;
222}
223
224int
225evas_object_intercept_call_clip_unset(Evas_Object *obj)
226{
227 /* MEM OK */
228 int ret;
229
230 if (!obj->interceptors) return 0;
231 if (obj->intercepted) return 0;
232 obj->intercepted = 1;
233 ret = !!(obj->interceptors->clip_unset.func);
234 if (obj->interceptors->clip_unset.func)
235 obj->interceptors->clip_unset.func(obj->interceptors->clip_unset.data, obj);
236 obj->intercepted = 0;
237 return ret;
238}
239
240/* public calls */
241
242EAPI void
243evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data)
244{
245 /* MEM OK */
246
247 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
248 return;
249 MAGIC_CHECK_END();
250 if (!func) return;
251 evas_object_intercept_init(obj);
252 if (!obj->interceptors) return;
253 obj->interceptors->show.func = func;
254 obj->interceptors->show.data = (void *)data;
255}
256
257EAPI void *
258evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func)
259{
260 /* MEM OK */
261 void *data;
262
263 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
264 return NULL;
265 MAGIC_CHECK_END();
266 if (!func) return NULL;
267 if (!obj->interceptors) return NULL;
268 obj->interceptors->show.func = NULL;
269 data = obj->interceptors->show.data;
270 obj->interceptors->show.data = NULL;
271 evas_object_intercept_deinit(obj);
272 return data;
273}
274
275EAPI void
276evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data)
277{
278 /* MEM OK */
279 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
280 return;
281 MAGIC_CHECK_END();
282 if (!func) return;
283 evas_object_intercept_init(obj);
284 if (!obj->interceptors) return;
285 obj->interceptors->hide.func = func;
286 obj->interceptors->hide.data = (void *)data;
287}
288
289EAPI void *
290evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func)
291{
292 /* MEM OK */
293 void *data;
294
295 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
296 return NULL;
297 MAGIC_CHECK_END();
298 if (!func) return NULL;
299 if (!obj->interceptors) return NULL;
300 obj->interceptors->hide.func = NULL;
301 data = obj->interceptors->hide.data;
302 obj->interceptors->hide.data = NULL;
303 evas_object_intercept_deinit(obj);
304 return data;
305}
306
307EAPI void
308evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data)
309{
310 /* MEM OK */
311 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
312 return;
313 MAGIC_CHECK_END();
314 if (!func) return;
315 evas_object_intercept_init(obj);
316 if (!obj->interceptors) return;
317 obj->interceptors->move.func = func;
318 obj->interceptors->move.data = (void *)data;
319}
320
321EAPI void *
322evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func)
323{
324 /* MEM OK */
325 void *data;
326
327 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
328 return NULL;
329 MAGIC_CHECK_END();
330 if (!func) return NULL;
331 if (!obj->interceptors) return NULL;
332 obj->interceptors->move.func = NULL;
333 data = obj->interceptors->move.data;
334 obj->interceptors->move.data = NULL;
335 evas_object_intercept_deinit(obj);
336 return data;
337}
338
339EAPI void
340evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data)
341{
342 /* MEM OK */
343 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
344 return;
345 MAGIC_CHECK_END();
346 if (!func) return;
347 evas_object_intercept_init(obj);
348 if (!obj->interceptors) return;
349 obj->interceptors->resize.func = func;
350 obj->interceptors->resize.data = (void *)data;
351}
352
353EAPI void *
354evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func)
355{
356 /* MEM OK */
357 void *data;
358
359 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
360 return NULL;
361 MAGIC_CHECK_END();
362 if (!func) return NULL;
363 if (!obj->interceptors) return NULL;
364 obj->interceptors->resize.func = NULL;
365 data = obj->interceptors->resize.data;
366 obj->interceptors->resize.data = NULL;
367 evas_object_intercept_deinit(obj);
368 return data;
369}
370
371EAPI void
372evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data)
373{
374 /* MEM OK */
375 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
376 return;
377 MAGIC_CHECK_END();
378 if (!func) return;
379 evas_object_intercept_init(obj);
380 if (!obj->interceptors) return;
381 obj->interceptors->raise.func = func;
382 obj->interceptors->raise.data = (void *)data;
383}
384
385EAPI void *
386evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func)
387{
388 /* MEM OK */
389 void *data;
390
391 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
392 return NULL;
393 MAGIC_CHECK_END();
394 if (!func) return NULL;
395 if (!obj->interceptors) return NULL;
396 obj->interceptors->raise.func = NULL;
397 data = obj->interceptors->raise.data;
398 obj->interceptors->raise.data = NULL;
399 evas_object_intercept_deinit(obj);
400 return data;
401}
402
403EAPI void
404evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data)
405{
406 /* MEM OK */
407 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
408 return;
409 MAGIC_CHECK_END();
410 if (!func) return;
411 evas_object_intercept_init(obj);
412 if (!obj->interceptors) return;
413 obj->interceptors->lower.func = func;
414 obj->interceptors->lower.data = (void *)data;
415}
416
417EAPI void *
418evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func)
419{
420 /* MEM OK */
421 void *data;
422
423 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
424 return NULL;
425 MAGIC_CHECK_END();
426 if (!func) return NULL;
427 if (!obj->interceptors) return NULL;
428 obj->interceptors->lower.func = NULL;
429 data = obj->interceptors->lower.data;
430 obj->interceptors->lower.data = NULL;
431 evas_object_intercept_deinit(obj);
432 return data;
433}
434
435EAPI void
436evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data)
437{
438 /* MEM OK */
439 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
440 return;
441 MAGIC_CHECK_END();
442 if (!func) return;
443 evas_object_intercept_init(obj);
444 if (!obj->interceptors) return;
445 obj->interceptors->stack_above.func = func;
446 obj->interceptors->stack_above.data = (void *)data;
447}
448
449EAPI void *
450evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func)
451{
452 /* MEM OK */
453 void *data;
454
455 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
456 return NULL;
457 MAGIC_CHECK_END();
458 if (!func) return NULL;
459 if (!obj->interceptors) return NULL;
460 obj->interceptors->stack_above.func = NULL;
461 data = obj->interceptors->stack_above.data;
462 obj->interceptors->stack_above.data = NULL;
463 evas_object_intercept_deinit(obj);
464 return data;
465}
466
467EAPI void
468evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data)
469{
470 /* MEM OK */
471 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
472 return;
473 MAGIC_CHECK_END();
474 if (!func) return;
475 evas_object_intercept_init(obj);
476 if (!obj->interceptors) return;
477 obj->interceptors->stack_below.func = func;
478 obj->interceptors->stack_below.data = (void *)data;
479}
480
481EAPI void *
482evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func)
483{
484 /* MEM OK */
485 void *data;
486
487 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
488 return NULL;
489 MAGIC_CHECK_END();
490 if (!func) return NULL;
491 if (!obj->interceptors) return NULL;
492 obj->interceptors->stack_below.func = NULL;
493 data = obj->interceptors->stack_below.data;
494 obj->interceptors->stack_below.data = NULL;
495 evas_object_intercept_deinit(obj);
496 return data;
497}
498
499EAPI void
500evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data)
501{
502 /* MEM OK */
503 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
504 return;
505 MAGIC_CHECK_END();
506 if (!func) return;
507 evas_object_intercept_init(obj);
508 if (!obj->interceptors) return;
509 obj->interceptors->layer_set.func = func;
510 obj->interceptors->layer_set.data = (void *)data;
511}
512
513EAPI void *
514evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func)
515{
516 /* MEM OK */
517 void *data;
518
519 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
520 return NULL;
521 MAGIC_CHECK_END();
522 if (!func) return NULL;
523 if (!obj->interceptors) return NULL;
524 obj->interceptors->layer_set.func = NULL;
525 data = obj->interceptors->layer_set.data;
526 obj->interceptors->layer_set.data = NULL;
527 evas_object_intercept_deinit(obj);
528 return data;
529}
530
531EAPI void
532evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data)
533{
534 /* MEM OK */
535 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
536 return;
537 MAGIC_CHECK_END();
538 if (!func) return;
539 evas_object_intercept_init(obj);
540 if (!obj->interceptors) return;
541 obj->interceptors->color_set.func = func;
542 obj->interceptors->color_set.data = (void *)data;
543}
544
545EAPI void *
546evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func)
547{
548 /* MEM OK */
549 void *data;
550
551 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
552 return NULL;
553 MAGIC_CHECK_END();
554 if (!func) return NULL;
555 if (!obj->interceptors) return NULL;
556 obj->interceptors->color_set.func = NULL;
557 data = obj->interceptors->color_set.data;
558 obj->interceptors->color_set.data = NULL;
559 evas_object_intercept_deinit(obj);
560 return data;
561}
562
563EAPI void
564evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data)
565{
566 /* MEM OK */
567 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
568 return;
569 MAGIC_CHECK_END();
570 if (!func) return;
571 evas_object_intercept_init(obj);
572 if (!obj->interceptors) return;
573 obj->interceptors->clip_set.func = func;
574 obj->interceptors->clip_set.data = (void *)data;
575}
576
577EAPI void *
578evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func)
579{
580 /* MEM OK */
581 void *data;
582
583 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
584 return NULL;
585 MAGIC_CHECK_END();
586 if (!func) return NULL;
587 if (!obj->interceptors) return NULL;
588 obj->interceptors->clip_set.func = NULL;
589 data = obj->interceptors->clip_set.data;
590 obj->interceptors->clip_set.data = NULL;
591 evas_object_intercept_deinit(obj);
592 return data;
593}
594
595EAPI void
596evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data)
597{
598 /* MEM OK */
599 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
600 return;
601 MAGIC_CHECK_END();
602 if (!func) return;
603 evas_object_intercept_init(obj);
604 if (!obj->interceptors) return;
605 obj->interceptors->clip_unset.func = func;
606 obj->interceptors->clip_unset.data = (void *)data;
607}
608
609EAPI void *
610evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func)
611{
612 /* MEM OK */
613 void *data;
614
615 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
616 return NULL;
617 MAGIC_CHECK_END();
618 if (!func) return NULL;
619 if (!obj->interceptors) return NULL;
620 obj->interceptors->clip_unset.func = NULL;
621 data = obj->interceptors->clip_unset.data;
622 obj->interceptors->clip_unset.data = NULL;
623 evas_object_intercept_deinit(obj);
624 return data;
625}