forked from enlightenment/efl
efl_ui_slider: refactor for better data flow and code readability
1. efl_ui_range_value_set only sets value 2. remove internal eo functions (such as xxx_knob, val_fetch, and val_set) 3. make access_value_and_text works correctly @ref T7893 Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de> Differential Revision: https://phab.enlightenment.org/D9720
This commit is contained in:
parent
cfc0d4866c
commit
5636bb8b0b
|
@ -16,6 +16,36 @@ _slider_changed_cb(void *data EINA_UNUSED, const Efl_Event *ev)
|
||||||
efl_ui_range_value_set(ev->object, 100);
|
efl_ui_range_value_set(ev->object, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_slider_steady_cb(void *data EINA_UNUSED, const Efl_Event *ev)
|
||||||
|
{
|
||||||
|
double val;
|
||||||
|
|
||||||
|
val = efl_ui_range_value_get(ev->object);
|
||||||
|
|
||||||
|
printf("steady callbck : val = %f\n", val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_slider_drag_start_cb(void *data EINA_UNUSED, const Efl_Event *ev)
|
||||||
|
{
|
||||||
|
double val;
|
||||||
|
|
||||||
|
val = efl_ui_range_value_get(ev->object);
|
||||||
|
|
||||||
|
printf("drag start callbck : val = %f\n", val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_slider_drag_stop_cb(void *data EINA_UNUSED, const Efl_Event *ev)
|
||||||
|
{
|
||||||
|
double val;
|
||||||
|
|
||||||
|
val = efl_ui_range_value_get(ev->object);
|
||||||
|
|
||||||
|
printf("drag stop callbck : val = %f\n", val);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
|
@ -37,6 +67,9 @@ test_ui_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
|
||||||
efl_add(EFL_UI_SLIDER_CLASS, bx,
|
efl_add(EFL_UI_SLIDER_CLASS, bx,
|
||||||
efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(160, 0)),
|
efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(160, 0)),
|
||||||
efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, 0.0),
|
efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, 0.0),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_STEADY, _slider_steady_cb, NULL),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, _slider_drag_start_cb, NULL),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, _slider_drag_stop_cb, NULL),
|
||||||
efl_pack(bx, efl_added));
|
efl_pack(bx, efl_added));
|
||||||
|
|
||||||
efl_add(EFL_UI_TEXT_CLASS, bx,
|
efl_add(EFL_UI_TEXT_CLASS, bx,
|
||||||
|
|
|
@ -52,19 +52,39 @@ static void
|
||||||
_emit_events(Eo *obj, Efl_Ui_Slider_Data *sd)
|
_emit_events(Eo *obj, Efl_Ui_Slider_Data *sd)
|
||||||
{
|
{
|
||||||
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
|
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
|
||||||
|
|
||||||
if (sd->val == sd->val_min)
|
if (sd->val == sd->val_min)
|
||||||
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MIN_REACHED, NULL);
|
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MIN_REACHED, NULL);
|
||||||
|
|
||||||
if (sd->val == sd->val_max)
|
if (sd->val == sd->val_max)
|
||||||
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MAX_REACHED, NULL);
|
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MAX_REACHED, NULL);
|
||||||
|
|
||||||
|
// emit accessibility event also if value was changed by API
|
||||||
|
if (_elm_config->atspi_mode)
|
||||||
|
efl_access_value_changed_signal_emit(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_efl_ui_slider_val_fetch(Evas_Object *obj, Efl_Ui_Slider_Data *sd, Eina_Bool user_event)
|
_user_value_update(Evas_Object *obj, double value)
|
||||||
{
|
{
|
||||||
double posx = 0.0, posy = 0.0, pos = 0.0, val;
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
||||||
|
|
||||||
|
efl_ui_range_value_set(obj, value);
|
||||||
|
|
||||||
|
ecore_timer_del(sd->delay);
|
||||||
|
sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, _delay_change, obj);
|
||||||
|
|
||||||
|
evas_object_smart_changed(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_drag_value_fetch(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
||||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
|
double posx = 0.0, posy = 0.0, pos = 0.0, val;
|
||||||
|
|
||||||
efl_ui_drag_value_get(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
efl_ui_drag_value_get(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
||||||
&posx, &posy);
|
&posx, &posy);
|
||||||
if (_is_horizontal(sd->dir)) pos = posx;
|
if (_is_horizontal(sd->dir)) pos = posx;
|
||||||
|
@ -79,36 +99,19 @@ _efl_ui_slider_val_fetch(Evas_Object *obj, Efl_Ui_Slider_Data *sd, Eina_Bool us
|
||||||
|
|
||||||
if (fabs(val - sd->val) > DBL_EPSILON)
|
if (fabs(val - sd->val) > DBL_EPSILON)
|
||||||
{
|
{
|
||||||
sd->val = val;
|
_user_value_update(obj, val);
|
||||||
if (user_event)
|
|
||||||
{
|
|
||||||
_emit_events(obj, sd);
|
|
||||||
efl_event_callback_legacy_call(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
|
|
||||||
ecore_timer_del(sd->delay);
|
|
||||||
sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, _delay_change, obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_efl_ui_slider_val_set(Evas_Object *obj, Efl_Ui_Slider_Data *sd)
|
_drag_value_update(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
||||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
double pos;
|
double pos;
|
||||||
|
|
||||||
if (sd->val_max > sd->val_min)
|
pos = (sd->val - sd->val_min) / (sd->val_max - sd->val_min);
|
||||||
{
|
|
||||||
pos = (sd->val - sd->val_min) / (sd->val_max - sd->val_min);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pos = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pos < 0.0) pos = 0.0;
|
|
||||||
else if (pos > 1.0)
|
|
||||||
pos = 1.0;
|
|
||||||
|
|
||||||
if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
{
|
{
|
||||||
|
@ -118,35 +121,6 @@ _efl_ui_slider_val_set(Evas_Object *obj, Efl_Ui_Slider_Data *sd)
|
||||||
efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
||||||
pos, pos);
|
pos, pos);
|
||||||
|
|
||||||
// emit accessibility event also if value was changed by API
|
|
||||||
if (_elm_config->atspi_mode)
|
|
||||||
efl_access_value_changed_signal_emit(obj);
|
|
||||||
|
|
||||||
evas_object_smart_changed(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_efl_ui_slider_down_knob(Evas_Object *obj, Efl_Ui_Slider_Data *sd EINA_UNUSED, double button_x, double button_y)
|
|
||||||
{
|
|
||||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
|
||||||
|
|
||||||
efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
|
||||||
button_x, button_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_efl_ui_slider_move_knob(Evas_Object *obj, Efl_Ui_Slider_Data *sd EINA_UNUSED, double button_x, double button_y)
|
|
||||||
{
|
|
||||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
|
||||||
|
|
||||||
efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
|
||||||
button_x, button_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_slider_update(Evas_Object *obj, Eina_Bool user_event)
|
|
||||||
{
|
|
||||||
efl_ui_slider_val_fetch(obj, user_event);
|
|
||||||
evas_object_smart_changed(obj);
|
evas_object_smart_changed(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +130,7 @@ _drag(void *data,
|
||||||
const char *emission EINA_UNUSED,
|
const char *emission EINA_UNUSED,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -167,8 +141,8 @@ _drag_start(void *data,
|
||||||
{
|
{
|
||||||
if (!efl_ui_focus_object_focus_get(data))
|
if (!efl_ui_focus_object_focus_get(data))
|
||||||
elm_object_focus_set(data, EINA_TRUE);
|
elm_object_focus_set(data, EINA_TRUE);
|
||||||
_slider_update(data, EINA_TRUE);
|
|
||||||
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
||||||
|
_drag_value_fetch(data);
|
||||||
elm_widget_scroll_freeze_push(data);
|
elm_widget_scroll_freeze_push(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +152,7 @@ _drag_stop(void *data,
|
||||||
const char *emission EINA_UNUSED,
|
const char *emission EINA_UNUSED,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(data);
|
||||||
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
||||||
elm_widget_scroll_freeze_pop(data);
|
elm_widget_scroll_freeze_pop(data);
|
||||||
}
|
}
|
||||||
|
@ -189,51 +163,47 @@ _drag_step(void *data,
|
||||||
const char *emission EINA_UNUSED,
|
const char *emission EINA_UNUSED,
|
||||||
const char *source EINA_UNUSED)
|
const char *source EINA_UNUSED)
|
||||||
{
|
{
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_drag_up(void *data,
|
_drag_up(Evas_Object *obj)
|
||||||
Evas_Object *obj EINA_UNUSED,
|
|
||||||
const char *emission EINA_UNUSED,
|
|
||||||
const char *source EINA_UNUSED)
|
|
||||||
{
|
{
|
||||||
double step;
|
double step;
|
||||||
double relative_step;
|
double relative_step;
|
||||||
|
|
||||||
EFL_UI_SLIDER_DATA_GET(data, sd);
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
step = sd->step;
|
step = sd->step;
|
||||||
|
|
||||||
if (efl_ui_layout_orientation_is_inverted(sd->dir)) step *= -1.0;
|
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);
|
relative_step = step/(sd->val_max - sd->val_min);
|
||||||
|
|
||||||
efl_ui_drag_step_move(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
efl_ui_drag_step_move(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
||||||
relative_step, relative_step);
|
relative_step, relative_step);
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_drag_down(void *data,
|
_drag_down(Evas_Object *obj)
|
||||||
Evas_Object *obj EINA_UNUSED,
|
|
||||||
const char *emission EINA_UNUSED,
|
|
||||||
const char *source EINA_UNUSED)
|
|
||||||
{
|
{
|
||||||
double step;
|
double step;
|
||||||
double relative_step;
|
double relative_step;
|
||||||
|
|
||||||
EFL_UI_SLIDER_DATA_GET(data, sd);
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
step = -sd->step;
|
step = -sd->step;
|
||||||
|
|
||||||
if (efl_ui_layout_orientation_is_inverted(sd->dir)) step *= -1.0;
|
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);
|
relative_step = step/(sd->val_max - sd->val_min);
|
||||||
|
|
||||||
efl_ui_drag_step_move(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
efl_ui_drag_step_move(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
||||||
relative_step, relative_step);
|
relative_step, relative_step);
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -250,32 +220,32 @@ _key_action_drag(Evas_Object *obj, const char *params)
|
||||||
if (!_is_horizontal(sd->dir))
|
if (!_is_horizontal(sd->dir))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
_drag_down(obj, NULL, NULL, NULL);
|
_drag_down(obj);
|
||||||
else _drag_up(obj, NULL, NULL, NULL);
|
else _drag_up(obj);
|
||||||
}
|
}
|
||||||
else if (!strcmp(dir, "right"))
|
else if (!strcmp(dir, "right"))
|
||||||
{
|
{
|
||||||
if (!_is_horizontal(sd->dir))
|
if (!_is_horizontal(sd->dir))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
_drag_up(obj, NULL, NULL, NULL);
|
_drag_up(obj);
|
||||||
else _drag_down(obj, NULL, NULL, NULL);
|
else _drag_down(obj);
|
||||||
}
|
}
|
||||||
else if (!strcmp(dir, "up"))
|
else if (!strcmp(dir, "up"))
|
||||||
{
|
{
|
||||||
if (_is_horizontal(sd->dir))
|
if (_is_horizontal(sd->dir))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
if (efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
_drag_up(obj, NULL, NULL, NULL);
|
_drag_up(obj);
|
||||||
else _drag_down(obj, NULL, NULL, NULL);
|
else _drag_down(obj);
|
||||||
}
|
}
|
||||||
else if (!strcmp(dir, "down"))
|
else if (!strcmp(dir, "down"))
|
||||||
{
|
{
|
||||||
if (_is_horizontal(sd->dir))
|
if (_is_horizontal(sd->dir))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
if (efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
_drag_down(obj, NULL, NULL, NULL);
|
_drag_down(obj);
|
||||||
else _drag_up(obj, NULL, NULL, NULL);
|
else _drag_up(obj);
|
||||||
}
|
}
|
||||||
else return EINA_FALSE;
|
else return EINA_FALSE;
|
||||||
|
|
||||||
|
@ -306,22 +276,22 @@ _efl_ui_slider_efl_ui_widget_widget_input_event_handler(Eo *obj, Efl_Ui_Slider_D
|
||||||
if (efl_input_pointer_wheel_delta_get(ev) < 0)
|
if (efl_input_pointer_wheel_delta_get(ev) < 0)
|
||||||
{
|
{
|
||||||
if (_is_horizontal(sd->dir))
|
if (_is_horizontal(sd->dir))
|
||||||
_drag_up(obj, NULL, NULL, NULL);
|
_drag_up(obj);
|
||||||
else
|
else
|
||||||
_drag_down(obj, NULL, NULL, NULL);
|
_drag_down(obj);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_is_horizontal(sd->dir))
|
if (_is_horizontal(sd->dir))
|
||||||
_drag_down(obj, NULL, NULL, NULL);
|
_drag_down(obj);
|
||||||
else
|
else
|
||||||
_drag_up(obj, NULL, NULL, NULL);
|
_drag_up(obj);
|
||||||
}
|
}
|
||||||
efl_input_processed_set(ev, EINA_TRUE);
|
efl_input_processed_set(ev, EINA_TRUE);
|
||||||
}
|
}
|
||||||
else return EINA_FALSE;
|
else return EINA_FALSE;
|
||||||
|
|
||||||
_slider_update(obj, EINA_TRUE);
|
_drag_value_fetch(obj);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -336,18 +306,18 @@ _efl_ui_slider_efl_ui_widget_on_access_activate(Eo *obj, Efl_Ui_Slider_Data *sd,
|
||||||
(act == EFL_UI_ACTIVATE_RIGHT))
|
(act == EFL_UI_ACTIVATE_RIGHT))
|
||||||
{
|
{
|
||||||
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
_drag_up(obj, NULL, NULL, NULL);
|
_drag_up(obj);
|
||||||
else _drag_down(obj, NULL, NULL, NULL);
|
else _drag_down(obj);
|
||||||
}
|
}
|
||||||
else if ((act == EFL_UI_ACTIVATE_DOWN) ||
|
else if ((act == EFL_UI_ACTIVATE_DOWN) ||
|
||||||
(act == EFL_UI_ACTIVATE_LEFT))
|
(act == EFL_UI_ACTIVATE_LEFT))
|
||||||
{
|
{
|
||||||
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
if (!efl_ui_layout_orientation_is_inverted(sd->dir))
|
||||||
_drag_down(obj, NULL, NULL, NULL);
|
_drag_down(obj);
|
||||||
else _drag_up(obj, NULL, NULL, NULL);
|
else _drag_up(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
_slider_update(obj, EINA_TRUE);
|
_drag_value_fetch(obj);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -426,7 +396,7 @@ _efl_ui_slider_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Slider_Data *sd)
|
||||||
else
|
else
|
||||||
efl_layout_signal_emit(obj, "efl,state,inverted,off", "efl");
|
efl_layout_signal_emit(obj, "efl,state,inverted,off", "efl");
|
||||||
|
|
||||||
efl_ui_slider_val_set(obj);
|
_drag_value_update(obj);
|
||||||
|
|
||||||
efl_layout_signal_process(wd->resize_obj, EINA_FALSE);
|
efl_layout_signal_process(wd->resize_obj, EINA_FALSE);
|
||||||
evas_object_smart_changed(obj);
|
evas_object_smart_changed(obj);
|
||||||
|
@ -441,6 +411,7 @@ _spacer_down_cb(void *data,
|
||||||
void *event_info)
|
void *event_info)
|
||||||
{
|
{
|
||||||
EFL_UI_SLIDER_DATA_GET(data, sd);
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
|
||||||
|
|
||||||
Evas_Event_Mouse_Down *ev = event_info;
|
Evas_Event_Mouse_Down *ev = event_info;
|
||||||
Eina_Rect sr;
|
Eina_Rect sr;
|
||||||
|
@ -463,12 +434,13 @@ _spacer_down_cb(void *data,
|
||||||
if (button_y < 0) button_y = 0;
|
if (button_y < 0) button_y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
efl_ui_slider_down_knob(data, button_x, button_y);
|
efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
||||||
|
button_x, button_y);
|
||||||
|
|
||||||
if (!efl_ui_focus_object_focus_get(data))
|
if (!efl_ui_focus_object_focus_get(data))
|
||||||
elm_object_focus_set(data, EINA_TRUE);
|
elm_object_focus_set(data, EINA_TRUE);
|
||||||
_slider_update(data, EINA_TRUE);
|
|
||||||
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
||||||
|
_drag_value_fetch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -478,6 +450,7 @@ _spacer_move_cb(void *data,
|
||||||
void *event_info)
|
void *event_info)
|
||||||
{
|
{
|
||||||
EFL_UI_SLIDER_DATA_GET(data, sd);
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
|
||||||
|
|
||||||
Eina_Rect sr;
|
Eina_Rect sr;
|
||||||
double button_x = 0.0, button_y = 0.0;
|
double button_x = 0.0, button_y = 0.0;
|
||||||
|
@ -504,7 +477,7 @@ _spacer_move_cb(void *data,
|
||||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
||||||
{
|
{
|
||||||
if (sd->spacer_down) sd->spacer_down = EINA_FALSE;
|
if (sd->spacer_down) sd->spacer_down = EINA_FALSE;
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(data);
|
||||||
efl_event_callback_call
|
efl_event_callback_call
|
||||||
(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
||||||
if (sd->frozen)
|
if (sd->frozen)
|
||||||
|
@ -527,8 +500,9 @@ _spacer_move_cb(void *data,
|
||||||
if (button_y < 0) button_y = 0;
|
if (button_y < 0) button_y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
efl_ui_slider_move_knob(data, button_x, button_y);
|
efl_ui_drag_value_set(efl_part(wd->resize_obj, "efl.dragable.slider"),
|
||||||
_slider_update(data, EINA_TRUE);
|
button_x, button_y);
|
||||||
|
_drag_value_fetch(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,7 +517,7 @@ _spacer_up_cb(void *data,
|
||||||
if (!sd->spacer_down) return;
|
if (!sd->spacer_down) return;
|
||||||
if (sd->spacer_down) sd->spacer_down = EINA_FALSE;
|
if (sd->spacer_down) sd->spacer_down = EINA_FALSE;
|
||||||
|
|
||||||
_slider_update(data, EINA_TRUE);
|
_drag_value_fetch(data);
|
||||||
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
efl_event_callback_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
||||||
|
|
||||||
if (sd->frozen)
|
if (sd->frozen)
|
||||||
|
@ -691,6 +665,8 @@ _efl_ui_slider_efl_ui_layout_orientable_orientation_get(const Eo *obj EINA_UNUSE
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_efl_ui_slider_efl_ui_range_display_range_limits_set(Eo *obj, Efl_Ui_Slider_Data *sd, double min, double max)
|
_efl_ui_slider_efl_ui_range_display_range_limits_set(Eo *obj, Efl_Ui_Slider_Data *sd, double min, double max)
|
||||||
{
|
{
|
||||||
|
double val;
|
||||||
|
|
||||||
if (max < min)
|
if (max < min)
|
||||||
{
|
{
|
||||||
ERR("Wrong params. min(%lf) is greater than max(%lf).", min, max);
|
ERR("Wrong params. min(%lf) is greater than max(%lf).", min, max);
|
||||||
|
@ -702,12 +678,15 @@ _efl_ui_slider_efl_ui_range_display_range_limits_set(Eo *obj, Efl_Ui_Slider_Data
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((EINA_DBL_EQ(sd->val_min, min)) && (EINA_DBL_EQ(sd->val_max, max))) return;
|
if ((EINA_DBL_EQ(sd->val_min, min)) && (EINA_DBL_EQ(sd->val_max, max))) return;
|
||||||
|
|
||||||
sd->val_min = min;
|
sd->val_min = min;
|
||||||
sd->val_max = max;
|
sd->val_max = max;
|
||||||
if (sd->val < sd->val_min) sd->val = sd->val_min;
|
|
||||||
if (sd->val > sd->val_max) sd->val = sd->val_max;
|
|
||||||
|
|
||||||
efl_ui_slider_val_set(obj);
|
val = sd->val;
|
||||||
|
if (val < sd->val_min) val = sd->val_min;
|
||||||
|
if (val > sd->val_max) val = sd->val_max;
|
||||||
|
|
||||||
|
efl_ui_range_value_set(obj, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
|
@ -734,11 +713,8 @@ _efl_ui_slider_efl_ui_range_display_range_value_set(Eo *obj, Efl_Ui_Slider_Data
|
||||||
if (EINA_DBL_EQ(val, sd->val)) return;
|
if (EINA_DBL_EQ(val, sd->val)) return;
|
||||||
sd->val = val;
|
sd->val = val;
|
||||||
|
|
||||||
if (sd->val < sd->val_min) sd->val = sd->val_min;
|
_drag_value_update(obj);
|
||||||
if (sd->val > sd->val_max) sd->val = sd->val_max;
|
|
||||||
|
|
||||||
_emit_events(obj, sd);
|
_emit_events(obj, sd);
|
||||||
efl_ui_slider_val_set(obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static double
|
EOLIAN static double
|
||||||
|
@ -789,16 +765,16 @@ _efl_ui_slider_efl_access_value_value_and_text_get(const Eo *obj EINA_UNUSED, Ef
|
||||||
EOLIAN static Eina_Bool
|
EOLIAN static Eina_Bool
|
||||||
_efl_ui_slider_efl_access_value_value_and_text_set(Eo *obj, Efl_Ui_Slider_Data *sd, double value, const char *text EINA_UNUSED)
|
_efl_ui_slider_efl_access_value_value_and_text_set(Eo *obj, Efl_Ui_Slider_Data *sd, double value, const char *text EINA_UNUSED)
|
||||||
{
|
{
|
||||||
double oldval = sd->val;
|
|
||||||
|
|
||||||
if (value < sd->val_min) value = sd->val_min;
|
if (value < sd->val_min) value = sd->val_min;
|
||||||
if (value > sd->val_max) value = sd->val_max;
|
if (value > sd->val_max) value = sd->val_max;
|
||||||
|
|
||||||
efl_event_callback_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
efl_event_callback_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
||||||
sd->val = value;
|
|
||||||
efl_ui_slider_val_set(obj);
|
if (fabs(value - sd->val) > DBL_EPSILON)
|
||||||
sd->val = oldval;
|
{
|
||||||
_slider_update(obj, EINA_TRUE);
|
_user_value_update(obj, value);
|
||||||
|
}
|
||||||
|
|
||||||
efl_event_callback_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
efl_event_callback_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
@ -832,17 +808,5 @@ _efl_ui_slider_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSE
|
||||||
}
|
}
|
||||||
|
|
||||||
// A11Y Accessibility - END
|
// A11Y Accessibility - END
|
||||||
/* Internal EO APIs and hidden overrides */
|
|
||||||
|
|
||||||
EFL_VOID_FUNC_BODYV(efl_ui_slider_val_fetch, EFL_FUNC_CALL(user_event), Eina_Bool user_event)
|
|
||||||
EFL_VOID_FUNC_BODY(efl_ui_slider_val_set)
|
|
||||||
EFL_VOID_FUNC_BODYV(efl_ui_slider_down_knob, EFL_FUNC_CALL(button_x, button_y), double button_x, double button_y)
|
|
||||||
EFL_VOID_FUNC_BODYV(efl_ui_slider_move_knob, EFL_FUNC_CALL(button_x, button_y), double button_x, double button_y)
|
|
||||||
|
|
||||||
#define EFL_UI_SLIDER_EXTRA_OPS \
|
|
||||||
EFL_UI_SLIDER_VAL_FETCH_OPS(efl_ui_slider), \
|
|
||||||
EFL_UI_SLIDER_VAL_SET_OPS(efl_ui_slider), \
|
|
||||||
EFL_UI_SLIDER_DOWN_KNOB_OPS(efl_ui_slider), \
|
|
||||||
EFL_UI_SLIDER_MOVE_KNOB_OPS(efl_ui_slider), \
|
|
||||||
|
|
||||||
#include "efl_ui_slider.eo.c"
|
#include "efl_ui_slider.eo.c"
|
||||||
|
|
|
@ -22,18 +22,6 @@ struct _Efl_Ui_Slider_Data
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
# define EFL_UI_SLIDER_VAL_FETCH_OPS(_pfx) \
|
|
||||||
EFL_OBJECT_OP_FUNC(efl_ui_slider_val_fetch, _##_pfx##_val_fetch)
|
|
||||||
|
|
||||||
# define EFL_UI_SLIDER_VAL_SET_OPS(_pfx) \
|
|
||||||
EFL_OBJECT_OP_FUNC(efl_ui_slider_val_set, _##_pfx##_val_set)
|
|
||||||
|
|
||||||
# define EFL_UI_SLIDER_DOWN_KNOB_OPS(_pfx) \
|
|
||||||
EFL_OBJECT_OP_FUNC(efl_ui_slider_down_knob, _##_pfx##_down_knob)
|
|
||||||
|
|
||||||
# define EFL_UI_SLIDER_MOVE_KNOB_OPS(_pfx) \
|
|
||||||
EFL_OBJECT_OP_FUNC(efl_ui_slider_move_knob, _##_pfx##_move_knob)
|
|
||||||
|
|
||||||
#define EFL_UI_SLIDER_DATA_GET(o, sd) \
|
#define EFL_UI_SLIDER_DATA_GET(o, sd) \
|
||||||
Efl_Ui_Slider_Data * sd = efl_data_scope_get(o, EFL_UI_SLIDER_CLASS)
|
Efl_Ui_Slider_Data * sd = efl_data_scope_get(o, EFL_UI_SLIDER_CLASS)
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,12 @@ slider_changed(void *data EINA_UNUSED, const Efl_Event *ev)
|
||||||
{
|
{
|
||||||
event_counter++;
|
event_counter++;
|
||||||
if (event_counter == 1)
|
if (event_counter == 1)
|
||||||
efl_event_callback_del(ev->object, EFL_UI_RANGE_EVENT_CHANGED, slider_changed, NULL);
|
efl_event_callback_del(ev->object, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, slider_changed, NULL);
|
||||||
else if (event_counter == 2)
|
else if (event_counter == 2)
|
||||||
|
efl_event_callback_del(ev->object, EFL_UI_RANGE_EVENT_CHANGED, slider_changed, NULL);
|
||||||
|
else if (event_counter == 3)
|
||||||
|
efl_event_callback_del(ev->object, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, slider_changed, NULL);
|
||||||
|
else if (event_counter == 4)
|
||||||
ecore_main_loop_quit();
|
ecore_main_loop_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +32,8 @@ EFL_START_TEST(efl_ui_test_slider_events)
|
||||||
slider = efl_add(EFL_UI_SLIDER_CLASS, win,
|
slider = efl_add(EFL_UI_SLIDER_CLASS, win,
|
||||||
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, slider_changed, NULL),
|
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, slider_changed, NULL),
|
||||||
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_STEADY, slider_changed, NULL),
|
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_STEADY, slider_changed, NULL),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, slider_changed, NULL),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, slider_changed, NULL),
|
||||||
efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(400, 100))
|
efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(400, 100))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -48,7 +54,7 @@ EFL_START_TEST(efl_ui_test_slider_events)
|
||||||
evas_event_feed_mouse_move(e, sx + (sw / 2), sy + (sh / 2), 0, NULL);
|
evas_event_feed_mouse_move(e, sx + (sw / 2), sy + (sh / 2), 0, NULL);
|
||||||
evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
|
evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
|
||||||
ecore_main_loop_begin();
|
ecore_main_loop_begin();
|
||||||
ck_assert_int_eq(event_counter, 2);
|
ck_assert_int_eq(event_counter, 4);
|
||||||
}
|
}
|
||||||
EFL_END_TEST
|
EFL_END_TEST
|
||||||
|
|
||||||
|
@ -62,6 +68,8 @@ EFL_START_TEST(efl_ui_test_slider_step)
|
||||||
slider = efl_add(EFL_UI_SLIDER_CLASS, win,
|
slider = efl_add(EFL_UI_SLIDER_CLASS, win,
|
||||||
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, slider_changed, NULL),
|
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, slider_changed, NULL),
|
||||||
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_STEADY, slider_changed, NULL),
|
efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_STEADY, slider_changed, NULL),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, slider_changed, NULL),
|
||||||
|
efl_event_callback_add(efl_added, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, slider_changed, NULL),
|
||||||
efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(400, 100))
|
efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(400, 100))
|
||||||
);
|
);
|
||||||
efl_ui_range_limits_set(slider, 0, 100);
|
efl_ui_range_limits_set(slider, 0, 100);
|
||||||
|
|
Loading…
Reference in New Issue