nikawhite pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=3b4a6767a58163b934fab19f0578795d861b7793
commit 3b4a6767a58163b934fab19f0578795d861b7793 Author: Mykyta Biliavskyi <m.biliavs...@samsung.com> Date: Wed Dec 16 17:29:55 2015 +0900 Dummy: Support dummy spacer like dummy swallow. Create dummy object for all spacer in the group. This feature Enable/Disable by the button on tools panel "Dummy Swallow" or by hotkey Ctrl+W. --- data/themes/default/content.edc | 18 +++++++ data/themes/default/images/spacer_new.png | Bin 0 -> 3380 bytes src/lib/dummy_obj.c | 85 ++++++++++++++++++++++++++++-- 3 files changed, 99 insertions(+), 4 deletions(-) diff --git a/data/themes/default/content.edc b/data/themes/default/content.edc index e55b0d5..6436737 100644 --- a/data/themes/default/content.edc +++ b/data/themes/default/content.edc @@ -1,6 +1,7 @@ images { image: "part_highlight.png" COMP; image: "swallow.png" COMP; + image: "spacer_new.png" COMP; } group { name: "swallow"; @@ -73,6 +74,23 @@ group { name: "swallow"; } } +group { name: "spacer"; + inherit: "swallow"; + parts { + part { name: "img"; + type: IMAGE; + repeat_events: 1; + description { state: "default" 0.0; + image.normal: "spacer_new.png"; + align: 0.5 0.5; + aspect: 1 1; + aspect_preference: BOTH; + } + } + } +} + + group { name: "part_highlight"; parts { part { name: "base"; diff --git a/data/themes/default/images/spacer_new.png b/data/themes/default/images/spacer_new.png new file mode 100644 index 0000000..48d5041 Binary files /dev/null and b/data/themes/default/images/spacer_new.png differ diff --git a/src/lib/dummy_obj.c b/src/lib/dummy_obj.c index 9666a11..1fcd8b0 100644 --- a/src/lib/dummy_obj.c +++ b/src/lib/dummy_obj.c @@ -18,6 +18,7 @@ typedef struct dummy_obj_s { Evas_Object *layout; Eina_List *swallows; + Eina_List *spacers; Ecore_Animator *animator; } dummy_obj; @@ -33,7 +34,7 @@ dummy_objs_update(dummy_obj *dummy) Eina_List *parts = edje_edit_parts_list_get(dummy->layout); Eina_List *l, *l_next, *l2; char *part_name; - Edje_Part_Type type; + Edje_Part_Type type = EDJE_PART_TYPE_NONE; part_obj *po; Evas *evas = evas_object_evas_get(dummy->layout); Eina_Bool removed; @@ -49,8 +50,9 @@ dummy_objs_update(dummy_obj *dummy) if (strlen(po->name) != strlen(part_name)) continue; if (!strcmp(po->name, part_name)) { - if (edje_edit_part_type_get(dummy->layout, part_name) == - EDJE_PART_TYPE_SWALLOW) + type = edje_edit_part_type_get(dummy->layout, part_name); + if ((type == EDJE_PART_TYPE_SWALLOW) || + (type == EDJE_PART_TYPE_SPACER)) removed = EINA_FALSE; break; } @@ -59,7 +61,10 @@ dummy_objs_update(dummy_obj *dummy) { evas_object_del(po->obj); eina_stringshare_del(po->name); - dummy->swallows = eina_list_remove_list(dummy->swallows, l); + if (type == EDJE_PART_TYPE_SWALLOW) + dummy->swallows = eina_list_remove_list(dummy->swallows, l); + else if (type == EDJE_PART_TYPE_SPACER) + dummy->spacers = eina_list_remove_list(dummy->spacers, l); free(po); } } @@ -91,11 +96,67 @@ dummy_objs_update(dummy_obj *dummy) po->name = eina_stringshare_add(part_name); dummy->swallows = eina_list_append(dummy->swallows, po); } + else if (type == EDJE_PART_TYPE_SPACER) + { + Eina_List *spacer_l; + Evas_Object *obj = NULL; + int x = 0, y = 0, w = 0, h = 0, lx = 0, ly = 0; + + EINA_LIST_FOREACH(dummy->spacers, spacer_l, po) + if (po->name == part_name) + { + obj = po->obj; + break; + } + if (!obj) + { + Evas_Object *scroller = view_obj_get(VIEW_DATA); + Evas_Object *scroller_edje = elm_layout_edje_get(scroller); + Evas_Object *clipper = + (Evas_Object *)edje_object_part_object_get(scroller_edje, + "clipper"); + obj = elm_layout_add(scroller); + elm_layout_file_set(obj, EDJE_PATH, "spacer"); + evas_object_smart_member_add(obj, scroller); + + + po = malloc(sizeof(part_obj)); + po->obj = obj; + po->name = eina_stringshare_add(part_name); + dummy->spacers = eina_list_append(dummy->spacers, po); + evas_object_show(obj); + evas_object_clip_set(obj, clipper); + } + evas_object_geometry_get(dummy->layout, &lx, &ly, NULL, NULL); + edje_object_part_geometry_get(dummy->layout, part_name, &x, &y, &w, &h); + evas_object_resize(obj, w, h); + evas_object_move(obj, lx + x, ly + y); + } } edje_edit_string_list_free(parts); } +static void +layout_geom_changed_cb(void *data, Evas *evas EINA_UNUSED, + Evas_Object *obj, void *ei EINA_UNUSED) +{ + dummy_obj *dummy = (dummy_obj *)data; + + Eina_List *spacer_l; + part_obj *po; + int x = 0, y = 0, w = 0, h = 0, lx = 0, ly = 0; + + evas_object_geometry_get(obj, &lx, &ly, NULL, NULL); + + EINA_LIST_FOREACH(dummy->spacers, spacer_l, po) + if (edje_object_part_exists(obj, po->name)) + { + edje_object_part_geometry_get(obj, po->name, &x, &y, &w, &h); + evas_object_resize(po->obj, w, h); + evas_object_move(po->obj, lx + x, ly + y); + } +} static Eina_Bool animator_cb(void *data) { @@ -143,6 +204,10 @@ dummy_obj_new(Evas_Object *layout) evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, layout_del_cb, dummy); + evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, + layout_geom_changed_cb, dummy); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOVE, + layout_geom_changed_cb, dummy); dummy->layout = layout; dummy->animator = animator; } @@ -153,6 +218,11 @@ dummy_obj_del(Evas_Object *layout) dummy_obj *dummy = evas_object_data_get(layout, DUMMYOBJ); if (!dummy) return; + evas_object_event_callback_del_full(layout, EVAS_CALLBACK_RESIZE, + layout_geom_changed_cb, dummy); + evas_object_event_callback_del_full(layout, EVAS_CALLBACK_MOVE, + layout_geom_changed_cb, dummy); + part_obj *po; EINA_LIST_FREE(dummy->swallows, po) { @@ -161,6 +231,13 @@ dummy_obj_del(Evas_Object *layout) free(po); } + EINA_LIST_FREE(dummy->spacers, po) + { + evas_object_del(po->obj); + eina_stringshare_del(po->name); + free(po); + } + ecore_animator_del(dummy->animator); free(dummy); --