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 #include -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); }