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
This commit is contained in:
Bowon Ryu 2019-11-19 14:04:05 +09:00 committed by WooHyun Jung
parent 2c5ea739e7
commit eb13df21d0
2 changed files with 38 additions and 12 deletions

View File

@ -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);

View File

@ -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;