From e8bf203968149601aaeec6192aef5d7e7fa51844 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 14 Feb 2018 21:14:52 -0500 Subject: [PATCH] efl: merge list->iterator creation function into evas_main.c and reuse this deduplicates a large amount of code --- src/lib/edje/edje_part_box.c | 51 +------------------------- src/lib/edje/edje_part_table.c | 50 +------------------------ src/lib/elementary/efl_ui_layout_pack.c | 65 ++------------------------------- src/lib/evas/Evas_Internal.h | 2 + src/lib/evas/canvas/evas_main.c | 58 +++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 161 deletions(-) diff --git a/src/lib/edje/edje_part_box.c b/src/lib/edje/edje_part_box.c index e01cfe1..88c622b 100644 --- a/src/lib/edje/edje_part_box.c +++ b/src/lib/edje/edje_part_box.c @@ -8,8 +8,6 @@ PROXY_IMPLEMENTATION(box, MY_CLASS, EINA_FALSE) #undef PROXY_IMPLEMENTATION -typedef struct _Part_Item_Iterator Part_Item_Iterator; - /* Legacy features */ EOLIAN static Eina_Bool @@ -127,53 +125,6 @@ _efl_canvas_layout_part_box_efl_pack_linear_pack_index_get(Eo *obj, void *_pd EI return -1; } -/* this iterator is the same as efl_ui_box */ -static Eina_Bool -_part_item_iterator_next(Part_Item_Iterator *it, void **data) -{ - Efl_Gfx *sub; - - if (!it->object) return EINA_FALSE; - if (!eina_iterator_next(it->real_iterator, (void **) &sub)) - return EINA_FALSE; - - if (data) *data = sub; - return EINA_TRUE; -} - -static Eo * -_part_item_iterator_get_container(Part_Item_Iterator *it) -{ - return it->object; -} - -static void -_part_item_iterator_free(Part_Item_Iterator *it) -{ - eina_iterator_free(it->real_iterator); - efl_wref_del(it->object, &it->object); - free(it); -} - -static Eina_Iterator * -_part_item_iterator_create(Eo *obj, Eina_Iterator *real_iterator) -{ - Part_Item_Iterator *it; - - it = calloc(1, sizeof(*it)); - if (!it) return NULL; - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->real_iterator = real_iterator; - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_part_item_iterator_next); - it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_part_item_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_part_item_iterator_free); - efl_wref_add(obj, &it->object); - - return &it->iterator; -} EOLIAN static Eina_Iterator * _efl_canvas_layout_part_box_efl_container_content_iterate(Eo *obj, void *_pd EINA_UNUSED) @@ -184,7 +135,7 @@ _efl_canvas_layout_part_box_efl_container_content_iterate(Eo *obj, void *_pd EIN if (!pd->rp->typedata.container) return NULL; it = evas_object_box_iterator_new(pd->rp->object); - return _part_item_iterator_create(pd->rp->object, it); + return efl_canvas_iterator_create(pd->rp->object, it, NULL); } EOLIAN static int diff --git a/src/lib/edje/edje_part_table.c b/src/lib/edje/edje_part_table.c index 87c694f..79141cc 100644 --- a/src/lib/edje/edje_part_table.c +++ b/src/lib/edje/edje_part_table.c @@ -10,54 +10,6 @@ PROXY_IMPLEMENTATION(table, MY_CLASS, EINA_FALSE) typedef struct _Part_Item_Iterator Part_Item_Iterator; -/* this iterator is the same as efl_ui_box */ -static Eina_Bool -_part_item_iterator_next(Part_Item_Iterator *it, void **data) -{ - Efl_Gfx *sub; - - if (!it->object) return EINA_FALSE; - if (!eina_iterator_next(it->real_iterator, (void **) &sub)) - return EINA_FALSE; - - if (data) *data = sub; - return EINA_TRUE; -} - -static Eo * -_part_item_iterator_get_container(Part_Item_Iterator *it) -{ - return it->object; -} - -static void -_part_item_iterator_free(Part_Item_Iterator *it) -{ - eina_iterator_free(it->real_iterator); - efl_wref_del(it->object, &it->object); - free(it); -} - -static Eina_Iterator * -_part_item_iterator_create(Eo *obj, Eina_Iterator *real_iterator) -{ - Part_Item_Iterator *it; - - it = calloc(1, sizeof(*it)); - if (!it) return NULL; - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->real_iterator = real_iterator; - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_part_item_iterator_next); - it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_part_item_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_part_item_iterator_free); - efl_wref_add(obj, &it->object); - - return &it->iterator; -} - EOLIAN static Eina_Iterator * _efl_canvas_layout_part_table_efl_container_content_iterate(Eo *obj, void *_pd EINA_UNUSED) { @@ -67,7 +19,7 @@ _efl_canvas_layout_part_table_efl_container_content_iterate(Eo *obj, void *_pd E if (!pd->rp->typedata.container) return NULL; it = evas_object_table_iterator_new(pd->rp->object); - return _part_item_iterator_create(pd->rp->object, it); + return efl_canvas_iterator_create(pd->rp->object, it, NULL); } EOLIAN static int diff --git a/src/lib/elementary/efl_ui_layout_pack.c b/src/lib/elementary/efl_ui_layout_pack.c index c45a13e..d4cacc1 100644 --- a/src/lib/elementary/efl_ui_layout_pack.c +++ b/src/lib/elementary/efl_ui_layout_pack.c @@ -31,7 +31,6 @@ Eina_Bool _efl_ui_layout_table_clear(Eo *obj, Efl_Ui_Layout_Data *sd, const c typedef struct _Layout_Part_Data Efl_Ui_Layout_Box_Data; typedef struct _Layout_Part_Data Efl_Ui_Layout_Table_Data; -typedef struct _Part_Item_Iterator Part_Item_Iterator; struct _Layout_Part_Data { @@ -41,14 +40,6 @@ struct _Layout_Part_Data unsigned char temp; }; -struct _Part_Item_Iterator -{ - Eina_Iterator iterator; - Eina_List *list; - Eina_Iterator *real_iterator; - Eo *object; -}; - Eo * _efl_ui_layout_pack_proxy_get(Efl_Ui_Layout *obj, Edje_Part_Type type, const char *part) { @@ -80,63 +71,13 @@ _efl_ui_layout_part_box_real_part_set(Eo *obj, Efl_Ui_Layout_Box_Data *pd, Eo *l pd->temp = 1; } -/* this iterator is the same as efl_ui_box */ -static Eina_Bool -_part_item_iterator_next(Part_Item_Iterator *it, void **data) -{ - Efl_Gfx *sub; - - if (!it->object) return EINA_FALSE; - if (!eina_iterator_next(it->real_iterator, (void **) &sub)) - return EINA_FALSE; - - if (data) *data = sub; - return EINA_TRUE; -} - -static Eo * -_part_item_iterator_get_container(Part_Item_Iterator *it) -{ - return it->object; -} - -static void -_part_item_iterator_free(Part_Item_Iterator *it) -{ - eina_iterator_free(it->real_iterator); - efl_wref_del(it->object, &it->object); - eina_list_free(it->list); - free(it); -} - -static Eina_Iterator * -_part_item_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List *list) -{ - Part_Item_Iterator *it; - - it = calloc(1, sizeof(*it)); - if (!it) return NULL; - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->list = list; - it->real_iterator = real_iterator; - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_part_item_iterator_next); - it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_part_item_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_part_item_iterator_free); - efl_wref_add(obj, &it->object); - - return &it->iterator; -} - EOLIAN static Eina_Iterator * _efl_ui_layout_part_box_efl_container_content_iterate(Eo *obj, Efl_Ui_Layout_Box_Data *pd) { Eina_Iterator *it; Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part); it = evas_object_box_iterator_new(pack); - return _part_item_iterator_create(obj, it, NULL); + return efl_canvas_iterator_create(obj, it, NULL); } EOLIAN static int @@ -289,7 +230,7 @@ _efl_ui_layout_part_table_efl_container_content_iterate(Eo *obj, Efl_Ui_Layout_T it = evas_object_table_iterator_new(pack); - return _part_item_iterator_create(obj, it, NULL); + return efl_canvas_iterator_create(obj, it, NULL); } EOLIAN static int @@ -364,7 +305,7 @@ _efl_ui_layout_part_table_efl_pack_table_table_contents_get(Eo *obj EINA_UNUSED, } } - return _part_item_iterator_create(pd->obj, eina_list_iterator_new(l), l); + return efl_canvas_iterator_create(pd->obj, eina_list_iterator_new(l), l); } EOLIAN static Eina_Bool diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h index 4e5655b..fc413cf 100644 --- a/src/lib/evas/Evas_Internal.h +++ b/src/lib/evas/Evas_Internal.h @@ -50,6 +50,8 @@ EAPI void evas_render_pending_objects_flush(Evas *eo_evas); EAPI void efl_input_pointer_finalize(Efl_Input_Pointer *obj); +EAPI Eina_Iterator *efl_canvas_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List *list); + static inline void evas_object_size_hint_combined_min_get(const Eo *obj, int *w, int *h) { diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index d80fc64..a6da371 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -1382,6 +1382,64 @@ get_layer_objects(Evas_Layer *l) return (EINA_INLIST_GET(l->objects)); } +typedef struct _Efl_Canvas_Iterator +{ + Eina_Iterator iterator; + Eina_List *list; + Eina_Iterator *real_iterator; + Eo *object; +} Efl_Canvas_Iterator; + +/* this iterator is the same as efl_ui_box */ +static Eina_Bool +_efl_canvas_iterator_next(Efl_Canvas_Iterator *it, void **data) +{ + Efl_Gfx *sub; + + if (!it->object) return EINA_FALSE; + if (!eina_iterator_next(it->real_iterator, (void **) &sub)) + return EINA_FALSE; + + if (data) *data = sub; + return EINA_TRUE; +} + +static Eo * +_efl_canvas_iterator_get_container(Efl_Canvas_Iterator *it) +{ + return it->object; +} + +static void +_efl_canvas_iterator_free(Efl_Canvas_Iterator *it) +{ + eina_iterator_free(it->real_iterator); + efl_wref_del(it->object, &it->object); + eina_list_free(it->list); + free(it); +} + +EAPI Eina_Iterator * +efl_canvas_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List *list) +{ + Efl_Canvas_Iterator *it; + + it = calloc(1, sizeof(*it)); + if (!it) return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->list = list; + it->real_iterator = real_iterator; + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_efl_canvas_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_efl_canvas_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_efl_canvas_iterator_free); + efl_wref_add(obj, &it->object); + + return &it->iterator; +} + EOLIAN Evas_Object* _evas_canvas_object_top_at_xy_get(const Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) { -- 2.7.4