From: SangHyeon Jade Lee Date: Wed, 20 Nov 2019 04:41:57 +0000 (+0900) Subject: wearable : add item classes for wearable support X-Git-Tag: submit/tizen/20191121.215843~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F53%2F218153%2F3;p=platform%2Fupstream%2Fefl.git wearable : add item classes for wearable support Change-Id: I60a9ba8b5bcea2545ad82f87f595eaa441eeb597 --- diff --git a/src/lib/elementary/Efl_Wearable.h b/src/lib/elementary/Efl_Wearable.h index 29fa6a0..1e5adad 100644 --- a/src/lib/elementary/Efl_Wearable.h +++ b/src/lib/elementary/Efl_Wearable.h @@ -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" diff --git a/src/lib/elementary/efl_ui_item.c b/src/lib/elementary/efl_ui_item.c index 42ce673..28812db 100644 --- a/src/lib/elementary/efl_ui_item.c +++ b/src/lib/elementary/efl_ui_item.c @@ -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 index 0000000..baf6c15 --- /dev/null +++ b/src/lib/elementary/efl_wearable_default_item.c @@ -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 + +#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 index 0000000..46c3554 --- /dev/null +++ b/src/lib/elementary/efl_wearable_default_item.eo @@ -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 index 0000000..856fe73 --- /dev/null +++ b/src/lib/elementary/efl_wearable_double_text_item.c @@ -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 + +#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 index 0000000..5b1a26b --- /dev/null +++ b/src/lib/elementary/efl_wearable_double_text_item.eo @@ -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 index 0000000..6076033 --- /dev/null +++ b/src/lib/elementary/efl_wearable_item.c @@ -0,0 +1,54 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#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 index 0000000..a4b9670 --- /dev/null +++ b/src/lib/elementary/efl_wearable_item.eo @@ -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 index 0000000..bb982dd --- /dev/null +++ b/src/lib/elementary/efl_wearable_list_default_item.c @@ -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 + +#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 index 0000000..662f050 --- /dev/null +++ b/src/lib/elementary/efl_wearable_list_default_item.eo @@ -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 index 0000000..c371a0b --- /dev/null +++ b/src/lib/elementary/efl_wearable_placeholder_item.c @@ -0,0 +1,50 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#define EFL_WEARABLE_PLACEHOLDER_ITEM_PROTECTED +#define EFL_PART_PROTECTED + +#include +#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 index 0000000..1c74e32 --- /dev/null +++ b/src/lib/elementary/efl_wearable_placeholder_item.eo @@ -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; + } +} diff --git a/src/lib/elementary/efl_wearable_position_manager_circle_list.c b/src/lib/elementary/efl_wearable_position_manager_circle_list.c index d351a14..99e5a18 100644 --- a/src/lib/elementary/efl_wearable_position_manager_circle_list.c +++ b/src/lib/elementary/efl_wearable_position_manager_circle_list.c @@ -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 index 0000000..80f2815 --- /dev/null +++ b/src/lib/elementary/efl_wearable_title_item.c @@ -0,0 +1,47 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#define EFL_WEARABLE_TITLE_ITEM_PROTECTED +#define EFL_PART_PROTECTED + +#include + +#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 index 0000000..12dc424 --- /dev/null +++ b/src/lib/elementary/efl_wearable_title_item.eo @@ -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; + } +} diff --git a/src/lib/elementary/meson.build b/src/lib/elementary/meson.build index 21fbcd9..73a3f0a 100644 --- a/src/lib/elementary/meson.build +++ b/src/lib/elementary/meson.build @@ -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 = [