From 112edeeea807a5dc499d003729c4a8cad829c5a6 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 20 Sep 2017 11:16:17 +0900 Subject: [PATCH] elm: Remove range "span_size" API in EO Reasons: - This API has been confused with the min size of the widget, resulting in badly laid out applications. - The EO API was not very nice (Range is about numbers, the Gfx size hint in a part is really ugly). While I understand the value of this API and how it can be used in scalable applications, it is in fact not absolutely necessary. Alternatively to that span size, the widget min size can already be defined from the application side, or the widget can simply be expanded to fill in its parent. This can obviously be reinstated later if the need arises for EO. For now, keep this feature as legacy-only. --- src/Makefile_Elementary.am | 1 - src/bin/elementary/test_slider_interval.c | 117 +++++++++--------- src/examples/elementary/slider_cxx_example.cc | 2 +- src/lib/efl/interfaces/efl_ui_range.eo | 21 ---- src/lib/elementary/efl_ui_layout.c | 5 +- src/lib/elementary/efl_ui_progressbar.c | 55 ++++---- src/lib/elementary/efl_ui_progressbar.eo | 2 +- src/lib/elementary/efl_ui_progressbar_part.eo | 3 +- .../elementary/efl_ui_progressbar_private.h | 23 +--- src/lib/elementary/efl_ui_slider.c | 89 ++----------- src/lib/elementary/efl_ui_slider.eo | 2 - src/lib/elementary/efl_ui_slider_part.eo | 8 -- src/lib/elementary/efl_ui_slider_private.h | 23 +--- 13 files changed, 112 insertions(+), 239 deletions(-) delete mode 100644 src/lib/elementary/efl_ui_slider_part.eo diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index 2d1d01c782..bd13a1ff26 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -118,7 +118,6 @@ elm_public_eolian_files = \ lib/elementary/efl_ui_progressbar_part.eo \ lib/elementary/elm_popup_part.eo \ lib/elementary/elm_scroller_part.eo \ - lib/elementary/efl_ui_slider_part.eo \ lib/elementary/elm_label_part.eo \ lib/elementary/elm_actionslider_part.eo \ lib/elementary/elm_bubble_part.eo \ diff --git a/src/bin/elementary/test_slider_interval.c b/src/bin/elementary/test_slider_interval.c index 14b1a85ae8..cee02ff657 100644 --- a/src/bin/elementary/test_slider_interval.c +++ b/src/bin/elementary/test_slider_interval.c @@ -29,7 +29,7 @@ _intv_slider_changed_cb(void *data EINA_UNUSED, const Efl_Event *ev) void test_slider_interval(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Eo *win, *bx, *hbx, *sl; + Eo *win, *bx, *hbx; double step; win = efl_add(EFL_UI_WIN_CLASS, NULL, @@ -40,72 +40,71 @@ test_slider_interval(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void bx = efl_add(EFL_UI_BOX_CLASS, win, efl_content_set(win, efl_added)); - sl = efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, - efl_text_set(efl_added, "horizontal"), - efl_ui_slider_indicator_visible_mode_set(efl_added, EFL_UI_SLIDER_INDICATOR_VISIBLE_MODE_NONE), - efl_ui_range_span_size_set(efl_added, 160), - efl_ui_slider_indicator_format_set(efl_added, "%1.5f"), - efl_ui_slider_interval_value_set(efl_added, 0.4, 0.9), - efl_pack(bx, efl_added)); + efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, + efl_text_set(efl_added, "Horizontal"), + efl_ui_slider_indicator_visible_mode_set(efl_added, EFL_UI_SLIDER_INDICATOR_VISIBLE_MODE_NONE), + efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(160, 0)), + efl_ui_slider_indicator_format_set(efl_added, "%1.5f"), + efl_ui_slider_interval_value_set(efl_added, 0.4, 0.9), + efl_pack(bx, efl_added)); step = _step_size_calculate(0, 9); - sl = efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, - efl_text_set(efl_added, "Manual step"), - efl_ui_range_span_size_set(efl_added, 120), - efl_ui_range_unit_format_set(efl_added, "%1.1f units"), - efl_ui_slider_indicator_format_set(efl_added, "%1.1f"), - efl_ui_slider_interval_value_set(efl_added, 0.4, 0.9), - efl_ui_slider_step_set(efl_added, step), - efl_pack(bx, efl_added)); + efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, + efl_text_set(efl_added, "Manual step"), + efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(120, 0)), + efl_ui_range_unit_format_set(efl_added, "%1.1f units"), + efl_ui_slider_indicator_format_set(efl_added, "%1.1f"), + efl_ui_slider_interval_value_set(efl_added, 0.4, 0.9), + efl_ui_slider_step_set(efl_added, step), + efl_pack(bx, efl_added)); - sl = efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, - efl_text_set(efl_added, "Disabled"), - efl_ui_range_span_size_set(efl_added, 120), - efl_ui_range_unit_format_set(efl_added, "%1.0f units"), - efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), - efl_ui_range_min_max_set(efl_added, 10, 145), - efl_ui_slider_interval_value_set(efl_added, 50, 100), - efl_ui_slider_step_set(efl_added, step), - efl_pack(bx, efl_added)); - elm_object_disabled_set(sl, EINA_TRUE); + efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, + efl_text_set(efl_added, "Disabled"), + efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(120, 0)), + efl_ui_range_unit_format_set(efl_added, "%1.0f units"), + efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), + efl_ui_range_min_max_set(efl_added, 10, 145), + efl_ui_slider_interval_value_set(efl_added, 50, 100), + efl_ui_slider_step_set(efl_added, step), + elm_object_disabled_set(efl_added, EINA_TRUE), + efl_pack(bx, efl_added)); hbx = efl_add(EFL_UI_BOX_CLASS, bx, efl_ui_direction_set(efl_added, EFL_UI_DIR_HORIZONTAL), efl_pack(bx, efl_added)); - sl = efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, hbx, - efl_text_set(efl_added, "Vertical"), - efl_ui_range_span_size_set(efl_added, 120), - efl_ui_range_unit_format_set(efl_added, "%1.0f units"), - efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), - efl_ui_range_min_max_set(efl_added, 10, 145), - efl_ui_slider_interval_value_set(efl_added, 50, 100), - efl_ui_slider_step_set(efl_added, step), - efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL), - efl_pack(hbx, efl_added)); + efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, hbx, + efl_text_set(efl_added, "Vertical"), + efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(0, 160)), + efl_ui_range_unit_format_set(efl_added, "%1.0f units"), + efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), + efl_ui_range_min_max_set(efl_added, 10, 145), + efl_ui_slider_interval_value_set(efl_added, 50, 100), + efl_ui_slider_step_set(efl_added, step), + efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL), + efl_pack(hbx, efl_added)); - sl = efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, hbx, - efl_text_set(efl_added, "Disabled"), - efl_ui_range_span_size_set(efl_added, 120), - efl_ui_range_unit_format_set(efl_added, "%1.0f units"), - efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), - efl_ui_range_min_max_set(efl_added, 10, 145), - efl_ui_slider_interval_value_set(efl_added, 50, 100), - efl_ui_slider_step_set(efl_added, step), - efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL), - efl_pack(hbx, efl_added)); - elm_object_disabled_set(sl, EINA_TRUE); + efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, hbx, + efl_text_set(efl_added, "Disabled"), + efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(0, 160)), + efl_ui_range_unit_format_set(efl_added, "%1.0f units"), + efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), + efl_ui_range_min_max_set(efl_added, 10, 145), + efl_ui_slider_interval_value_set(efl_added, 50, 100), + efl_ui_slider_step_set(efl_added, step), + efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL), + elm_object_disabled_set(efl_added, EINA_TRUE), + efl_pack(hbx, efl_added)); - sl = efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, - efl_text_set(efl_added, "Limited(100-500)"), - efl_ui_slider_indicator_visible_mode_set(efl_added, EFL_UI_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS), - efl_ui_range_span_size_set(efl_added, 120), - efl_ui_range_unit_format_set(efl_added, "%1.0f units"), - efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), - efl_ui_range_min_max_set(efl_added, 0, 600), - efl_ui_slider_interval_value_set(efl_added, 100, 500), - efl_ui_slider_step_set(efl_added, step), - efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_CHANGED, _intv_slider_changed_cb, NULL), - efl_pack(bx, efl_added)); + efl_add(EFL_UI_SLIDER_INTERVAL_CLASS, bx, + efl_text_set(efl_added, "Limited (100-500)"), + efl_ui_slider_indicator_visible_mode_set(efl_added, EFL_UI_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS), + efl_gfx_size_hint_min_set(efl_added, EINA_SIZE2D(260, 0)), + efl_ui_range_unit_format_set(efl_added, "%1.0f units"), + efl_ui_slider_indicator_format_set(efl_added, "%1.0f"), + efl_ui_range_min_max_set(efl_added, 0, 600), + efl_ui_slider_interval_value_set(efl_added, 100, 500), + efl_ui_slider_step_set(efl_added, step), + efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_CHANGED, _intv_slider_changed_cb, NULL), + efl_pack(bx, efl_added)); } - diff --git a/src/examples/elementary/slider_cxx_example.cc b/src/examples/elementary/slider_cxx_example.cc index 273abea1eb..4f6f948c04 100644 --- a/src/examples/elementary/slider_cxx_example.cc +++ b/src/examples/elementary/slider_cxx_example.cc @@ -38,7 +38,7 @@ elm_main (int argc, char *argv[]) ::elm::slider sl3(efl::eo::parent = win); sl3.value_set(1); - sl3.span_size_set(200); + sl3.hint_min_set(220, 0); sl3.size_hint_align_set(EVAS_HINT_FILL, 0.5); sl3.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); bx.pack_end(sl3); diff --git a/src/lib/efl/interfaces/efl_ui_range.eo b/src/lib/efl/interfaces/efl_ui_range.eo index c2f338e4f1..6b9edd8a17 100644 --- a/src/lib/efl/interfaces/efl_ui_range.eo +++ b/src/lib/efl/interfaces/efl_ui_range.eo @@ -2,27 +2,6 @@ interface Efl.Ui.Range { [[Efl UI progress interface]] methods { - @property span_size { - [[Control the (exact) length of the bar region of a given range widget - - This sets the minimum width (when in horizontal mode) or height - (when in vertical mode) of the actual bar area of the range - bar $obj. This in turn affects the object's minimum size. Use - this when you're not setting other size hints expanding on the - given direction (like weight and alignment hints) and you would - like it to have a specific size. - - Note: Icon, label and unit text around $obj will require their - own space, which will make $obj to require more the $size, - actually.]] - set { - } - get { - } - values { - size: int; [[The length of the range's bar region]] - } - } @property range_value { [[Control the range value (in percentage) on a given range widget diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c index 24130d71b4..71168666ce 100644 --- a/src/lib/elementary/efl_ui_layout.c +++ b/src/lib/elementary/efl_ui_layout.c @@ -1042,8 +1042,7 @@ end: } EAPI Evas_Object * -elm_layout_content_get(const Evas_Object *obj, - const char *swallow) +elm_layout_content_get(const Evas_Object *obj, const char *swallow) { EFL_UI_LAYOUT_CHECK(obj) NULL; if (!swallow) @@ -1051,6 +1050,8 @@ elm_layout_content_get(const Evas_Object *obj, swallow = elm_widget_default_content_part_get(obj); if (!swallow) return NULL; } + else if (!_elm_layout_part_aliasing_eval(obj, &swallow, EINA_FALSE)) + return NULL; return efl_content_get(efl_part(obj, swallow)); } diff --git a/src/lib/elementary/efl_ui_progressbar.c b/src/lib/elementary/efl_ui_progressbar.c index 38cba9635a..cfbb830443 100644 --- a/src/lib/elementary/efl_ui_progressbar.c +++ b/src/lib/elementary/efl_ui_progressbar.c @@ -174,33 +174,23 @@ _icon_signal_emit(Evas_Object *obj) elm_layout_signal_emit(obj, buf, "elm"); } -/* FIXME: replicated from elm_layout just because progressbar's icon - * spot is elm.swallow.content, not elm.swallow.icon. Fix that - * whenever we can changed the theme API */ EOLIAN static Eina_Bool -_efl_ui_progressbar_elm_widget_widget_sub_object_del(Eo *obj, Efl_Ui_Progressbar_Data *_pd EINA_UNUSED, Evas_Object *sobj) +_efl_ui_progressbar_elm_widget_widget_sub_object_del(Eo *obj, Efl_Ui_Progressbar_Data *pd EINA_UNUSED, Evas_Object *sobj) { - Eina_Bool int_ret = EINA_FALSE; - int_ret = elm_widget_sub_object_del(efl_super(obj, MY_CLASS), sobj); - if (!int_ret) return EINA_FALSE; + if (!elm_obj_widget_sub_object_del(efl_super(obj, MY_CLASS), sobj)) + return EINA_FALSE; _icon_signal_emit(obj); - return EINA_TRUE; } -/* FIXME: replicated from elm_layout just because progressbar's icon - * spot is elm.swallow.content, not elm.swallow.icon. Fix that - * whenever we can changed the theme API */ static Eina_Bool -_efl_ui_progressbar_content_set(Eo *obj, Efl_Ui_Progressbar_Data *_pd EINA_UNUSED, const char *part, Evas_Object *content) +_efl_ui_progressbar_elm_widget_widget_sub_object_add(Eo *obj, Efl_Ui_Progressbar_Data *pd EINA_UNUSED, Evas_Object *sobj) { - Eina_Bool int_ret = EINA_FALSE; - int_ret = efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content); - if (!int_ret) return EINA_FALSE; + if (!elm_obj_widget_sub_object_add(efl_super(obj, MY_CLASS), sobj)) + return EINA_FALSE; _icon_signal_emit(obj); - return EINA_TRUE; } @@ -399,8 +389,8 @@ _efl_ui_progressbar_efl_ui_direction_direction_get(Eo *obj EINA_UNUSED, Efl_Ui_P return sd->dir; } -EOLIAN static void -_efl_ui_progressbar_efl_ui_range_span_size_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, Evas_Coord size) +static void +_progressbar_span_size_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, Evas_Coord size) { if (sd->size == size) return; @@ -418,12 +408,6 @@ _efl_ui_progressbar_efl_ui_range_span_size_set(Eo *obj, Efl_Ui_Progressbar_Data elm_layout_sizing_eval(obj); } -EOLIAN static Evas_Coord -_efl_ui_progressbar_efl_ui_range_span_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *sd) -{ - return sd->size; -} - static void _progressbar_part_value_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, const char *part_name, double val) { @@ -544,13 +528,15 @@ elm_progressbar_value_get(const Evas_Object *obj) EAPI void elm_progressbar_span_size_set(Evas_Object *obj, Evas_Coord size) { - efl_ui_range_span_size_set(obj, size); + EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(obj, sd); + _progressbar_span_size_set(obj, sd, size); } EAPI Evas_Coord elm_progressbar_span_size_get(const Evas_Object *obj) { - return efl_ui_range_span_size_get(obj); + EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(obj, sd, 0); + return sd->size; } EAPI void @@ -642,8 +628,18 @@ _efl_ui_progressbar_class_constructor(Efl_Class *klass) /* Efl.Part begin */ -ELM_PART_OVERRIDE_ONLY_ALIASES(efl_ui_progressbar, EFL_UI_PROGRESSBAR, Efl_Ui_Progressbar_Data, _content_aliases) -ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_progressbar, EFL_UI_PROGRESSBAR, Efl_Ui_Progressbar_Data) +EOLIAN static Eo * +_efl_ui_progressbar_efl_part_part(const Eo *obj, Efl_Ui_Progressbar_Data *sd EINA_UNUSED, const char *part) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL); + + // Progress bars are dragable types + if (edje_object_part_drag_dir_get(wd->resize_obj, part) != EFL_UI_DRAG_DIR_NONE) + return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS); + + return efl_part(efl_super(obj, MY_CLASS), part); +} EOLIAN static void _efl_ui_progressbar_part_efl_ui_range_range_value_set(Eo *obj, void *_pd EINA_UNUSED, double val) @@ -652,6 +648,7 @@ _efl_ui_progressbar_part_efl_ui_range_range_value_set(Eo *obj, void *_pd EINA_UN Efl_Ui_Progressbar_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_PROGRESSBAR_CLASS); _progressbar_part_value_set(pd->obj, sd, pd->part, val); + ELM_PART_RETURN_VOID; } EOLIAN static double @@ -660,7 +657,7 @@ _efl_ui_progressbar_part_efl_ui_range_range_value_get(Eo *obj, void *_pd EINA_UN Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); Efl_Ui_Progressbar_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_PROGRESSBAR_CLASS); - return _progressbar_part_value_get(sd, pd->part); + ELM_PART_RETURN_VAL(_progressbar_part_value_get(sd, pd->part)); } #include "efl_ui_progressbar_part.eo.c" diff --git a/src/lib/elementary/efl_ui_progressbar.eo b/src/lib/elementary/efl_ui_progressbar.eo index dcd7f2fda0..121a7307cd 100644 --- a/src/lib/elementary/efl_ui_progressbar.eo +++ b/src/lib/elementary/efl_ui_progressbar.eo @@ -52,8 +52,8 @@ class Efl.Ui.Progressbar (Efl.Ui.Layout, Efl.Ui.Range, Efl.Ui.Direction) Elm.Widget.theme_apply; Elm.Widget.focus_next_manager_is; Elm.Widget.focus_direction_manager_is; + Elm.Widget.widget_sub_object_add; Elm.Widget.widget_sub_object_del; - Efl.Ui.Range.span_size { get; set; } Efl.Ui.Range.range_value { get; set; } Efl.Ui.Range.range_unit_format { get; set; } Efl.Ui.Direction.direction { get; set; } diff --git a/src/lib/elementary/efl_ui_progressbar_part.eo b/src/lib/elementary/efl_ui_progressbar_part.eo index 0eb21412ea..a57bfa7cdc 100644 --- a/src/lib/elementary/efl_ui_progressbar_part.eo +++ b/src/lib/elementary/efl_ui_progressbar_part.eo @@ -1,9 +1,8 @@ -class Efl.Ui.Progressbar.Part (Efl.Ui.Layout.Part_Content, Efl.Ui.Range) +class Efl.Ui.Progressbar.Part (Efl.Ui.Layout.Part, Efl.Ui.Range) { [[Elementary progressbar internal part class]] data: null; implements { - Efl.Container.content { set; } Efl.Ui.Range.range_value { set; get; } } } diff --git a/src/lib/elementary/efl_ui_progressbar_private.h b/src/lib/elementary/efl_ui_progressbar_private.h index 4c0a9b89f5..afc7017002 100644 --- a/src/lib/elementary/efl_ui_progressbar_private.h +++ b/src/lib/elementary/efl_ui_progressbar_private.h @@ -56,26 +56,13 @@ struct _Efl_Ui_Progress_Status #define EFL_UI_PROGRESSBAR_DATA_GET(o, sd) \ Efl_Ui_Progressbar_Data * sd = efl_data_scope_get(o, EFL_UI_PROGRESSBAR_CLASS) -#define EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(o, ptr) \ - EFL_UI_PROGRESSBAR_DATA_GET(o, ptr); \ - if (EINA_UNLIKELY(!ptr)) \ +#define EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(o, sd, ...) \ + Efl_Ui_Progressbar_Data *sd = efl_data_scope_safe_get(o, EFL_UI_PROGRESSBAR_CLASS); \ + if (EINA_UNLIKELY(!sd)) \ { \ - CRI("No widget data for object %p (%s)", \ + ERR("No widget data for object %p (%s)", \ o, evas_object_type_get(o)); \ - return; \ + return __VA_ARGS__; \ } -#define EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ - EFL_UI_PROGRESSBAR_DATA_GET(o, ptr); \ - if (EINA_UNLIKELY(!ptr)) \ - { \ - CRI("No widget data for object %p (%s)", \ - o, evas_object_type_get(o)); \ - return val; \ - } - -#define EFL_UI_PROGRESSBAR_CHECK(obj) \ - if (EINA_UNLIKELY(!efl_isa((obj), EFL_UI_PROGRESSBAR_CLASS))) \ - return - #endif diff --git a/src/lib/elementary/efl_ui_slider.c b/src/lib/elementary/efl_ui_slider.c index 76c3839014..f53f5760cd 100644 --- a/src/lib/elementary/efl_ui_slider.c +++ b/src/lib/elementary/efl_ui_slider.c @@ -12,8 +12,6 @@ #include "elm_priv.h" #include "efl_ui_slider_private.h" #include "elm_widget_layout.h" - -#include "efl_ui_slider_part.eo.h" #include "elm_part_helper.h" #define MY_CLASS EFL_UI_SLIDER_CLASS @@ -1233,21 +1231,6 @@ _efl_ui_slider_efl_ui_direction_direction_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider return sd->dir; } -EOLIAN static void -_efl_ui_slider_efl_ui_range_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, Evas_Coord size) -{ - if (_is_horizontal(sd->dir)) - efl_gfx_size_hint_min_set(efl_part(obj, "span"), EINA_SIZE2D(size, 1)); - else - efl_gfx_size_hint_min_set(efl_part(obj, "span"), EINA_SIZE2D(1, size)); -} - -EOLIAN static Evas_Coord -_efl_ui_slider_efl_ui_range_span_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd) -{ - return sd->size; -} - EOLIAN static void _efl_ui_slider_efl_ui_range_range_unit_format_set(Eo *obj, Efl_Ui_Slider_Data *sd, const char *units) { @@ -1509,29 +1492,9 @@ _efl_ui_slider_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UN ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_ui_slider, Efl_Ui_Slider_Data) -/* Efl.Part begin */ - -EOLIAN static Eo * -_efl_ui_slider_efl_part_part(const Eo *obj, Efl_Ui_Slider_Data *sd EINA_UNUSED, const char *part) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); - - if (eina_streq(part, "span")) - return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_SLIDER_PART_CLASS); - - return efl_part(efl_super(obj, MY_CLASS), part); -} - static void -_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, int w, int h) +_slider_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, int size) { - Evas_Coord size; - - if (_is_horizontal(sd->dir)) - size = w; - else - size = h; - if (sd->size == size) return; sd->size = size; @@ -1555,36 +1518,6 @@ _span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, int w, int h) evas_object_smart_changed(obj); } -EOLIAN void -_efl_ui_slider_part_efl_gfx_size_hint_hint_min_set(Eo *obj, void *_pd EINA_UNUSED, Eina_Size2D sz) -{ - Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); - Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS); - - EINA_SAFETY_ON_FALSE_RETURN(eina_streq(pd->part, "span")); - _span_size_set(pd->obj, sd, sz.w, sz.h); -} - -EOLIAN Eina_Size2D -_efl_ui_slider_part_efl_gfx_size_hint_hint_min_get(Eo *obj, void *_pd EINA_UNUSED) -{ - Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS); - Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS); - Eina_Size2D ret = { 0, 0 }; - - EINA_SAFETY_ON_FALSE_GOTO(eina_streq(pd->part, "span"), end); - if (_is_horizontal(sd->dir)) - ret = EINA_SIZE2D(sd->size, 1); - else - ret = EINA_SIZE2D(1, sd->size); - -end: - return ret; -} - -#include "efl_ui_slider_part.eo.c" -/* Efl.Part end */ - /* Legacy APIs */ EAPI Evas_Object * @@ -1597,13 +1530,15 @@ elm_slider_add(Evas_Object *parent) EAPI void elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size) { - efl_ui_range_span_size_set(obj, size); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, sd); + _slider_span_size_set(obj, sd, size); } EAPI Evas_Coord elm_slider_span_size_get(const Evas_Object *obj) { - return efl_ui_range_span_size_get(obj); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, sd, 0); + return sd->size; } EAPI void @@ -1622,7 +1557,7 @@ EAPI void elm_slider_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) { Efl_Ui_Dir dir; - EFL_UI_SLIDER_DATA_GET(obj, sd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, sd); dir = _direction_get(horizontal, _is_inverted(sd->dir)); @@ -1654,7 +1589,7 @@ EAPI void elm_slider_inverted_set(Evas_Object *obj, Eina_Bool inverted) { Efl_Ui_Dir dir; - EFL_UI_SLIDER_DATA_GET(obj, sd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, sd); dir = _direction_get(_is_horizontal(sd->dir), inverted); @@ -1673,7 +1608,7 @@ elm_slider_inverted_get(const Evas_Object *obj) EAPI void elm_slider_units_format_function_set(Evas_Object *obj, slider_func_type func, slider_freefunc_type free_func) { - EFL_UI_SLIDER_DATA_GET(obj, sd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, sd); sd->units_format_func = func; sd->units_format_free = free_func; @@ -1684,7 +1619,7 @@ elm_slider_units_format_function_set(Evas_Object *obj, slider_func_type func, sl EAPI void elm_slider_range_enabled_set(Evas_Object *obj, Eina_Bool enable) { - EFL_UI_SLIDER_DATA_GET(obj, sd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, sd); if (sd->intvl_enable == enable) return; @@ -1707,14 +1642,14 @@ elm_slider_range_enabled_set(Evas_Object *obj, Eina_Bool enable) EAPI Eina_Bool elm_slider_range_enabled_get(const Evas_Object *obj) { - EFL_UI_SLIDER_DATA_GET(obj, pd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, pd, EINA_FALSE); return pd->intvl_enable; } EAPI void elm_slider_range_set(Evas_Object *obj, double from, double to) { - EFL_UI_SLIDER_DATA_GET(obj, pd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, pd); pd->intvl_from = from; pd->val = from; pd->intvl_to = to; @@ -1728,7 +1663,7 @@ elm_slider_range_set(Evas_Object *obj, double from, double to) EAPI void elm_slider_range_get(const Evas_Object *obj, double *from, double *to) { - EFL_UI_SLIDER_DATA_GET(obj, pd); + EFL_UI_SLIDER_DATA_GET_OR_RETURN(obj, pd); if (from) *from = fmin(pd->intvl_from, pd->intvl_to); if (to) *to = fmax(pd->intvl_from, pd->intvl_to); } diff --git a/src/lib/elementary/efl_ui_slider.eo b/src/lib/elementary/efl_ui_slider.eo index 825ac20aca..c26ab11b3e 100644 --- a/src/lib/elementary/efl_ui_slider.eo +++ b/src/lib/elementary/efl_ui_slider.eo @@ -121,7 +121,6 @@ class Efl.Ui.Slider (Efl.Ui.Layout, Efl.Ui.Range, Efl.Ui.Direction, Elm.Widget.focus_direction_manager_is; Elm.Widget.on_focus_update; Elm.Widget.widget_event; - Efl.Ui.Range.span_size { get; set; } Efl.Ui.Range.range_value { get; set; } Efl.Ui.Range.range_unit_format { get; set; } Efl.Ui.Range.range_min_max {get; set; } @@ -130,7 +129,6 @@ class Efl.Ui.Slider (Efl.Ui.Layout, Efl.Ui.Range, Efl.Ui.Direction, Efl.Access.Value.range { get; } Efl.Access.Value.increment { get; } Elm.Interface.Atspi_Widget_Action.elm_actions { get; } - Efl.Part.part; Efl.Text.text { get; set; } } events { diff --git a/src/lib/elementary/efl_ui_slider_part.eo b/src/lib/elementary/efl_ui_slider_part.eo deleted file mode 100644 index 30b34c8675..0000000000 --- a/src/lib/elementary/efl_ui_slider_part.eo +++ /dev/null @@ -1,8 +0,0 @@ -class Efl.Ui.Slider.Part (Efl.Ui.Layout.Part_Content, Efl.Gfx.Size.Hint) -{ - [[Elementary slider internal part class]] - data: null; - implements { - Efl.Gfx.Size.Hint.hint_min { set; get; } - } -} diff --git a/src/lib/elementary/efl_ui_slider_private.h b/src/lib/elementary/efl_ui_slider_private.h index 8e69d234fa..a81425e4b6 100644 --- a/src/lib/elementary/efl_ui_slider_private.h +++ b/src/lib/elementary/efl_ui_slider_private.h @@ -66,26 +66,13 @@ struct _Efl_Ui_Slider_Data #define EFL_UI_SLIDER_DATA_GET(o, sd) \ Efl_Ui_Slider_Data * sd = efl_data_scope_get(o, EFL_UI_SLIDER_CLASS) -#define EFL_UI_SLIDER_DATA_GET_OR_RETURN(o, ptr) \ - EFL_UI_SLIDER_DATA_GET(o, ptr); \ - if (EINA_UNLIKELY(!ptr)) \ +#define EFL_UI_SLIDER_DATA_GET_OR_RETURN(o, sd, ...) \ + Efl_Ui_Slider_Data * sd = efl_data_scope_safe_get(o, EFL_UI_SLIDER_CLASS); \ + if (EINA_UNLIKELY(!sd)) \ { \ - CRI("No widget data for object %p (%s)", \ + ERR("No widget data for object %p (%s)", \ o, evas_object_type_get(o)); \ - return; \ + return __VA_ARGS__; \ } -#define EFL_UI_SLIDER_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ - EFL_UI_SLIDER_DATA_GET(o, ptr); \ - if (EINA_UNLIKELY(!ptr)) \ - { \ - CRI("No widget data for object %p (%s)", \ - o, evas_object_type_get(o)); \ - return val; \ - } - -#define EFL_UI_SLIDER_CHECK(obj) \ - if (EINA_UNLIKELY(!efl_isa((obj), EFL_UI_SLIDER_CLASS))) \ - return - #endif