forked from enlightenment/efl
elm_slider: Step set/get API additions.
Issue: As step size was hard coded in the widget, when slider indicator is dragged using a key event or during accessibility the value was not exactly incremented/decremented instead same value was shown more than1 time/values were skipped. Solution: Two APIs added which will set/get step size. Reviewer: SeoZ Reviewer Comment: This is a manual merge of D293 due to arc issue on Shilpa. I modified some codes from her original code. She'll use arc next time. fixed documentation fixed typos. fixed indentation used macro added some guide codes. removed unnecessary empty line. updated NEWS and ChangeLog.
This commit is contained in:
parent
256a4c4524
commit
76f7c29631
|
@ -1731,3 +1731,7 @@
|
|||
2013-10-30 Daniel Juyung Seo (SeoZ)
|
||||
|
||||
* conform: Added "virtualkeypad,size,changed" callback on virtualkeypad min size change.
|
||||
|
||||
2013-10-30 Shilpa Onkar Singh
|
||||
|
||||
* slider: Added elm_slider_step_get(), elm_slider_step_set().
|
||||
|
|
|
@ -102,6 +102,7 @@ Additions:
|
|||
* Add signals "spinner,drag,start" and "spinner,drag,stop" to the spinner widget.
|
||||
* Add support for "clicked" callback on Return/space/KP_Enter key press for image.
|
||||
* Add "virtualkeypad,size,changed" callback on virtualkeypad min size change for conformant.
|
||||
* Add elm_slider_step_get(), elm_slider_step_set() for slider.
|
||||
|
||||
Improvements:
|
||||
|
||||
|
|
|
@ -48,10 +48,22 @@ _bt_m1(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|||
elm_slider_value_set(data, elm_slider_value_get(data) - 0.1);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void
|
||||
test_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *win, *fr, *bx, *sl, *ic, *sl1, *bx2, *bt;
|
||||
double step;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
win = elm_win_util_standard_add("slider", "Slider");
|
||||
|
@ -88,6 +100,19 @@ test_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in
|
|||
elm_box_pack_end(bx, sl);
|
||||
evas_object_show(sl);
|
||||
|
||||
sl = elm_slider_add(bx);
|
||||
elm_slider_unit_format_set(sl, "%1.0f units");
|
||||
elm_slider_indicator_format_set(sl, "%1.0f");
|
||||
elm_slider_span_size_set(sl, 120);
|
||||
elm_slider_min_max_set(sl, 0, 9);
|
||||
elm_object_text_set(sl, "Manual step");
|
||||
step = _step_size_calculate(0, 9);
|
||||
elm_slider_step_set(sl, step);
|
||||
evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
|
||||
evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0);
|
||||
elm_box_pack_end(bx, sl);
|
||||
evas_object_show(sl);
|
||||
|
||||
// normal horizontal slider
|
||||
ic = elm_icon_add(bx);
|
||||
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
|
||||
|
|
|
@ -14,6 +14,7 @@ EAPI Eo_Op ELM_OBJ_SLIDER_BASE_ID = EO_NOOP;
|
|||
|
||||
#define MY_CLASS_NAME "elm_slider"
|
||||
#define SLIDER_DELAY_CHANGED_INTERVAL 0.2
|
||||
#define SLIDER_STEP 0.05
|
||||
|
||||
static const Elm_Layout_Part_Alias_Description _content_aliases[] =
|
||||
{
|
||||
|
@ -260,7 +261,7 @@ _drag_up(void *data,
|
|||
double step;
|
||||
|
||||
ELM_SLIDER_DATA_GET(data, sd);
|
||||
step = 0.05;
|
||||
step = sd->step;
|
||||
|
||||
if (sd->inverted) step *= -1.0;
|
||||
|
||||
|
@ -278,7 +279,7 @@ _drag_down(void *data,
|
|||
double step;
|
||||
|
||||
ELM_SLIDER_DATA_GET(data, sd);
|
||||
step = -0.05;
|
||||
step = -sd->step;
|
||||
|
||||
if (sd->inverted) step *= -1.0;
|
||||
|
||||
|
@ -821,6 +822,7 @@ _elm_slider_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
priv->horizontal = EINA_TRUE;
|
||||
priv->indicator_show = EINA_TRUE;
|
||||
priv->val_max = 1.0;
|
||||
priv->step = SLIDER_STEP;
|
||||
|
||||
if (!elm_layout_theme_set
|
||||
(obj, "slider", "horizontal", elm_widget_style_get(obj)))
|
||||
|
@ -1343,6 +1345,43 @@ _elm_slider_indicator_show_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|||
*ret = sd->indicator_show;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_step_set(Evas_Object *obj, double step)
|
||||
{
|
||||
ELM_SLIDER_CHECK(obj);
|
||||
eo_do(obj, elm_obj_slider_step_set(step));
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_slider_step_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
double step = va_arg(*list, double);
|
||||
Elm_Slider_Smart_Data *sd = _pd;
|
||||
if (sd->step == step) return;
|
||||
|
||||
if (step < 0.0) step = 0.0;
|
||||
else if (step > 1.0) step = 1.0;
|
||||
|
||||
sd->step = step;
|
||||
}
|
||||
|
||||
EAPI double
|
||||
elm_slider_step_get(const Evas_Object *obj)
|
||||
{
|
||||
ELM_SLIDER_CHECK(obj) 0.0;
|
||||
double ret;
|
||||
eo_do((Eo *) obj, elm_obj_slider_step_get(&ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_slider_step_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
double *ret = va_arg(*list, double *);
|
||||
Elm_Slider_Smart_Data *sd = _pd;
|
||||
*ret = sd->step;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_slider_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
||||
{
|
||||
|
@ -1395,6 +1434,8 @@ _class_constructor(Eo_Class *klass)
|
|||
EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_UNITS_FORMAT_FUNCTION_SET), _elm_slider_units_format_function_set),
|
||||
EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_SET), _elm_slider_indicator_show_set),
|
||||
EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET), _elm_slider_indicator_show_get),
|
||||
EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_SET), _elm_slider_step_set),
|
||||
EO_OP_FUNC(ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_GET), _elm_slider_step_get),
|
||||
EO_OP_FUNC_SENTINEL
|
||||
};
|
||||
eo_class_funcs_set(klass, func_desc);
|
||||
|
@ -1421,6 +1462,8 @@ static const Eo_Op_Description op_desc[] = {
|
|||
EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_UNITS_FORMAT_FUNCTION_SET, "Set the format function pointer for the units label."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_SET, "Set whether to enlarge slider indicator (augmented knob) or not."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET, "Get whether a given slider widget's enlarging indicator or not."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_STEP_SET, "Set the draggable's step size."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_SLIDER_SUB_ID_STEP_GET, "Get the draggable's step size."),
|
||||
EO_OP_DESCRIPTION_SENTINEL
|
||||
};
|
||||
static const Eo_Class_Description class_desc = {
|
||||
|
|
|
@ -27,6 +27,8 @@ enum
|
|||
ELM_OBJ_SLIDER_SUB_ID_UNITS_FORMAT_FUNCTION_SET,
|
||||
ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_SET,
|
||||
ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET,
|
||||
ELM_OBJ_SLIDER_SUB_ID_STEP_SET,
|
||||
ELM_OBJ_SLIDER_SUB_ID_STEP_GET,
|
||||
ELM_OBJ_SLIDER_SUB_ID_LAST
|
||||
};
|
||||
|
||||
|
@ -289,3 +291,38 @@ enum
|
|||
* @ingroup Slider
|
||||
*/
|
||||
#define elm_obj_slider_indicator_show_get(ret) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_INDICATOR_SHOW_GET), EO_TYPECHECK(Eina_Bool *, ret)
|
||||
|
||||
/**
|
||||
* @def elm_obj_slider_step_set
|
||||
* @since 1.8
|
||||
*
|
||||
* Set the step by which slider indicator will move.
|
||||
*
|
||||
* This value is used when draggable object is moved automatically i.e., in case
|
||||
* of key event when up/down/left/right key is pressed or in case when
|
||||
* accessibility is set and flick event is used to inc/dec slider values.
|
||||
* By default step value is equal to 0.05.
|
||||
*
|
||||
* @param[in] step
|
||||
*
|
||||
* @see elm_slider_step_set
|
||||
*
|
||||
* @ingroup Slider
|
||||
*/
|
||||
|
||||
#define elm_obj_slider_step_set(step) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_SET), EO_TYPECHECK(double, step)
|
||||
|
||||
|
||||
/**
|
||||
* @def elm_obj_slider_step_get
|
||||
* @since 1.8
|
||||
*
|
||||
* Get the step by which slider indicator moves.
|
||||
*
|
||||
* @param[out] ret
|
||||
*
|
||||
* @see elm_slider_step_get
|
||||
*
|
||||
* @ingroup Slider
|
||||
*/
|
||||
#define elm_obj_slider_step_get(ret) ELM_OBJ_SLIDER_ID(ELM_OBJ_SLIDER_SUB_ID_STEP_GET), EO_TYPECHECK(double *, ret)
|
||||
|
|
|
@ -328,3 +328,32 @@ EAPI void elm_slider_indicator_show_set(Evas_Object *obj
|
|||
* @ingroup Slider
|
||||
*/
|
||||
EAPI Eina_Bool elm_slider_indicator_show_get(const Evas_Object *obj);
|
||||
|
||||
/**
|
||||
* Set the step by which slider indicator will move.
|
||||
*
|
||||
* @param obj The slider object.
|
||||
* @param step The step value.
|
||||
*
|
||||
* This value is used when draggable object is moved automatically i.e., in case
|
||||
* of key event when up/down/left/right key is pressed or in case when
|
||||
* accessibility is set and flick event is used to inc/dec slider values.
|
||||
* By default step value is equal to 0.05.
|
||||
*
|
||||
* @see elm_slider_step_get() for more details.
|
||||
*
|
||||
* @ingroup Slider
|
||||
*/
|
||||
EAPI void elm_slider_step_set(Evas_Object *obj, double step);
|
||||
|
||||
/**
|
||||
* Get the step by which slider indicator moves.
|
||||
*
|
||||
* @param obj The slider object.
|
||||
* @return The step value.
|
||||
*
|
||||
* @see elm_slider_step_set() for more details.
|
||||
*
|
||||
* @ingroup Slider
|
||||
*/
|
||||
EAPI double elm_slider_step_get(const Evas_Object *obj);
|
||||
|
|
|
@ -32,7 +32,7 @@ struct _Elm_Slider_Smart_Data
|
|||
char *(*units_format_func)(double val);
|
||||
void (*units_format_free)(char *str);
|
||||
|
||||
double val, val_min, val_max, val2;
|
||||
double val, val_min, val_max, val2, step;
|
||||
Evas_Coord size;
|
||||
Evas_Coord downx, downy;
|
||||
|
||||
|
|
Loading…
Reference in New Issue