diff options
Diffstat (limited to 'src/lib/edje/edje_smart.c')
-rw-r--r-- | src/lib/edje/edje_smart.c | 69 |
1 files changed, 53 insertions, 16 deletions
diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c index ae038fb10e..29d042c40d 100644 --- a/src/lib/edje/edje_smart.c +++ b/src/lib/edje/edje_smart.c @@ -1,5 +1,6 @@ #define EFL_CANVAS_GROUP_PROTECTED #define EFL_CANVAS_GROUP_BETA +#define EFL_PART_PROTECTED #include "edje_private.h" @@ -20,7 +21,7 @@ EAPI Evas_Object * edje_object_add(Evas *evas) { EINA_SAFETY_ON_NULL_RETURN_VAL(evas, NULL); - return efl_add(MY_CLASS, evas, efl_canvas_object_legacy_ctor(efl_added)); + return efl_add(MY_CLASS, evas_find(evas), efl_canvas_object_legacy_ctor(efl_added)); } EOLIAN static Eo * @@ -47,6 +48,34 @@ _efl_canvas_layout_efl_object_constructor(Eo *obj, Edje *ed) return obj; } + +EOLIAN static void +_efl_canvas_layout_efl_object_invalidate(Eo *obj, Edje *ed) +{ + _edje_file_callbacks_del(ed, NULL); + + efl_invalidate(efl_super(obj, MY_CLASS)); + + //invalidate is done, this means the legacy evas deletion event is called. + for (int i = 0; i < ed->table_parts_size; ++i) + { + Edje_Real_Part *rp = ed->table_parts[i]; + switch(rp->type) + { + case EDJE_RP_TYPE_SWALLOW: + _edje_real_part_swallow_clear(ed, rp); + break; + + case EDJE_RP_TYPE_CONTAINER: + if (rp->part->type == EDJE_PART_TYPE_BOX) + _edje_real_part_box_remove_all(ed, rp, 0); + else if (rp->part->type == EDJE_PART_TYPE_TABLE) + _edje_real_part_table_clear(ed, rp, 0); + break; + } + } +} + EOLIAN static void _efl_canvas_layout_efl_object_debug_name_override(Eo *obj, Edje *ed, Eina_Strbuf *sb) { @@ -155,14 +184,14 @@ _efl_canvas_layout_efl_canvas_group_group_del(Eo *obj, Edje *ed) } EOLIAN static void -_efl_canvas_layout_efl_gfx_position_set(Eo *obj, Edje *ed, Eina_Position2D pos) +_efl_canvas_layout_efl_gfx_entity_position_set(Eo *obj, Edje *ed, Eina_Position2D pos) { unsigned short i; if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) return; - efl_gfx_position_set(efl_super(obj, MY_CLASS), pos); + efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos); if ((ed->x == pos.x) && (ed->y == pos.y)) return; ed->x = pos.x; @@ -182,13 +211,21 @@ _efl_canvas_layout_efl_gfx_position_set(Eo *obj, Edje *ed, Eina_Position2D pos) ep = ed->table_parts[i]; if ((ep->type == EDJE_RP_TYPE_TEXT) && (ep->typedata.text)) { - evas_object_move(ep->object, - ed->x + ep->x + ep->typedata.text->offset.x, - ed->y + ep->y + ep->typedata.text->offset.y); + if (ep->object) + evas_object_move(ep->object, + ed->x + ep->x + ep->typedata.text->offset.x, + ed->y + ep->y + ep->typedata.text->offset.y); + else if (ep->type != EFL_CANVAS_LAYOUT_PART_TYPE_NONE) + WRN("No object for part '%s' in group '%s'", + ep->part ? ep->part->name : "<invalid>", ed->group); } else { - evas_object_move(ep->object, ed->x + ep->x, ed->y + ep->y); + if (ep->object) + evas_object_move(ep->object, ed->x + ep->x, ed->y + ep->y); + else if (ep->type != EFL_CANVAS_LAYOUT_PART_TYPE_NONE) + WRN("No object for part '%s' in group '%s'", + ep->part ? ep->part->name : "<invalid>", ed->group); if ((ep->type == EDJE_RP_TYPE_SWALLOW) && (ep->typedata.swallow)) { @@ -250,7 +287,7 @@ _edje_limit_get(Edje *ed, Edje_Limit **limits, unsigned int length, Evas_Coord s } EOLIAN static void -_efl_canvas_layout_efl_gfx_size_set(Eo *obj, Edje *ed, Eina_Size2D sz) +_efl_canvas_layout_efl_gfx_entity_size_set(Eo *obj, Edje *ed, Eina_Size2D sz) { if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) return; @@ -286,7 +323,7 @@ _efl_canvas_layout_efl_gfx_size_set(Eo *obj, Edje *ed, Eina_Size2D sz) _edje_emit(ed, "resize", NULL); super: - efl_gfx_size_set(efl_super(obj, MY_CLASS), sz); + efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz); } static void @@ -295,7 +332,7 @@ _edje_object_show(Eo *obj, Edje *ed) Eina_List *l; Edje *edg; - efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE); + efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE); if (_edje_lua_script_only(ed)) { _edje_lua_script_only_show(ed); @@ -322,7 +359,7 @@ _edje_object_hide(Eo *obj, Edje *ed) Eina_List *l; Edje *edg; - efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); + efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); if (_edje_lua_script_only(ed)) { _edje_lua_script_only_hide(ed); @@ -334,7 +371,7 @@ _edje_object_hide(Eo *obj, Edje *ed) } EOLIAN static void -_efl_canvas_layout_efl_gfx_visible_set(Eo *obj, Edje *ed, Eina_Bool vis) +_efl_canvas_layout_efl_gfx_entity_visible_set(Eo *obj, Edje *ed, Eina_Bool vis) { if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) return; @@ -384,7 +421,7 @@ _efl_canvas_layout_efl_file_mmap_set(Eo *obj, Edje *pd EINA_UNUSED, } EOLIAN static void -_efl_canvas_layout_efl_file_mmap_get(Eo *obj EINA_UNUSED, Edje *pd, +_efl_canvas_layout_efl_file_mmap_get(const Eo *obj EINA_UNUSED, Edje *pd, const Eina_File **f, const char **key) { if (f) *f = pd->file ? pd->file->f : NULL; @@ -471,7 +508,7 @@ _efl_canvas_layout_efl_observer_update(Eo *obj EINA_UNUSED, Edje *ed, Efl_Object } EOLIAN Eina_Bool -_efl_canvas_layout_efl_player_playable_get(Eo *obj EINA_UNUSED, Edje *pd EINA_UNUSED) +_efl_canvas_layout_efl_player_playable_get(const Eo *obj EINA_UNUSED, Edje *pd EINA_UNUSED) { return EINA_TRUE; } @@ -514,7 +551,7 @@ _efl_canvas_layout_efl_player_play_set(Eo *obj EINA_UNUSED, Edje *ed, Eina_Bool } EOLIAN Eina_Bool -_efl_canvas_layout_efl_player_play_get(Eo *obj EINA_UNUSED, Edje *ed) +_efl_canvas_layout_efl_player_play_get(const Eo *obj EINA_UNUSED, Edje *ed) { if (!ed) return EINA_FALSE; if (ed->delete_me) return EINA_FALSE; @@ -531,7 +568,7 @@ _efl_canvas_layout_efl_player_play_speed_set(Eo *obj EINA_UNUSED, Edje *pd , dou } EOLIAN double -_efl_canvas_layout_efl_player_play_speed_get(Eo *obj EINA_UNUSED, Edje *pd) +_efl_canvas_layout_efl_player_play_speed_get(const Eo *obj EINA_UNUSED, Edje *pd) { return 1.0/pd->duration_scale; } |