forked from enlightenment/efl
efl: merge list->iterator creation function into evas_main.c and reuse
this deduplicates a large amount of code
This commit is contained in:
parent
0a9bb2543f
commit
3789e3e1dc
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -1387,6 +1387,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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue