xartigas pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=1bae8ec521f9e49453f51b921dbab1fe9c95fd6c

commit 1bae8ec521f9e49453f51b921dbab1fe9c95fd6c
Author: Marcel Hollerbach <m...@marcel-hollerbach.de>
Date:   Tue Jul 16 13:58:42 2019 +0200

    efl_ui_slider: change the semantical meaning of step property
    
    Summary:
    before the step property was used as a relative value. The value that
    was added in the end was (max-min)*step. Which is quite confusing given
    the fact that the other APIs in in efl_ui_range_display are also taking
    values absolut. Other implementations also do so.
    
    fix T4834
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Maniphest Tasks: T4834
    
    Differential Revision: https://phab.enlightenment.org/D9327
---
 src/bin/elementary/test_ui_slider.c       | 25 +++++----------------
 src/lib/elementary/efl_ui_slider.c        |  8 +++++--
 src/tests/elementary/efl_ui_test_slider.c | 37 +++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 21 deletions(-)

diff --git a/src/bin/elementary/test_ui_slider.c 
b/src/bin/elementary/test_ui_slider.c
index 38447efbc4..75df5f9d98 100644
--- a/src/bin/elementary/test_ui_slider.c
+++ b/src/bin/elementary/test_ui_slider.c
@@ -4,17 +4,6 @@
 #include <Efl_Ui.h>
 #include <Elementary.h>
 
-static double
-_step_size_calculate(double min, double max)
-{
-   double step = 0.0;
-   int steps = 0;
-
-   steps = max - min;
-   if (steps) step = (1.0 / steps);
-   return step;
-}
-
 static void
 _slider_changed_cb(void *data EINA_UNUSED, const Efl_Event *ev)
 {
@@ -31,7 +20,6 @@ void
 test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
    Eo *win, *bx, *hbx;
-   double step;
 
    win = efl_add_ref(EFL_UI_WIN_CLASS, NULL,
                  efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_BASIC),
@@ -67,11 +55,10 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
            efl_text_interactive_editable_set(efl_added, EINA_FALSE),
            efl_pack(bx, efl_added));
 
-   step = _step_size_calculate(0, 9);
    efl_add(EFL_UI_SLIDER_CLASS, bx,
            efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(120, 0)),
            efl_gfx_hint_align_set(efl_added, 0.5, 0.5),
-           efl_ui_range_step_set(efl_added, step),
+           efl_ui_range_step_set(efl_added, 0.1),
            efl_pack(bx, efl_added));
 
    efl_add(EFL_UI_TEXT_CLASS, bx,
@@ -82,7 +69,7 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    efl_add(EFL_UI_SLIDER_CLASS, bx,
            efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(120, 0)),
            efl_ui_range_limits_set(efl_added, 10, 145),
-           efl_ui_range_step_set(efl_added, step),
+           efl_ui_range_step_set(efl_added, 9),
            elm_object_disabled_set(efl_added, EINA_TRUE),
            efl_pack(bx, efl_added));
 
@@ -98,7 +85,7 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    efl_add(EFL_UI_SLIDER_CLASS, hbx,
            efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(0, 160)),
            efl_ui_range_limits_set(efl_added, 10, 145),
-           efl_ui_range_step_set(efl_added, step),
+           efl_ui_range_step_set(efl_added, 9),
            efl_ui_range_value_set(efl_added, 70),
            efl_ui_layout_orientation_set(efl_added, 
EFL_UI_LAYOUT_ORIENTATION_VERTICAL),
            efl_pack(hbx, efl_added));
@@ -106,7 +93,7 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    efl_add(EFL_UI_SLIDER_CLASS, hbx,
            efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(0, 160)),
            efl_ui_range_limits_set(efl_added, 10, 145),
-           efl_ui_range_step_set(efl_added, step),
+           efl_ui_range_step_set(efl_added, 9),
            efl_ui_layout_orientation_set(efl_added, 
EFL_UI_LAYOUT_ORIENTATION_VERTICAL),
            elm_object_disabled_set(efl_added, EINA_TRUE),
            efl_pack(hbx, efl_added));
@@ -115,7 +102,7 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
            efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(0, 160)),
            efl_ui_range_limits_set(efl_added, 10, 145),
            efl_ui_range_value_set(efl_added, 35),
-           efl_ui_range_step_set(efl_added, step),
+           efl_ui_range_step_set(efl_added, 9),
            efl_ui_layout_orientation_set(efl_added, 
EFL_UI_LAYOUT_ORIENTATION_VERTICAL | EFL_UI_LAYOUT_ORIENTATION_INVERTED),
            efl_pack(hbx, efl_added));
 
@@ -127,7 +114,7 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    efl_add(EFL_UI_SLIDER_CLASS, bx,
            efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(260, 0)),
            efl_ui_range_limits_set(efl_added, 0, 150),
-           efl_ui_range_step_set(efl_added, step),
+           efl_ui_range_step_set(efl_added, 9),
            efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_CHANGED, 
_slider_changed_cb, NULL),
            efl_pack(bx, efl_added));
 }
diff --git a/src/lib/elementary/efl_ui_slider.c 
b/src/lib/elementary/efl_ui_slider.c
index 2eb3f28ac7..7deda127db 100644
--- a/src/lib/elementary/efl_ui_slider.c
+++ b/src/lib/elementary/efl_ui_slider.c
@@ -205,6 +205,7 @@ _drag_up(void *data,
          const char *source EINA_UNUSED)
 {
    double step;
+   double relative_step;
 
    EFL_UI_SLIDER_DATA_GET(data, sd);
    step = sd->step;
@@ -212,12 +213,13 @@ _drag_up(void *data,
    if (efl_ui_layout_orientation_is_inverted(sd->dir)) step *= -1.0;
 
    ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
+   relative_step = step/(sd->val_max - sd->val_min);
    if (elm_widget_is_legacy(obj))
      efl_ui_drag_step_move(efl_part(wd->resize_obj, "elm.dragable.slider"),
                            step, step);
    else
      efl_ui_drag_step_move(efl_part(wd->resize_obj, "efl.dragable.slider"),
-                           step, step);
+                           relative_step, relative_step);
 }
 
 static void
@@ -227,6 +229,7 @@ _drag_down(void *data,
            const char *source EINA_UNUSED)
 {
    double step;
+   double relative_step;
 
    EFL_UI_SLIDER_DATA_GET(data, sd);
    step = -sd->step;
@@ -234,12 +237,13 @@ _drag_down(void *data,
    if (efl_ui_layout_orientation_is_inverted(sd->dir)) step *= -1.0;
 
    ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
+   relative_step = step/(sd->val_max - sd->val_min);
    if (elm_widget_is_legacy(obj))
      efl_ui_drag_step_move(efl_part(wd->resize_obj, "elm.dragable.slider"),
                            step, step);
    else
      efl_ui_drag_step_move(efl_part(wd->resize_obj, "efl.dragable.slider"),
-                           step, step);
+                           relative_step, relative_step);
 }
 
 static Eina_Bool
diff --git a/src/tests/elementary/efl_ui_test_slider.c 
b/src/tests/elementary/efl_ui_test_slider.c
index 55f5f938c2..ff820b01f5 100644
--- a/src/tests/elementary/efl_ui_test_slider.c
+++ b/src/tests/elementary/efl_ui_test_slider.c
@@ -52,7 +52,44 @@ EFL_START_TEST(efl_ui_test_slider_events)
 }
 EFL_END_TEST
 
+EFL_START_TEST(efl_ui_test_slider_step)
+{
+   Eo *slider;
+   Evas *e;
+   Eo *win = win_add();
+
+   efl_gfx_entity_size_set(win, EINA_SIZE2D(400, 100));
+   slider = efl_add(EFL_UI_SLIDER_CLASS, win,
+                efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_CHANGED, 
slider_changed, NULL),
+                efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_STEADY, 
slider_changed, NULL),
+                efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(400, 100))
+                );
+   efl_ui_range_limits_set(slider, 0, 100);
+   efl_ui_range_step_set(slider, 10);
+   efl_ui_range_value_set(slider, 20);
+
+   e = evas_object_evas_get(win);
+
+   efl_layout_signal_process(slider, EINA_TRUE);
+   get_me_to_those_events(slider);
+
+
+   int x, y, w, h;
+   int sx, sy, sw, sh;
+
+   evas_object_geometry_get(elm_object_part_content_get(slider, "efl.bar"), 
&x, &y, &w, &h);
+   evas_object_geometry_get(slider, &sx, &sy, &sw, &sh);
+   evas_event_feed_mouse_in(e, 0, NULL);
+   evas_event_feed_mouse_move(e, x + (w / 2), y + (h / 2), 0, NULL);
+   evas_event_feed_mouse_wheel(e, -1, 1, 0, NULL);
+   evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
+   efl_layout_signal_process(slider, EINA_TRUE);
+   get_me_to_those_events(slider);
+   ck_assert_int_eq(efl_ui_range_value_get(slider), 10);
+}
+EFL_END_TEST
 void efl_ui_test_slider(TCase *tc)
 {
    tcase_add_test(tc, efl_ui_test_slider_events);
+   tcase_add_test(tc, efl_ui_test_slider_step);
 }

-- 


Reply via email to