diff options
author | Amitesh Singh <amitesh.sh@samsung.com> | 2017-06-22 14:00:58 +0900 |
---|---|---|
committer | Amitesh Singh <amitesh.sh@samsung.com> | 2017-06-22 18:36:21 +0900 |
commit | d6bf97776573545815640f80b464e05222d09a63 (patch) | |
tree | aab4d52e94f57bd3e9fe8d29e5885fe1b519508d | |
parent | 17755976713b955abe5cb4483f7ba6f1e44e1770 (diff) | |
download | efl-devs/ami/slider_spansize.tar.gz |
Efl.Ui.Slider: implement slider internal part classdevs/ami/slider_spansize
-rw-r--r-- | src/Makefile_Elementary.am | 1 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_slider.c | 111 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_slider.eo | 1 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_slider_internal_part.eo | 9 |
4 files changed, 102 insertions, 20 deletions
diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index e5c6704da7..65ff128cf6 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -110,6 +110,7 @@ elm_public_eolian_files = \ lib/elementary/efl_ui_progressbar_internal_part.eo \ lib/elementary/elm_popup_internal_part.eo \ lib/elementary/elm_scroller_internal_part.eo \ + lib/elementary/efl_ui_slider_internal_part.eo \ lib/elementary/elm_label_internal_part.eo \ lib/elementary/elm_actionslider_internal_part.eo \ lib/elementary/elm_bubble_internal_part.eo \ diff --git a/src/lib/elementary/efl_ui_slider.c b/src/lib/elementary/efl_ui_slider.c index 62e0004354..0c8a905f09 100644 --- a/src/lib/elementary/efl_ui_slider.c +++ b/src/lib/elementary/efl_ui_slider.c @@ -13,6 +13,9 @@ #include "efl_ui_slider_private.h" #include "elm_widget_layout.h" +#include "efl_ui_slider_internal_part.eo.h" +#include "elm_part_helper.h" + #define MY_CLASS EFL_UI_SLIDER_CLASS #define MY_CLASS_NAME "Efl.Ui.Slider" @@ -1302,27 +1305,10 @@ _efl_ui_slider_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Efl_Ui_Slide EOLIAN static void _efl_ui_slider_efl_ui_range_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, Evas_Coord size) { - if (sd->size == size) return; - sd->size = size; - - if (sd->indicator_show) - { - elm_layout_signal_emit(obj, "elm,state,val,show", "elm"); - if (sd->popup) - edje_object_signal_emit(sd->popup, "elm,state,val,show", "elm"); - if (sd->popup2) - edje_object_signal_emit(sd->popup2, "elm,state,val,show", "elm"); - } + if (_is_horizontal(sd->orientation)) + efl_gfx_size_hint_min_set(efl_part(obj, "elm.swallow.bar"), size, 1); else - { - elm_layout_signal_emit(obj, "elm,state,val,hide", "elm"); - if (sd->popup) - edje_object_signal_emit(sd->popup, "elm,state,val,hide", "elm"); - if (sd->popup2) - edje_object_signal_emit(sd->popup2, "elm,state,val,hide", "elm"); - } - - evas_object_smart_changed(obj); + efl_gfx_size_hint_min_set(efl_part(obj, "elm.swallow.bar"), 1, size); } EOLIAN static Evas_Coord @@ -1588,6 +1574,91 @@ _efl_ui_slider_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UN // A11Y Accessibility - END +/* Efl.Part begin */ +ELM_PART_OVERRIDE(efl_ui_slider, EFL_UI_SLIDER, ELM_LAYOUT, Efl_Ui_Slider_Data, Elm_Part_Data) + +static Eina_Bool +_efl_ui_slider_content_set(Eo *obj, Efl_Ui_Slider_Data *_pd EINA_UNUSED, const char *part, Evas_Object *content) +{ + Eina_Bool int_ret; + + int_ret = efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content); + if (!int_ret) return EINA_FALSE; + + return EINA_TRUE; +} + +static EOLIAN Eina_Bool +_efl_ui_slider_internal_part_efl_container_content_set(Eo *obj, Elm_Part_Data *_pd EINA_UNUSED, Efl_Gfx *content) +{ + Elm_Part_Data *pd = efl_data_scope_get(obj, ELM_LAYOUT_INTERNAL_PART_CLASS); + Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS); + ELM_PART_RETURN_VAL(_efl_ui_slider_content_set(pd->obj, sd, pd->part, content)); +} + +static void +_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, int w, int h) +{ + Evas_Coord size; + + if (_is_horizontal(sd->orientation)) + size = w; + else + size = h; + + if (sd->size == size) return; + sd->size = size; + + if (sd->indicator_show) + { + elm_layout_signal_emit(obj, "elm,state,val,show", "elm"); + if (sd->popup) + edje_object_signal_emit(sd->popup, "elm,state,val,show", "elm"); + if (sd->popup2) + edje_object_signal_emit(sd->popup2, "elm,state,val,show", "elm"); + } + else + { + elm_layout_signal_emit(obj, "elm,state,val,hide", "elm"); + if (sd->popup) + edje_object_signal_emit(sd->popup, "elm,state,val,hide", "elm"); + if (sd->popup2) + edje_object_signal_emit(sd->popup2, "elm,state,val,hide", "elm"); + } + + evas_object_smart_changed(obj); +} + +EOLIAN void +_efl_ui_slider_internal_part_efl_gfx_size_hint_hint_min_set(Eo *obj, Elm_Part_Data *_pd EINA_UNUSED, int w, int h) +{ + Elm_Part_Data *pd = efl_data_scope_get(obj, ELM_LAYOUT_INTERNAL_PART_CLASS); + Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS); + + _span_size_set(pd->obj, sd, w, h); +} + +EOLIAN void +_efl_ui_slider_internal_part_efl_gfx_size_hint_hint_min_get(Eo *obj, Elm_Part_Data *_pd EINA_UNUSED, int *w, int *h) +{ + Elm_Part_Data *pd = efl_data_scope_get(obj, ELM_LAYOUT_INTERNAL_PART_CLASS); + Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS); + + if (_is_horizontal(sd->orientation)) + { + if (w) *w = sd->size; + if (h) *h = 1; + } + else + { + if (w) *w = 1; + if (h) *h = sd->size; + } +} + +#include "efl_ui_slider_internal_part.eo.c" +/* Efl.Part end */ + /* Legacy APIs */ EAPI Evas_Object * diff --git a/src/lib/elementary/efl_ui_slider.eo b/src/lib/elementary/efl_ui_slider.eo index 2afea2e7c6..4e46a4108d 100644 --- a/src/lib/elementary/efl_ui_slider.eo +++ b/src/lib/elementary/efl_ui_slider.eo @@ -136,6 +136,7 @@ class Efl.Ui.Slider (Elm.Layout, Efl.Ui.Range, Elm.Interface.Atspi.Value.range { get; } Elm.Interface.Atspi.Value.increment { get; } Elm.Interface.Atspi_Widget_Action.elm_actions { get; } + Efl.Part.part; } events { changed; [[Called when slider changed]] diff --git a/src/lib/elementary/efl_ui_slider_internal_part.eo b/src/lib/elementary/efl_ui_slider_internal_part.eo new file mode 100644 index 0000000000..9b1a403d58 --- /dev/null +++ b/src/lib/elementary/efl_ui_slider_internal_part.eo @@ -0,0 +1,9 @@ +class Efl.Ui.Slider.Internal.Part (Elm.Layout.Internal.Part, Efl.Gfx.Size.Hint) +{ + [[Elementary slider internal part class]] + data: Elm_Part_Data; + implements { + Efl.Container.content { set; } + Efl.Gfx.Size.Hint.hint_min { set; get; } + } +} |