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);
 

-- 


Reply via email to