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
This commit is contained in:
Marcel Hollerbach 2019-07-16 13:58:42 +02:00 committed by Xavi Artigas
parent 1d90b113e0
commit 1bae8ec521
3 changed files with 49 additions and 21 deletions

View File

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

View File

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

View File

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