From eb13df21d0e9f57e91d1c7cea862897bf06e3c20 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Tue, 19 Nov 2019 14:04:05 +0900 Subject: [PATCH] slider: fix behavior of slider when mirrored Summary: The vertical slider(!horizontal) should not be inverted when mirrored. This patch fixes and cleans up this. Test Plan: elementary_test -to slider elementary_test -to efl.ui.slider UI-Mirroring on/off and observe vertical slides. Reviewers: woohyun, cedric, bu5hm4n Reviewed By: woohyun Subscribers: #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10693 --- src/lib/elementary/efl_ui_slider.c | 29 ++++++++++++++++++++--------- src/lib/elementary/elm_slider.c | 21 ++++++++++++++++++--- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/lib/elementary/efl_ui_slider.c b/src/lib/elementary/efl_ui_slider.c index 219a15bc94..920dcfada2 100644 --- a/src/lib/elementary/efl_ui_slider.c +++ b/src/lib/elementary/efl_ui_slider.c @@ -48,6 +48,21 @@ _is_horizontal(Efl_Ui_Layout_Orientation dir) return efl_ui_layout_orientation_is_horizontal(dir, EINA_TRUE); } +static Eina_Bool +_is_inverted(Eo *obj, Efl_Ui_Slider_Data *sd) +{ + Eina_Bool mirrored, inverted; + + mirrored = efl_ui_mirrored_get(obj); + inverted = efl_ui_layout_orientation_is_inverted(sd->dir); + + if ((_is_horizontal(sd->dir) && (mirrored ^ inverted)) || + (!_is_horizontal(sd->dir) && inverted)) + return EINA_TRUE; + else + return EINA_FALSE; +} + static void _emit_events(Eo *obj, Efl_Ui_Slider_Data *sd) { @@ -84,7 +99,7 @@ _step_value_update(Evas_Object *obj, double step) EFL_UI_SLIDER_DATA_GET(obj, sd); - if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) + if (_is_inverted(obj, sd)) step *= -1.0; value = CLAMP(sd->val + step, sd->val_min, sd->val_max); @@ -105,10 +120,8 @@ _drag_value_fetch(Evas_Object *obj) if (_is_horizontal(sd->dir)) pos = posx; else pos = posy; - if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) - { - pos = 1.0 - pos; - } + if (_is_inverted(obj, sd)) + pos = 1.0 - pos; val = (pos * (sd->val_max - sd->val_min)) + sd->val_min; @@ -139,10 +152,8 @@ _drag_value_update(Evas_Object *obj) pos = (sd->val - sd->val_min) / (sd->val_max - sd->val_min); - if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) - { - pos = 1.0 - pos; - } + if (_is_inverted(obj, sd)) + pos = 1.0 - pos; efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.draggable.slider"), pos, pos); diff --git a/src/lib/elementary/elm_slider.c b/src/lib/elementary/elm_slider.c index c426a45aeb..2c6c26b84d 100644 --- a/src/lib/elementary/elm_slider.c +++ b/src/lib/elementary/elm_slider.c @@ -78,6 +78,21 @@ _is_horizontal(Efl_Ui_Layout_Orientation dir) return efl_ui_layout_orientation_is_horizontal(dir, EINA_TRUE); } +static Eina_Bool +_is_inverted(Eo *obj, Elm_Slider_Data *sd) +{ + Eina_Bool mirrored, inverted; + + mirrored = efl_ui_mirrored_get(obj); + inverted = efl_ui_layout_orientation_is_inverted(sd->dir); + + if ((_is_horizontal(sd->dir) && (mirrored ^ inverted)) || + (!_is_horizontal(sd->dir) && inverted)) + return EINA_TRUE; + else + return EINA_FALSE; +} + static void _units_set(Evas_Object *obj) { @@ -315,7 +330,7 @@ _val_set(Evas_Object *obj) else if (pos2 > 1.0) pos2 = 1.0; - if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) + if (_is_inverted(obj, sd)) { pos = 1.0 - pos; pos2 = 1.0 - pos2; @@ -360,7 +375,7 @@ _step_value_update(Evas_Object *obj, double step) ELM_SLIDER_DATA_GET(obj, sd); - if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) + if (_is_inverted(obj, sd)) step *= -1.0; absolute_step = step * (sd->val_max - sd->val_min); @@ -392,7 +407,7 @@ _val_fetch(Evas_Object *obj, Eina_Bool user_event) else pos2 = posy2; } - if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) + if (_is_inverted(obj, sd)) { pos = 1.0 - pos; pos2 = 1.0 - pos2;