wearable : add item classes for wearable support 53/218153/3
authorSangHyeon Jade Lee <sh10233.lee@samsung.com>
Wed, 20 Nov 2019 04:41:57 +0000 (13:41 +0900)
committerSangHyeon Lee <sh10233.lee@samsung.com>
Thu, 21 Nov 2019 08:05:21 +0000 (08:05 +0000)
Change-Id: I60a9ba8b5bcea2545ad82f87f595eaa441eeb597

16 files changed:
src/lib/elementary/Efl_Wearable.h
src/lib/elementary/efl_ui_item.c
src/lib/elementary/efl_wearable_default_item.c [new file with mode: 0644]
src/lib/elementary/efl_wearable_default_item.eo [new file with mode: 0644]
src/lib/elementary/efl_wearable_double_text_item.c [new file with mode: 0644]
src/lib/elementary/efl_wearable_double_text_item.eo [new file with mode: 0644]
src/lib/elementary/efl_wearable_item.c [new file with mode: 0644]
src/lib/elementary/efl_wearable_item.eo [new file with mode: 0644]
src/lib/elementary/efl_wearable_list_default_item.c [new file with mode: 0644]
src/lib/elementary/efl_wearable_list_default_item.eo [new file with mode: 0644]
src/lib/elementary/efl_wearable_placeholder_item.c [new file with mode: 0644]
src/lib/elementary/efl_wearable_placeholder_item.eo [new file with mode: 0644]
src/lib/elementary/efl_wearable_position_manager_circle_list.c
src/lib/elementary/efl_wearable_title_item.c [new file with mode: 0644]
src/lib/elementary/efl_wearable_title_item.eo [new file with mode: 0644]
src/lib/elementary/meson.build

index 29fa6a0..1e5adad 100644 (file)
@@ -1 +1,7 @@
 #include "efl_wearable_position_manager_circle_list.eo.h"
+#include "efl_wearable_item.eo.h"
+#include "efl_wearable_default_item.eo.h"
+#include "efl_wearable_list_default_item.eo.h"
+#include "efl_wearable_placeholder_item.eo.h"
+#include "efl_wearable_title_item.eo.h"
+#include "efl_wearable_double_text_item.eo.h"
index 42ce673..28812db 100644 (file)
@@ -26,6 +26,7 @@ static const Elm_Action key_actions[] = {
 Efl_Object *
 _efl_ui_item_proxy_get(Efl_Object *item)
 {
+   if (!item) return;
    EFL_UI_ITEM_DATA_GET_OR_RETURN(item, pd, NULL);
    return pd->proxy;
 }
@@ -165,7 +166,7 @@ _efl_ui_item_efl_object_constructor(Eo *obj, Efl_Ui_Item_Data *pd EINA_UNUSED)
 }
 
 EOLIAN static Efl_Object *
-_efl_ui_item_efl_object_finalize(Eo *obj, Efl_Ui_Item_Data *pd EINA_UNUSED)
+_efl_ui_item_efl_object_finalize(Eo *obj, Efl_Ui_Item_Data *pd)
 {
    Eo *eo;
    eo = efl_finalize(efl_super(obj, MY_CLASS));
@@ -175,6 +176,15 @@ _efl_ui_item_efl_object_finalize(Eo *obj, Efl_Ui_Item_Data *pd EINA_UNUSED)
    elm_widget_can_focus_set(obj, EINA_TRUE);
 
    efl_ui_action_connector_bind_clickable_to_object(wd->resize_obj, obj);
+
+   //TIZEN_ONLY(20191121): Apply wearable only items
+   if (pd->proxy)
+     {
+        efl_del(pd->proxy);
+        pd->proxy = NULL;
+     }
+   //
+
    return eo;
 }
 
diff --git a/src/lib/elementary/efl_wearable_default_item.c b/src/lib/elementary/efl_wearable_default_item.c
new file mode 100644 (file)
index 0000000..baf6c15
--- /dev/null
@@ -0,0 +1,44 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_WEARABLE_LIST_DEFAULT_ITEM_PROTECTED
+#define EFL_PART_PROTECTED
+
+#include <Elementary.h>
+
+#include "elm_priv.h"
+#include "elm_part_helper.h"
+#include "Efl_Wearable.h"
+
+#define MY_CLASS EFL_WEARABLE_DEFAULT_ITEM_CLASS
+#define MY_CLASS_PFX  efl_wearable_default_item
+
+#define MY_CLASS_NAME "Efl.Wearable.Default_Item"
+
+ELM_PART_TEXT_DEFAULT_GET(efl_wearable_default_item, "efl.text")
+ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_wearable_default_item, void)
+ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_wearable_default_item, void)
+ELM_PART_CONTENT_DEFAULT_GET(efl_wearable_default_item, "efl.icon")
+ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_wearable_default_item, void)
+
+EOLIAN static Efl_Object *
+_efl_wearable_default_item_efl_part_part_get(const Eo *obj, void *pd EINA_UNUSED, const char *part)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
+   if (eina_streq(part, "text"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS, obj, "efl.text");
+   else if (eina_streq(part, "icon"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, "efl.icon");
+   else if (eina_streq(part, "extra"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, "efl.extra");
+
+   return efl_part_get(efl_super(obj, MY_CLASS), part);
+}
+
+
+#define EFL_WEARABLE_DEFAULT_ITEM_EXTRA_OPS             \
+  ELM_PART_TEXT_DEFAULT_OPS(efl_wearable_default_item), \
+  ELM_PART_CONTENT_DEFAULT_OPS(efl_wearable_default_item)
+
+#include "efl_wearable_default_item.eo.c"
diff --git a/src/lib/elementary/efl_wearable_default_item.eo b/src/lib/elementary/efl_wearable_default_item.eo
new file mode 100644 (file)
index 0000000..46c3554
--- /dev/null
@@ -0,0 +1,34 @@
+abstract Efl.Wearable.Default_Item extends Efl.Wearable.Item implements
+                                           Efl.Text,
+                                           Efl.Text_Markup,
+                                           Efl.Ui.L10n,
+                                           Efl.Content
+{
+   [[Wearable Default Item Class.
+
+     This class defines the standard parts for most @Efl.Ui.Item: Text, Icon and Extra.
+     Placement and layout details for these parts are left to the extending classes like
+     @Efl.Ui.List_Default_Item and @Efl.Ui.Grid_Default_Item which should normally be used.
+     Text-related changes are mirrored to the $text part for convenience.
+     Content-related changes are mirrored to the $icon part.
+
+     @since 1.23
+   ]]
+   data: null;
+   parts {
+     text: Efl.Ui.Layout_Part_Text; [[The text part for default items.
+                                      This is the caption of the items.]]
+     icon: Efl.Ui.Layout_Part_Content; [[The icon part for default items.
+                                         This is the main content of the items.]]
+     extra : Efl.Ui.Layout_Part_Content; [[The extra part for default items.
+                                           This is used for additional details or badges.]]
+   }
+   implements {
+      Efl.Text.text { get; set; }
+      Efl.Text_Markup.markup { get; set; }
+      Efl.Ui.L10n.l10n_text { get; set; }
+      Efl.Content.content { get; set; }
+      Efl.Content.content_unset;
+      Efl.Part.part_get;
+   }
+}
diff --git a/src/lib/elementary/efl_wearable_double_text_item.c b/src/lib/elementary/efl_wearable_double_text_item.c
new file mode 100644 (file)
index 0000000..856fe73
--- /dev/null
@@ -0,0 +1,55 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_WEARABLE_DOUBLE_TEXT_ITEM_PROTECTED
+#define EFL_PART_PROTECTED
+
+#include <Elementary.h>
+
+#include "elm_priv.h"
+#include "elm_part_helper.h"
+#include "Efl_Wearable.h"
+
+#define MY_CLASS EFL_WEARABLE_DOUBLE_TEXT_ITEM_CLASS
+#define MY_CLASS_PFX  efl_wearable_double_text_item
+
+#define MY_CLASS_NAME "Efl.Wearable.Double_Text_Item"
+
+ELM_PART_TEXT_DEFAULT_GET(efl_wearable_double_text_item, "efl.text")
+ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_wearable_double_text_item, void)
+ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_wearable_double_text_item, void)
+ELM_PART_CONTENT_DEFAULT_GET(efl_wearable_double_text_item, "efl.icon")
+ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_wearable_double_text_item, void)
+
+EOLIAN static Efl_Object *
+_efl_wearable_double_text_item_efl_part_part_get(const Eo *obj, void *pd EINA_UNUSED, const char *part)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
+   if (eina_streq(part, "text"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS, obj, "efl.text");
+   if (eina_streq(part, "sub_text"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS, obj, "efl.sub_text");
+   else if (eina_streq(part, "icon"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, "efl.icon");
+   else if (eina_streq(part, "extra"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, "efl.extra");
+
+   return efl_part_get(efl_super(obj, MY_CLASS), part);
+}
+
+EOLIAN static Efl_Object *
+_efl_wearable_double_text_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+   Eo *eo;
+
+   eo = efl_constructor(efl_super(obj, MY_CLASS));
+   elm_widget_theme_element_set(obj, "double_text");
+   return eo;
+}
+
+#define EFL_WEARABLE_DOUBLE_TEXT_ITEM_EXTRA_OPS             \
+  ELM_PART_TEXT_DEFAULT_OPS(efl_wearable_double_text_item), \
+  ELM_PART_CONTENT_DEFAULT_OPS(efl_wearable_double_text_item)
+
+#include "efl_wearable_double_text_item.eo.c"
diff --git a/src/lib/elementary/efl_wearable_double_text_item.eo b/src/lib/elementary/efl_wearable_double_text_item.eo
new file mode 100644 (file)
index 0000000..5b1a26b
--- /dev/null
@@ -0,0 +1,31 @@
+class Efl.Wearable.Double_Text_Item extends Efl.Wearable.Item implements
+                                            Efl.Text,
+                                            Efl.Text_Markup,
+                                            Efl.Ui.L10n,
+                                            Efl.Content
+{
+   [[Wearable Double Text Item Class.
+
+     @since 1.23
+   ]]
+   data: null;
+   parts {
+     text: Efl.Ui.Layout_Part_Text; [[The text part for default items.
+                                      This is the caption of the items.]]
+     sub_text: Efl.Ui.Layout_Part_Text; [[The text part for default items.
+                                          This is the caption of the items.]]
+     icon: Efl.Ui.Layout_Part_Content; [[The icon part for default items.
+                                         This is the main content of the items.]]
+     extra : Efl.Ui.Layout_Part_Content; [[The extra part for default items.
+                                           This is used for additional details or badges.]]
+   }
+   implements {
+      Efl.Object.constructor;
+      Efl.Text.text { get; set; }
+      Efl.Text_Markup.markup { get; set; }
+      Efl.Ui.L10n.l10n_text { get; set; }
+      Efl.Content.content { get; set; }
+      Efl.Content.content_unset;
+      Efl.Part.part_get;
+   }
+}
diff --git a/src/lib/elementary/efl_wearable_item.c b/src/lib/elementary/efl_wearable_item.c
new file mode 100644 (file)
index 0000000..6076033
--- /dev/null
@@ -0,0 +1,54 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Elementary.h>
+#include "elm_priv.h"
+#include "Efl_Wearable.h"
+#include "efl_ui_item_internal.h"
+
+#define MY_CLASS EFL_WEARABLE_ITEM_CLASS
+#define MY_CLASS_PFX  efl_wearable_item
+
+#define MY_CLASS_NAME "Efl.Wearable.Item"
+
+static void
+_item_theme_update(Eo *obj)
+{
+   char buf[256];
+   Eo *container = efl_ui_item_container_get(obj);
+   if (container)
+     {
+        if (efl_isa(container, EFL_UI_LIST_CLASS) || efl_isa(container, EFL_UI_LIST_VIEW_CLASS))
+          snprintf(buf, sizeof(buf), "list_item");
+        else if (efl_isa(container, EFL_UI_GRID_CLASS) || efl_isa(container, EFL_UI_GRID_VIEW_CLASS))
+          snprintf(buf, sizeof(buf), "grid_item");
+        else
+          snprintf(buf, sizeof(buf), "list_item");
+     }
+   else snprintf(buf, sizeof(buf), "list_item");
+
+   elm_widget_theme_klass_set(obj, buf);
+}
+
+EOLIAN static void
+_efl_wearable_item_efl_ui_item_container_set(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Widget *container)
+{
+   Eo *prev_container = efl_ui_item_container_get(obj);
+   efl_ui_item_container_set(efl_super(obj, MY_CLASS), container);
+
+   if (prev_container != container) _item_theme_update(obj);
+}
+
+EOLIAN static Eo *
+_efl_wearable_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+   obj = efl_constructor(efl_super(obj, MY_CLASS));
+
+   _efl_ui_item_proxy_enabled_set(obj, EINA_TRUE);
+   _item_theme_update(obj);
+
+   return obj;
+}
+
+#include "efl_wearable_item.eo.c"
diff --git a/src/lib/elementary/efl_wearable_item.eo b/src/lib/elementary/efl_wearable_item.eo
new file mode 100644 (file)
index 0000000..a4b9670
--- /dev/null
@@ -0,0 +1,12 @@
+abstract Efl.Wearable.Item extends Efl.Ui.Item
+{
+   [[Wearable Item Class.
+
+     @since 1.23
+   ]]
+   data: null;
+   implements {
+      Efl.Object.constructor;
+      Efl.Ui.Item.container { set; }
+   }
+}
diff --git a/src/lib/elementary/efl_wearable_list_default_item.c b/src/lib/elementary/efl_wearable_list_default_item.c
new file mode 100644 (file)
index 0000000..bb982dd
--- /dev/null
@@ -0,0 +1,29 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_WEARABLE_LIST_DEFAULT_ITEM_PROTECTED
+#define EFL_PART_PROTECTED
+
+#include <Elementary.h>
+
+#include "elm_priv.h"
+#include "elm_part_helper.h"
+#include "Efl_Wearable.h"
+
+#define MY_CLASS      EFL_WEARABLE_LIST_DEFAULT_ITEM_CLASS
+#define MY_CLASS_PFX  efl_wearable_list_default_item
+
+#define MY_CLASS_NAME "Efl.Wearable.List_Default_Item"
+
+EOLIAN static Efl_Object *
+_efl_wearable_list_default_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+   Eo *eo;
+
+   eo = efl_constructor(efl_super(obj, MY_CLASS));
+   elm_widget_theme_klass_set(obj, "list_item");
+
+   return eo;
+}
+#include "efl_wearable_list_default_item.eo.c"
diff --git a/src/lib/elementary/efl_wearable_list_default_item.eo b/src/lib/elementary/efl_wearable_list_default_item.eo
new file mode 100644 (file)
index 0000000..662f050
--- /dev/null
@@ -0,0 +1,14 @@
+
+class Efl.Wearable.List_Default_Item extends Efl.Wearable.Default_Item
+{
+   [[Wearable Default Item class to be used inside @Efl.Ui.List containers.
+     It displays the three parts in horizontal order: $icon, $text and $extra.
+     Theming can change this arrangement.
+
+     @since 1.23
+   ]]
+   data: null;
+   implements {
+      Efl.Object.constructor;
+   }
+}
diff --git a/src/lib/elementary/efl_wearable_placeholder_item.c b/src/lib/elementary/efl_wearable_placeholder_item.c
new file mode 100644 (file)
index 0000000..c371a0b
--- /dev/null
@@ -0,0 +1,50 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_WEARABLE_PLACEHOLDER_ITEM_PROTECTED
+#define EFL_PART_PROTECTED
+
+#include <Elementary.h>
+#include "Efl_Wearable.h"
+
+#include "elm_priv.h"
+#include "elm_part_helper.h"
+
+#define MY_CLASS      EFL_WEARABLE_PLACEHOLDER_ITEM_CLASS
+#define MY_CLASS_PFX  efl_wearable_placeholder_item
+
+#define MY_CLASS_NAME "Efl.Wearable.Placeholder_Item"
+
+EOLIAN static Efl_Object *
+_efl_wearable_placeholder_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+   Eo *eo;
+
+   eo = efl_constructor(efl_super(obj, MY_CLASS));
+   elm_widget_theme_element_set(obj, "placeholder");
+
+   return eo;
+}
+
+/* Efl.Part */
+ELM_PART_CONTENT_DEFAULT_GET(efl_wearable_placeholder_item, "efl.content")
+ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_wearable_placeholder_item, void)
+/* Efl.Part end */
+
+EOLIAN static Efl_Object *
+_efl_wearable_placeholder_item_efl_part_part_get(const Eo *obj, void *wd EINA_UNUSED, const char *part)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
+   if (eina_streq(part, "content"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, "efl.content");
+
+   return efl_part_get(efl_super(obj, MY_CLASS), part);
+}
+
+/* Internal EO APIs and hidden overrides */
+
+#define EFL_WEARABLE_PLACEHOLDER_ITEM_EXTRA_OPS \
+  ELM_PART_CONTENT_DEFAULT_OPS(efl_wearable_placeholder_item)
+
+#include "efl_wearable_placeholder_item.eo.c"
diff --git a/src/lib/elementary/efl_wearable_placeholder_item.eo b/src/lib/elementary/efl_wearable_placeholder_item.eo
new file mode 100644 (file)
index 0000000..1c74e32
--- /dev/null
@@ -0,0 +1,20 @@
+
+class @beta Efl.Wearable.Placeholder_Item extends Efl.Wearable.Item implements Efl.Content
+{
+   [[Wearable Placeholder Item class. This item have only one swallow space,
+     thus user can decorate item by filling the swallow with
+     any kind of container.]]
+   data: null;
+   parts {
+     content: Efl.Ui.Layout_Part_Content; [[the content part for list placeholder item.
+                                        the content part is empty slot for user customizing.
+                                        fill the place with container widget such as layout, box, table.]]
+   }
+   implements {
+      //Efl.Object
+      Efl.Object.constructor;
+      Efl.Content.content { get; set; }
+      Efl.Content.content_unset;
+      Efl.Part.part_get;
+   }
+}
index d351a14..99e5a18 100644 (file)
@@ -9,11 +9,9 @@
 #include "elm_widget.h"
 #include "elm_priv.h"
 #include "efl_ui_position_manager_common.h"
-//TIZEN_ONLY
 #include "efl_ui_item_internal.h"
 #define DIMED_ITEM_COLOR 50
 #define ALIGNED_ITEM_SCALE_FACTOR 1.5
-//
 
 #define MY_CLASS      EFL_WEARABLE_POSITION_MANAGER_CIRCLE_LIST_CLASS
 #define MY_DATA_GET(obj, pd) \
@@ -261,65 +259,64 @@ _position_items(Eo *obj EINA_UNUSED, Efl_Wearable_Position_Manager_Circle_List_D
              else
                signal = "efl,state,odd";
              efl_layout_signal_emit(ent, signal, "efl");
-             // TIZEN ONLY() Circle Fish Eye Effect Implementation
-             {
-                Efl_Object *proxy = _efl_ui_item_proxy_get(ent);
-                int v_center_pos, i_center_pos;
-                Eina_Rect p_geom;
-                Eina_Size2D resize;
-                float ratio;
-                double scale;
-                double move_v[4] = {0.49, 0.99, 0.45, 1.0};
-                double scale_v[4] = {0.49, 0.14, 1, 0.63};
-
-                if (!proxy)
-                  {
-                      proxy = _efl_ui_item_proxy_new(ent);
-                  }
-                v_center_pos = pd->viewport.y + pd->viewport.h / 2;
-                i_center_pos = geom.y + geom.h / 2; // need to be calculated..
-
-                if (eina_spans_intersect(geom.x, geom.w, pd->viewport.x, pd->viewport.w) &&
-                    eina_spans_intersect(geom.y, geom.h, pd->viewport.y, pd->viewport.h))
-                  {
-                     efl_gfx_entity_visible_set(proxy, EINA_TRUE);
-
-                     //need to have some style based vi effect verification.
-                     ratio = (float)abs(v_center_pos - i_center_pos) / (float)((pd->viewport.h / 2) + geom.h / 2);
-                     double scale_p = ecore_animator_pos_map_n(ratio, ECORE_POS_MAP_CUBIC_BEZIER, 4, scale_v);
-                     scale = elm_config_scale_get() - (scale_p * ALIGNED_ITEM_SCALE_FACTOR);
-
-                     resize.w = geom.w * (scale / elm_config_scale_get());
-                     if (!((geom.w - resize.w) % 2))
-                       p_geom.w = resize.w;
-                     else
-                       p_geom.w = resize.w + 1;
-                     p_geom.x = geom.x + (geom.w - p_geom.w) / 2;
-                     resize.h = geom.h * (scale / elm_config_scale_get());
-
-                     if (!((geom.h - resize.h) % 2))
-                       p_geom.h = resize.h;
-                     else
-                       p_geom.h = resize.h + 1;
-
-                     if (i_center_pos < v_center_pos)
-                       {
-                          double move_p = ecore_animator_pos_map_n(ratio, ECORE_POS_MAP_CUBIC_BEZIER, 4, move_v);
-                          p_geom.y = geom.y + move_p * (geom.h - p_geom.h);
-                       }
-                     else
-                       p_geom.y = geom.y;
-
-                     efl_gfx_entity_geometry_set(proxy, p_geom);
-                  }
-                else
-                  {
-                     efl_gfx_entity_visible_set(proxy, EINA_FALSE);
-
-                  }
-
-             //
-             }
+
+             // Proxy Effect
+             if (_efl_ui_item_proxy_enabled_get(ent))
+               {
+                  Efl_Object *proxy = _efl_ui_item_proxy_get(ent);
+                  int v_center_pos, i_center_pos;
+                  Eina_Rect p_geom;
+                  Eina_Size2D resize;
+                  float ratio;
+                  double scale;
+                  double move_v[4] = {0.49, 0.99, 0.45, 1.0};
+                  double scale_v[4] = {0.49, 0.14, 1, 0.63};
+
+                  if (!proxy)
+                    {
+                       proxy = _efl_ui_item_proxy_new(ent);
+                    }
+                  v_center_pos = pd->viewport.y + pd->viewport.h / 2;
+                  i_center_pos = geom.y + geom.h / 2; // need to be calculated..
+
+                  if (eina_spans_intersect(geom.x, geom.w, pd->viewport.x, pd->viewport.w) &&
+                      eina_spans_intersect(geom.y, geom.h, pd->viewport.y, pd->viewport.h))
+                    {
+                       efl_gfx_entity_visible_set(proxy, EINA_TRUE);
+
+                       //need to have some style based vi effect verification.
+                       ratio = (float)abs(v_center_pos - i_center_pos) / (float)((pd->viewport.h / 2) + geom.h / 2);
+                       double scale_p = ecore_animator_pos_map_n(ratio, ECORE_POS_MAP_CUBIC_BEZIER, 4, scale_v);
+                       scale = elm_config_scale_get() - (scale_p * ALIGNED_ITEM_SCALE_FACTOR);
+
+                       resize.w = geom.w * (scale / elm_config_scale_get());
+                       if (!((geom.w - resize.w) % 2))
+                         p_geom.w = resize.w;
+                       else
+                         p_geom.w = resize.w + 1;
+                       p_geom.x = geom.x + (geom.w - p_geom.w) / 2;
+                       resize.h = geom.h * (scale / elm_config_scale_get());
+
+                       if (!((geom.h - resize.h) % 2))
+                         p_geom.h = resize.h;
+                       else
+                         p_geom.h = resize.h + 1;
+
+                       if (i_center_pos < v_center_pos)
+                         {
+                            double move_p = ecore_animator_pos_map_n(ratio, ECORE_POS_MAP_CUBIC_BEZIER, 4, move_v);
+                            p_geom.y = geom.y + move_p * (geom.h - p_geom.h);
+                         }
+                       else
+                         p_geom.y = geom.y;
+
+                       efl_gfx_entity_geometry_set(proxy, p_geom);
+                    }
+                  else
+                    {
+                       efl_gfx_entity_visible_set(proxy, EINA_FALSE);
+                    }
+               }
           }
         if (pd->dir == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
           geom.y += size.h;
diff --git a/src/lib/elementary/efl_wearable_title_item.c b/src/lib/elementary/efl_wearable_title_item.c
new file mode 100644 (file)
index 0000000..80f2815
--- /dev/null
@@ -0,0 +1,47 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_WEARABLE_TITLE_ITEM_PROTECTED
+#define EFL_PART_PROTECTED
+
+#include <Elementary.h>
+
+#include "elm_priv.h"
+#include "elm_part_helper.h"
+#include "Efl_Wearable.h"
+
+#define MY_CLASS EFL_WEARABLE_TITLE_ITEM_CLASS
+#define MY_CLASS_PFX  efl_wearable_title_item
+
+#define MY_CLASS_NAME "Efl.Wearable.Title_Item"
+
+ELM_PART_TEXT_DEFAULT_GET(efl_wearable_title_item, "efl.text")
+ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_wearable_title_item, void)
+ELM_PART_MARKUP_DEFAULT_IMPLEMENT(efl_wearable_title_item, void)
+
+EOLIAN static Efl_Object *
+_efl_wearable_title_item_efl_part_part_get(const Eo *obj, void *pd EINA_UNUSED, const char *part)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
+   if (eina_streq(part, "text"))
+     return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS, obj, "efl.text");
+
+   return efl_part_get(efl_super(obj, MY_CLASS), part);
+}
+
+EOLIAN static Efl_Object *
+_efl_wearable_title_item_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+   Eo *eo;
+
+   eo = efl_constructor(efl_super(obj, MY_CLASS));
+   elm_widget_theme_element_set(obj, "title");
+
+   return eo;
+}
+
+#define EFL_WEARABLE_TITLE_ITEM_EXTRA_OPS             \
+  ELM_PART_TEXT_DEFAULT_OPS(efl_wearable_title_item)
+
+#include "efl_wearable_title_item.eo.c"
diff --git a/src/lib/elementary/efl_wearable_title_item.eo b/src/lib/elementary/efl_wearable_title_item.eo
new file mode 100644 (file)
index 0000000..12dc424
--- /dev/null
@@ -0,0 +1,22 @@
+class Efl.Wearable.Title_Item extends Efl.Wearable.Item implements
+                                      Efl.Text,
+                                      Efl.Text_Markup,
+                                      Efl.Ui.L10n
+{
+   [[Wearable Title Item Class.
+
+     @since 1.23
+   ]]
+   data: null;
+   parts {
+     text: Efl.Ui.Layout_Part_Text; [[The text part for default items.
+                                      This is the caption of the items.]]
+   }
+   implements {
+      Efl.Object.constructor;
+      Efl.Text.text { get; set; }
+      Efl.Text_Markup.markup { get; set; }
+      Efl.Ui.L10n.l10n_text { get; set; }
+      Efl.Part.part_get;
+   }
+}
index 21fbcd9..73a3f0a 100644 (file)
@@ -197,6 +197,12 @@ pub_eo_files = [
 #<--TIZEN_ONLY
 pub_eo_files += [
   'efl_wearable_position_manager_circle_list.eo',
+  'efl_wearable_item.eo',
+  'efl_wearable_default_item.eo',
+  'efl_wearable_list_default_item.eo',
+  'efl_wearable_placeholder_item.eo',
+  'efl_wearable_title_item.eo',
+  'efl_wearable_double_text_item.eo',
 ]
 #TIZEN_ONLY-->
 
@@ -1019,6 +1025,12 @@ elementary_src += [
   'tizen_vector.c',
   'tizen_util.c',
   'efl_wearable_position_manager_circle_list.c',
+  'efl_wearable_item.c',
+  'efl_wearable_default_item.c',
+  'efl_wearable_list_default_item.c',
+  'efl_wearable_placeholder_item.c',
+  'efl_wearable_title_item.c',
+  'efl_wearable_double_text_item.c',
 ]
 
 elementary_src_tizen = [