2013-04-25 22:13:00 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2014-10-17 08:56:11 -07:00
|
|
|
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
|
|
|
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
2017-09-11 23:36:24 -07:00
|
|
|
#define EFL_ACCESS_VALUE_PROTECTED
|
2016-04-20 05:07:38 -07:00
|
|
|
#define ELM_LAYOUT_PROTECTED
|
2014-10-17 08:56:11 -07:00
|
|
|
|
2009-02-08 04:34:58 -08:00
|
|
|
#include <Elementary.h>
|
2013-04-25 22:13:00 -07:00
|
|
|
|
2009-02-08 04:34:58 -08:00
|
|
|
#include "elm_priv.h"
|
2017-06-12 00:06:22 -07:00
|
|
|
#include "efl_ui_slider_private.h"
|
2012-11-25 22:32:53 -08:00
|
|
|
#include "elm_widget_layout.h"
|
2009-02-08 04:34:58 -08:00
|
|
|
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#include "efl_ui_slider_part.eo.h"
|
2017-06-21 22:00:58 -07:00
|
|
|
#include "elm_part_helper.h"
|
|
|
|
|
2017-06-12 00:06:22 -07:00
|
|
|
#define MY_CLASS EFL_UI_SLIDER_CLASS
|
2017-07-27 23:35:10 -07:00
|
|
|
#define MY_CLASS_PFX efl_ui_slider
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2017-06-12 00:06:22 -07:00
|
|
|
#define MY_CLASS_NAME "Efl.Ui.Slider"
|
2013-11-07 03:44:22 -08:00
|
|
|
#define MY_CLASS_NAME_LEGACY "elm_slider"
|
2013-01-02 22:12:38 -08:00
|
|
|
#define SLIDER_DELAY_CHANGED_INTERVAL 0.2
|
2013-10-30 02:56:29 -07:00
|
|
|
#define SLIDER_STEP 0.05
|
2011-07-04 12:56:19 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
static const Elm_Layout_Part_Alias_Description _content_aliases[] =
|
|
|
|
{
|
|
|
|
{"icon", "elm.swallow.icon"},
|
|
|
|
{"end", "elm.swallow.end"},
|
|
|
|
{NULL, NULL}
|
2009-02-08 04:34:58 -08:00
|
|
|
};
|
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
static const Elm_Layout_Part_Alias_Description _text_aliases[] =
|
|
|
|
{
|
|
|
|
{"default", "elm.text"},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
2009-02-08 04:34:58 -08:00
|
|
|
|
2010-03-26 03:59:56 -07:00
|
|
|
static const char SIG_CHANGED[] = "changed";
|
|
|
|
static const char SIG_DELAY_CHANGED[] = "delay,changed";
|
|
|
|
static const char SIG_DRAG_START[] = "slider,drag,start";
|
|
|
|
static const char SIG_DRAG_STOP[] = "slider,drag,stop";
|
2012-05-03 15:42:54 -07:00
|
|
|
static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|
|
|
{SIG_CHANGED, ""},
|
|
|
|
{SIG_DELAY_CHANGED, ""},
|
|
|
|
{SIG_DRAG_START, ""},
|
|
|
|
{SIG_DRAG_STOP, ""},
|
2014-01-23 03:07:20 -08:00
|
|
|
{SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */
|
2014-02-07 21:05:06 -08:00
|
|
|
{SIG_WIDGET_ACCESS_CHANGED, ""}, /**< handled by elm_widget */
|
2014-02-05 23:18:57 -08:00
|
|
|
{SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */
|
|
|
|
{SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
|
2012-05-03 15:42:54 -07:00
|
|
|
{NULL, NULL}
|
2010-03-26 03:59:56 -07:00
|
|
|
};
|
|
|
|
|
2013-07-18 06:19:44 -07:00
|
|
|
static void _min_max_set(Evas_Object *obj);
|
|
|
|
|
2014-04-17 21:39:08 -07:00
|
|
|
static Eina_Bool _key_action_drag(Evas_Object *obj, const char *params);
|
|
|
|
|
|
|
|
static const Elm_Action key_actions[] = {
|
|
|
|
{"drag", _key_action_drag},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
|
|
|
|
2010-09-27 14:13:41 -07:00
|
|
|
static Eina_Bool
|
2012-05-03 15:42:54 -07:00
|
|
|
_delay_change(void *data)
|
2010-09-27 14:13:41 -07:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2010-12-06 04:45:49 -08:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
sd->delay = NULL;
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(data, EFL_UI_SLIDER_EVENT_DELAY_CHANGED, NULL);
|
2010-12-06 04:45:49 -08:00
|
|
|
|
2015-12-08 01:41:36 -08:00
|
|
|
if (_elm_config->atspi_mode)
|
|
|
|
elm_interface_atspi_accessible_value_changed_signal_emit(data);
|
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
return ECORE_CALLBACK_CANCEL;
|
|
|
|
}
|
2010-12-06 04:45:49 -08:00
|
|
|
|
2016-04-07 00:50:03 -07:00
|
|
|
static inline Eina_Bool
|
2017-08-09 08:01:32 -07:00
|
|
|
_is_horizontal(Efl_Ui_Dir dir)
|
2016-04-07 00:50:03 -07:00
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
return efl_ui_dir_is_horizontal(dir, EINA_TRUE);
|
2016-04-07 00:50:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline Eina_Bool
|
2017-08-09 08:01:32 -07:00
|
|
|
_is_inverted(Efl_Ui_Dir dir)
|
2016-04-07 00:50:03 -07:00
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if ((dir == EFL_UI_DIR_LEFT) || (dir == EFL_UI_DIR_UP))
|
2016-04-07 00:50:03 -07:00
|
|
|
return EINA_TRUE;
|
|
|
|
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
static Efl_Ui_Dir
|
|
|
|
_direction_get(Eina_Bool horizontal, Eina_Bool inverted)
|
2016-04-07 00:50:03 -07:00
|
|
|
{
|
|
|
|
if (horizontal)
|
|
|
|
{
|
|
|
|
if (inverted)
|
2017-08-09 08:01:32 -07:00
|
|
|
return EFL_UI_DIR_LEFT;
|
2016-04-07 00:50:03 -07:00
|
|
|
else
|
2017-08-09 08:01:32 -07:00
|
|
|
return EFL_UI_DIR_RIGHT;
|
2016-04-07 00:50:03 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (inverted)
|
2017-08-09 08:01:32 -07:00
|
|
|
return EFL_UI_DIR_UP;
|
2016-04-07 00:50:03 -07:00
|
|
|
else
|
2017-08-09 08:01:32 -07:00
|
|
|
return EFL_UI_DIR_DOWN;
|
2016-04-07 00:50:03 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
static void
|
2013-07-19 00:00:45 -07:00
|
|
|
_val_fetch(Evas_Object *obj, Eina_Bool user_event)
|
2012-05-03 15:42:54 -07:00
|
|
|
{
|
|
|
|
Eina_Bool rtl;
|
|
|
|
double posx = 0.0, posy = 0.0, pos = 0.0, val;
|
2016-03-28 01:35:51 -07:00
|
|
|
double posx2 = 0.0, posy2 = 0.0, pos2 = 0.0, val2;
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
edje_object_part_drag_value_get
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, "elm.dragable.slider", &posx, &posy);
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir)) pos = posx;
|
2012-07-17 11:45:57 -07:00
|
|
|
else pos = posy;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2016-03-28 01:35:51 -07:00
|
|
|
edje_object_part_drag_value_get
|
|
|
|
(wd->resize_obj, "elm.dragable2.slider", &posx2, &posy2);
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir)) pos2 = posx2;
|
2016-03-28 01:35:51 -07:00
|
|
|
else pos2 = posy2;
|
|
|
|
|
2017-06-13 03:41:15 -07:00
|
|
|
rtl = efl_ui_mirrored_get(obj);
|
2017-08-09 08:01:32 -07:00
|
|
|
if ((!rtl && _is_inverted(sd->dir)) ||
|
|
|
|
(rtl && ((sd->dir == EFL_UI_DIR_UP) ||
|
|
|
|
(sd->dir == EFL_UI_DIR_RIGHT))))
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
|
|
|
pos = 1.0 - pos;
|
|
|
|
pos2 = 1.0 - pos2;
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
val = (pos * (sd->val_max - sd->val_min)) + sd->val_min;
|
2016-03-28 01:35:51 -07:00
|
|
|
val2 = (pos2 * (sd->val_max - sd->val_min)) + sd->val_min;
|
|
|
|
|
2015-07-08 23:19:54 -07:00
|
|
|
if (fabs(val - sd->val) > DBL_EPSILON)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
sd->val = val;
|
2017-06-14 21:52:54 -07:00
|
|
|
sd->intvl_from = val;
|
2016-03-28 01:35:51 -07:00
|
|
|
if (user_event)
|
|
|
|
{
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(obj, EFL_UI_SLIDER_EVENT_CHANGED, NULL);
|
2016-03-28 01:35:51 -07:00
|
|
|
ecore_timer_del(sd->delay);
|
|
|
|
sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, _delay_change, obj);
|
|
|
|
}
|
|
|
|
}
|
2017-06-14 21:52:54 -07:00
|
|
|
if (fabs(val2 - sd->intvl_to) > DBL_EPSILON)
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
2017-06-14 21:52:54 -07:00
|
|
|
sd->intvl_to = val2;
|
2013-07-19 00:00:45 -07:00
|
|
|
if (user_event)
|
2013-07-18 07:10:34 -07:00
|
|
|
{
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(obj, EFL_UI_SLIDER_EVENT_CHANGED, NULL);
|
2014-01-21 06:16:41 -08:00
|
|
|
ecore_timer_del(sd->delay);
|
2013-07-18 07:10:34 -07:00
|
|
|
sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, _delay_change, obj);
|
|
|
|
}
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
2010-09-27 14:13:41 -07:00
|
|
|
}
|
|
|
|
|
2009-02-08 04:34:58 -08:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_val_set(Evas_Object *obj)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
Eina_Bool rtl;
|
2016-03-28 01:35:51 -07:00
|
|
|
double pos, pos2;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
if (sd->val_max > sd->val_min)
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
|
|
|
pos = (sd->val - sd->val_min) / (sd->val_max - sd->val_min);
|
2017-06-14 21:52:54 -07:00
|
|
|
pos2 = (sd->intvl_to - sd->val_min) / (sd->val_max - sd->val_min);
|
2016-03-28 01:35:51 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pos = 0.0;
|
|
|
|
pos2 = 0.0;
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
if (pos < 0.0) pos = 0.0;
|
|
|
|
else if (pos > 1.0)
|
|
|
|
pos = 1.0;
|
2016-03-28 01:35:51 -07:00
|
|
|
if (pos2 < 0.0) pos2 = 0.0;
|
|
|
|
else if (pos2 > 1.0)
|
|
|
|
pos2 = 1.0;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2017-06-13 03:41:15 -07:00
|
|
|
rtl = efl_ui_mirrored_get(obj);
|
2017-08-09 08:01:32 -07:00
|
|
|
if ((!rtl && _is_inverted(sd->dir)) ||
|
|
|
|
(rtl && ((sd->dir == EFL_UI_DIR_UP) ||
|
|
|
|
(sd->dir == EFL_UI_DIR_RIGHT))))
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
|
|
|
pos = 1.0 - pos;
|
|
|
|
pos2 = 1.0 - pos2;
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2012-05-03 15:42:54 -07:00
|
|
|
edje_object_part_drag_value_set
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, "elm.dragable.slider", pos, pos);
|
2015-12-08 01:41:36 -08:00
|
|
|
|
2017-06-14 21:52:54 -07:00
|
|
|
if (sd->intvl_enable)
|
2016-03-28 01:35:51 -07:00
|
|
|
edje_object_part_drag_value_set
|
|
|
|
(wd->resize_obj, "elm.dragable2.slider", pos2, pos2);
|
|
|
|
|
2015-12-08 01:41:36 -08:00
|
|
|
// emit accessiblity event also if value was chagend by API
|
|
|
|
if (_elm_config->atspi_mode)
|
|
|
|
elm_interface_atspi_accessible_value_changed_signal_emit(obj);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2010-09-22 10:45:46 -07:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_units_set(Evas_Object *obj)
|
2010-09-22 10:45:46 -07:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
if (sd->units_format_func)
|
2010-09-22 10:45:46 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
char *buf;
|
|
|
|
|
|
|
|
buf = sd->units_format_func(sd->val);
|
2013-07-18 06:19:44 -07:00
|
|
|
if (buf)
|
|
|
|
{
|
|
|
|
elm_layout_text_set(obj, "elm.units", buf);
|
|
|
|
if (!sd->units_show)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,units,visible", "elm");
|
|
|
|
sd->units_show = EINA_TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2013-07-26 00:26:17 -07:00
|
|
|
elm_layout_text_set(obj, "elm.units", NULL);
|
2013-07-18 06:19:44 -07:00
|
|
|
if (sd->units_show)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,units,hidden", "elm");
|
|
|
|
sd->units_show = EINA_FALSE;
|
|
|
|
}
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->units_format_free) sd->units_format_free(buf);
|
2010-09-22 10:45:46 -07:00
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
else if (sd->units)
|
2010-09-22 10:45:46 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
char buf[1024];
|
|
|
|
|
2017-06-14 21:52:54 -07:00
|
|
|
if (!sd->intvl_enable)
|
2016-03-28 01:35:51 -07:00
|
|
|
snprintf(buf, sizeof(buf), sd->units, sd->val);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
double v1, v2;
|
|
|
|
|
2017-09-12 01:29:18 -07:00
|
|
|
elm_slider_range_get(obj, &v1, &v2);
|
2016-03-28 01:35:51 -07:00
|
|
|
snprintf(buf, sizeof(buf), sd->units, v2 - v1);
|
|
|
|
}
|
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_text_set(obj, "elm.units", buf);
|
2013-07-18 06:19:44 -07:00
|
|
|
if (!sd->units_show)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,units,visible", "elm");
|
|
|
|
sd->units_show = EINA_TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_layout_text_set(obj, "elm.units", NULL);
|
|
|
|
if (sd->units_show)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,units,hidden", "elm");
|
|
|
|
sd->units_show = EINA_FALSE;
|
|
|
|
}
|
2010-09-22 10:45:46 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-08 04:08:28 -08:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_indicator_set(Evas_Object *obj)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2011-12-02 09:51:49 -08:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->indicator_format_func)
|
|
|
|
{
|
|
|
|
char *buf;
|
2011-04-01 04:24:15 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
buf = sd->indicator_format_func(sd->val);
|
2012-07-07 02:44:52 -07:00
|
|
|
elm_layout_text_set(obj, "elm.indicator", buf);
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", buf);
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
edje_object_part_text_set(sd->popup, "elm.indicator", buf);
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
{
|
|
|
|
if (sd->indicator_format_free) sd->indicator_format_free(buf);
|
2017-06-14 21:52:54 -07:00
|
|
|
buf = sd->indicator_format_func(sd->intvl_to);
|
2016-03-28 01:35:51 -07:00
|
|
|
elm_layout_text_set(obj, "elm.dragable2.slider:elm.indicator", buf);
|
|
|
|
edje_object_part_text_set(sd->popup2, "elm.indicator", buf);
|
|
|
|
}
|
2011-04-01 04:24:15 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->indicator_format_free) sd->indicator_format_free(buf);
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
else if (sd->indicator)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
char buf[1024];
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
snprintf(buf, sizeof(buf), sd->indicator, sd->val);
|
2012-07-07 02:44:52 -07:00
|
|
|
elm_layout_text_set(obj, "elm.indicator", buf);
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", buf);
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
edje_object_part_text_set(sd->popup, "elm.indicator", buf);
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
{
|
|
|
|
memset(buf, 0, 1024);
|
2017-06-14 21:52:54 -07:00
|
|
|
snprintf(buf, sizeof(buf), sd->indicator, sd->intvl_to);
|
2016-03-28 01:35:51 -07:00
|
|
|
elm_layout_text_set(obj, "elm.dragable2.slider:elm.indicator", buf);
|
|
|
|
edje_object_part_text_set(sd->popup2, "elm.indicator", buf);
|
|
|
|
}
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_layout_text_set(obj, "elm.indicator", NULL);
|
|
|
|
elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", NULL);
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_part_text_set(sd->popup, "elm.indicator", NULL);
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
{
|
|
|
|
elm_layout_text_set(obj, "elm.dragable2.slider:elm.indicator", NULL);
|
|
|
|
edje_object_part_text_set(sd->popup2, "elm.indicator", NULL);
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
}
|
|
|
|
}
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
static void
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(Evas_Object *obj, Eina_Bool user_event)
|
2012-05-03 15:42:54 -07:00
|
|
|
{
|
2013-07-19 00:00:45 -07:00
|
|
|
_val_fetch(obj, user_event);
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2010-12-06 21:15:05 -08:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_drag(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2010-12-06 21:15:05 -08:00
|
|
|
{
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2010-12-06 21:15:05 -08:00
|
|
|
}
|
|
|
|
|
2009-02-08 04:34:58 -08:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_drag_start(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2011-04-01 04:24:15 -07:00
|
|
|
{
|
2015-09-15 18:10:32 -07:00
|
|
|
if (!elm_widget_focus_get(data))
|
|
|
|
elm_object_focus_set(data, EINA_TRUE);
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_widget_scroll_freeze_push(data);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_drag_stop(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_widget_scroll_freeze_pop(data);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_drag_step(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_drag_up(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
double step;
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2013-10-30 02:56:29 -07:00
|
|
|
step = sd->step;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_inverted(sd->dir)) step *= -1.0;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
|
2012-05-03 15:42:54 -07:00
|
|
|
edje_object_part_drag_step
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, "elm.dragable.slider", step, step);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_drag_down(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
double step;
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2013-10-30 02:56:29 -07:00
|
|
|
step = -sd->step;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_inverted(sd->dir)) step *= -1.0;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
|
2012-05-03 15:42:54 -07:00
|
|
|
edje_object_part_drag_step
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, "elm.dragable.slider", step, step);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2012-07-07 02:44:52 -07:00
|
|
|
static void
|
|
|
|
_popup_show(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2014-11-29 06:28:14 -08:00
|
|
|
if (sd->popup &&
|
2015-02-06 04:58:32 -08:00
|
|
|
(sd->indicator_visible_mode != ELM_SLIDER_INDICATOR_VISIBLE_MODE_NONE))
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
|
|
|
evas_object_raise(sd->popup);
|
|
|
|
evas_object_show(sd->popup);
|
2014-04-17 20:00:32 -07:00
|
|
|
sd->popup_visible = EINA_TRUE;
|
2013-10-05 05:35:27 -07:00
|
|
|
edje_object_signal_emit(sd->popup, "popup,show", "elm"); // XXX: for compat
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,popup,show", "elm");
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2 &&
|
|
|
|
(sd->indicator_visible_mode != ELM_SLIDER_INDICATOR_VISIBLE_MODE_NONE))
|
|
|
|
{
|
|
|
|
evas_object_raise(sd->popup2);
|
|
|
|
evas_object_show(sd->popup2);
|
|
|
|
edje_object_signal_emit(sd->popup2, "popup,show", "elm"); // XXX: for compat
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,popup,show", "elm");
|
|
|
|
}
|
2016-01-07 22:58:59 -08:00
|
|
|
ELM_SAFE_FREE(sd->wheel_indicator_timer, ecore_timer_del);
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_popup_hide(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2014-04-17 20:00:32 -07:00
|
|
|
|
|
|
|
if (!sd->popup_visible || !sd->popup) return;
|
|
|
|
|
2015-02-06 04:58:32 -08:00
|
|
|
if (sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ALWAYS) return;
|
|
|
|
if ((sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS) &&
|
2014-11-29 06:28:14 -08:00
|
|
|
elm_widget_focus_get(data))
|
|
|
|
return;
|
2014-11-28 22:56:45 -08:00
|
|
|
|
2014-11-29 06:28:14 -08:00
|
|
|
edje_object_signal_emit(sd->popup, "popup,hide", "elm"); // XXX: for compat
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,popup,hide", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
|
|
|
|
if (sd->popup2)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(sd->popup2, "popup,hide", "elm"); // XXX: for compat
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,popup,hide", "elm");
|
|
|
|
}
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_popup_hide_done(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
{
|
2014-11-28 22:56:45 -08:00
|
|
|
if (!((elm_widget_focus_get(data)) &&
|
2015-02-06 04:58:32 -08:00
|
|
|
(sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS)))
|
2014-04-17 20:00:32 -07:00
|
|
|
{
|
|
|
|
evas_object_hide(sd->popup);
|
|
|
|
sd->popup_visible = EINA_FALSE;
|
|
|
|
}
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
{
|
|
|
|
if (!((elm_widget_focus_get(data)) &&
|
|
|
|
(sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS)))
|
|
|
|
{
|
|
|
|
evas_object_hide(sd->popup2);
|
|
|
|
}
|
|
|
|
}
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_popup_emit(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
2012-07-07 02:44:52 -07:00
|
|
|
const char *emission,
|
|
|
|
const char *source)
|
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(sd->popup, emission, source);
|
|
|
|
}
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(sd->popup2, emission, source);
|
|
|
|
}
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
|
|
|
|
2014-04-17 21:39:08 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_key_action_drag(Evas_Object *obj, const char *params)
|
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2014-04-17 21:39:08 -07:00
|
|
|
const char *dir = params;
|
|
|
|
|
|
|
|
if (!strcmp(dir, "left"))
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (!_is_horizontal(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
return EINA_FALSE;
|
2017-08-09 08:01:32 -07:00
|
|
|
if (!_is_inverted(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
_drag_down(obj, NULL, NULL, NULL);
|
2014-04-17 21:39:08 -07:00
|
|
|
else _drag_up(obj, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
else if (!strcmp(dir, "right"))
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (!_is_horizontal(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
return EINA_FALSE;
|
2017-08-09 08:01:32 -07:00
|
|
|
if (!_is_inverted(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
_drag_up(obj, NULL, NULL, NULL);
|
2014-04-17 21:39:08 -07:00
|
|
|
else _drag_down(obj, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
else if (!strcmp(dir, "up"))
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
return EINA_FALSE;
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_inverted(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
_drag_up(obj, NULL, NULL, NULL);
|
2014-04-17 21:39:08 -07:00
|
|
|
else _drag_down(obj, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
else if (!strcmp(dir, "down"))
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
return EINA_FALSE;
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_inverted(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
_drag_down(obj, NULL, NULL, NULL);
|
2014-04-17 21:39:08 -07:00
|
|
|
else _drag_up(obj, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
else return EINA_FALSE;
|
|
|
|
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
2016-01-07 22:58:59 -08:00
|
|
|
static Eina_Bool
|
|
|
|
_wheel_indicator_timer_cb(void *data)
|
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2016-01-07 22:58:59 -08:00
|
|
|
sd->wheel_indicator_timer = NULL;
|
|
|
|
|
|
|
|
_popup_hide(data, NULL, NULL, NULL);
|
|
|
|
return ECORE_CALLBACK_CANCEL;
|
|
|
|
}
|
|
|
|
|
2017-08-17 02:05:23 -07:00
|
|
|
// _slider_elm_widget_widget_event
|
|
|
|
ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(slider, Efl_Ui_Slider_Data)
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-08-17 02:14:52 -07:00
|
|
|
_efl_ui_slider_elm_widget_widget_event(Eo *obj, Efl_Ui_Slider_Data *sd, const Efl_Event *eo_event, Evas_Object *src)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2017-08-17 02:05:23 -07:00
|
|
|
Eo *ev = eo_event->info;
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2017-08-17 02:05:23 -07:00
|
|
|
if (eo_event->desc == EFL_EVENT_KEY_DOWN)
|
2014-04-17 19:45:13 -07:00
|
|
|
{
|
2017-08-17 02:14:52 -07:00
|
|
|
_slider_elm_widget_widget_event(obj, sd, eo_event, src);
|
2014-04-17 19:45:13 -07:00
|
|
|
}
|
2017-08-17 02:05:23 -07:00
|
|
|
else if (eo_event->desc == EFL_EVENT_KEY_UP)
|
2013-10-23 00:42:04 -07:00
|
|
|
{
|
2017-08-17 02:05:23 -07:00
|
|
|
_popup_hide(obj, NULL, NULL, NULL);
|
2014-04-17 19:53:27 -07:00
|
|
|
return EINA_FALSE;
|
2013-10-23 00:42:04 -07:00
|
|
|
}
|
2017-08-17 02:05:23 -07:00
|
|
|
else if (eo_event->desc == EFL_EVENT_POINTER_WHEEL)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2017-08-17 02:05:23 -07:00
|
|
|
if (efl_input_processed_get(ev)) return EINA_FALSE;
|
|
|
|
if (efl_input_pointer_wheel_delta_get(ev) < 0)
|
|
|
|
_drag_up(obj, NULL, NULL, NULL);
|
2012-05-03 15:42:54 -07:00
|
|
|
else _drag_down(obj, NULL, NULL, NULL);
|
2017-08-17 02:05:23 -07:00
|
|
|
efl_input_processed_set(ev, EINA_TRUE);
|
|
|
|
ELM_SAFE_FREE(sd->wheel_indicator_timer, ecore_timer_del);
|
2016-01-07 22:58:59 -08:00
|
|
|
sd->wheel_indicator_timer =
|
|
|
|
ecore_timer_add(0.5, _wheel_indicator_timer_cb, obj);
|
|
|
|
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
2014-03-26 02:46:20 -07:00
|
|
|
else return EINA_FALSE;
|
2009-02-08 04:34:58 -08:00
|
|
|
|
2013-10-23 00:42:04 -07:00
|
|
|
_popup_show(obj, NULL, NULL, NULL);
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(obj, EINA_TRUE);
|
2009-02-08 04:34:58 -08:00
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
return EINA_TRUE;
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-08-23 23:21:59 -07:00
|
|
|
_efl_ui_slider_elm_widget_on_access_activate(Eo *obj, Efl_Ui_Slider_Data *sd, Elm_Activate act)
|
2012-09-16 20:01:46 -07:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
if (elm_widget_disabled_get(obj)) return EINA_FALSE;
|
|
|
|
if (act == ELM_ACTIVATE_DEFAULT) return EINA_FALSE;
|
2012-09-16 20:01:46 -07:00
|
|
|
|
|
|
|
if ((act == ELM_ACTIVATE_UP) ||
|
|
|
|
(act == ELM_ACTIVATE_RIGHT))
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (!_is_inverted(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
_drag_up(obj, NULL, NULL, NULL);
|
2012-09-16 20:01:46 -07:00
|
|
|
else _drag_down(obj, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
else if ((act == ELM_ACTIVATE_DOWN) ||
|
|
|
|
(act == ELM_ACTIVATE_LEFT))
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (!_is_inverted(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
_drag_down(obj, NULL, NULL, NULL);
|
2012-09-16 20:01:46 -07:00
|
|
|
else _drag_up(obj, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(obj, EINA_TRUE);
|
2012-09-16 20:01:46 -07:00
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
return EINA_TRUE;
|
2012-09-16 20:01:46 -07:00
|
|
|
}
|
|
|
|
|
2012-05-02 18:19:05 -07:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_visuals_refresh(Evas_Object *obj)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
_val_set(obj);
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2014-03-02 12:00:58 -08:00
|
|
|
static void
|
|
|
|
_track_move_cb(void *data,
|
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Coord x, y;
|
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2014-03-02 12:00:58 -08:00
|
|
|
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
|
|
|
|
evas_object_move(sd->popup, x, y);
|
|
|
|
}
|
|
|
|
|
2016-03-28 01:35:51 -07:00
|
|
|
static void
|
|
|
|
_track2_move_cb(void *data,
|
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Coord x, y;
|
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2016-03-28 01:35:51 -07:00
|
|
|
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
|
|
|
|
evas_object_move(sd->popup2, x, y);
|
|
|
|
}
|
|
|
|
|
2014-03-02 12:00:58 -08:00
|
|
|
static void
|
|
|
|
_track_resize_cb(void *data,
|
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Coord w, h;
|
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2014-03-02 12:00:58 -08:00
|
|
|
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
|
|
|
|
evas_object_resize(sd->popup, w, h);
|
|
|
|
}
|
|
|
|
|
2014-03-02 12:01:59 -08:00
|
|
|
static void
|
2016-03-28 01:35:51 -07:00
|
|
|
_track2_resize_cb(void *data,
|
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Coord w, h;
|
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2016-03-28 01:35:51 -07:00
|
|
|
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
|
|
|
|
evas_object_resize(sd->popup2, w, h);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_popup_add(Efl_Ui_Slider_Data *sd, Eo *obj, Evas_Object **popup,
|
2016-03-28 01:35:51 -07:00
|
|
|
Evas_Object **track, Eina_Bool is_range)
|
2014-03-02 12:01:59 -08:00
|
|
|
{
|
|
|
|
/* if theme has an overlayed slider mode, then lets support it */
|
2016-03-28 01:35:51 -07:00
|
|
|
if (!is_range
|
|
|
|
&& !edje_object_part_exists(elm_layout_edje_get(obj), "elm.track.slider"))
|
|
|
|
return;
|
|
|
|
else if (is_range
|
|
|
|
&& !edje_object_part_exists(elm_layout_edje_get(obj), "elm.track2.slider"))
|
|
|
|
return;
|
2014-03-02 12:01:59 -08:00
|
|
|
|
|
|
|
// XXX popup needs to adapt to theme etc.
|
2016-03-28 01:35:51 -07:00
|
|
|
*popup = edje_object_add(evas_object_evas_get(obj));
|
|
|
|
evas_object_smart_member_add(*popup, obj);
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2016-03-28 01:35:51 -07:00
|
|
|
_elm_theme_set(elm_widget_theme_get(obj), *popup, "slider", "horizontal/popup", elm_widget_style_get(obj));
|
2014-03-02 12:01:59 -08:00
|
|
|
else
|
2016-03-28 01:35:51 -07:00
|
|
|
_elm_theme_set(elm_widget_theme_get(obj), *popup, "slider", "vertical/popup", elm_widget_style_get(obj));
|
2017-06-09 00:47:42 -07:00
|
|
|
edje_object_scale_set(*popup, efl_ui_scale_get(obj) *
|
2014-03-02 12:01:59 -08:00
|
|
|
elm_config_scale_get());
|
2016-03-28 01:35:51 -07:00
|
|
|
edje_object_signal_callback_add(*popup, "popup,hide,done", "elm", // XXX: for compat
|
2014-03-02 12:01:59 -08:00
|
|
|
_popup_hide_done, obj);
|
2016-03-28 01:35:51 -07:00
|
|
|
edje_object_signal_callback_add(*popup, "elm,popup,hide,done", "elm",
|
2014-03-02 12:01:59 -08:00
|
|
|
_popup_hide_done, obj);
|
|
|
|
|
|
|
|
/* create a rectangle to track position+size of the dragable */
|
2016-03-28 01:35:51 -07:00
|
|
|
*track = evas_object_rectangle_add(evas_object_evas_get(obj));
|
|
|
|
evas_object_color_set(*track, 0, 0, 0, 0);
|
|
|
|
evas_object_pass_events_set(*track, EINA_TRUE);
|
|
|
|
if (!is_range)
|
|
|
|
{
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(*track, EVAS_CALLBACK_MOVE, _track_move_cb, obj);
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(*track, EVAS_CALLBACK_RESIZE, _track_resize_cb, obj);
|
|
|
|
elm_layout_content_set(obj, "elm.track.slider", *track);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(*track, EVAS_CALLBACK_MOVE, _track2_move_cb, obj);
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(*track, EVAS_CALLBACK_RESIZE, _track2_resize_cb, obj);
|
|
|
|
elm_layout_content_set(obj, "elm.track2.slider", *track);
|
|
|
|
}
|
2014-03-02 12:01:59 -08:00
|
|
|
}
|
|
|
|
|
2017-08-09 00:13:06 -07:00
|
|
|
EOLIAN static Efl_Ui_Theme_Apply
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_elm_widget_theme_apply(Eo *obj, Efl_Ui_Slider_Data *sd)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2017-08-09 00:13:06 -07:00
|
|
|
Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED;
|
2017-08-07 21:28:50 -07:00
|
|
|
EFL_UI_LAYOUT_DATA_GET(obj, ld);
|
2017-08-09 00:13:06 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EFL_UI_THEME_APPLY_FAILED);
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
2017-06-14 21:52:54 -07:00
|
|
|
if (!sd->intvl_enable)
|
2016-05-24 22:03:53 -07:00
|
|
|
eina_stringshare_replace(&ld->group, "horizontal");
|
|
|
|
else
|
|
|
|
eina_stringshare_replace(&ld->group, "range/horizontal");
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
2015-06-28 22:45:26 -07:00
|
|
|
_elm_theme_set(elm_widget_theme_get(obj), sd->popup,
|
2012-07-07 02:44:52 -07:00
|
|
|
"slider", "horizontal/popup",
|
2013-02-25 20:26:22 -08:00
|
|
|
elm_widget_style_get(obj));
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
_elm_theme_set(elm_widget_theme_get(obj), sd->popup2,
|
|
|
|
"slider", "horizontal/popup",
|
|
|
|
elm_widget_style_get(obj));
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
else
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
2017-06-14 21:52:54 -07:00
|
|
|
if (!sd->intvl_enable)
|
2016-05-24 22:03:53 -07:00
|
|
|
eina_stringshare_replace(&ld->group, "vertical");
|
|
|
|
else
|
|
|
|
eina_stringshare_replace(&ld->group, "range/vertical");
|
|
|
|
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
2015-06-28 22:45:26 -07:00
|
|
|
_elm_theme_set(elm_widget_theme_get(obj), sd->popup,
|
2012-07-07 02:44:52 -07:00
|
|
|
"slider", "vertical/popup",
|
2013-02-25 20:26:22 -08:00
|
|
|
elm_widget_style_get(obj));
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
_elm_theme_set(elm_widget_theme_get(obj), sd->popup2,
|
|
|
|
"slider", "vertical/popup",
|
|
|
|
elm_widget_style_get(obj));
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
2010-12-06 04:45:33 -08:00
|
|
|
|
2016-08-15 06:44:41 -07:00
|
|
|
int_ret = elm_obj_widget_theme_apply(efl_super(obj, MY_CLASS));
|
2017-08-09 00:13:06 -07:00
|
|
|
if (!int_ret) return EFL_UI_THEME_APPLY_FAILED;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2012-08-06 01:34:39 -07:00
|
|
|
if (sd->popup)
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
2017-06-09 00:47:42 -07:00
|
|
|
edje_object_scale_set(sd->popup, efl_ui_scale_get(obj) *
|
2016-03-28 01:35:51 -07:00
|
|
|
elm_config_scale_get());
|
2017-06-14 21:52:54 -07:00
|
|
|
if (sd->intvl_enable && sd->popup2)
|
2017-06-09 00:47:42 -07:00
|
|
|
edje_object_scale_set(sd->popup2, efl_ui_scale_get(obj) *
|
2016-03-28 01:35:51 -07:00
|
|
|
elm_config_scale_get());
|
2017-06-14 21:52:54 -07:00
|
|
|
else if (sd->intvl_enable && !sd->popup2)
|
2016-03-28 01:35:51 -07:00
|
|
|
_popup_add(sd, obj, &sd->popup2, &sd->track2, EINA_TRUE);
|
|
|
|
}
|
2014-03-02 12:01:59 -08:00
|
|
|
else
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
|
|
|
_popup_add(sd, obj, &sd->popup, &sd->track, EINA_FALSE);
|
2017-06-14 21:52:54 -07:00
|
|
|
if (sd->intvl_enable && !sd->popup2)
|
2016-03-28 01:35:51 -07:00
|
|
|
_popup_add(sd, obj, &sd->popup2, &sd->track2, EINA_TRUE);
|
|
|
|
}
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2012-05-03 15:42:54 -07:00
|
|
|
evas_object_size_hint_min_set
|
2017-06-09 00:47:42 -07:00
|
|
|
(sd->spacer, (double)sd->size * efl_ui_scale_get(obj) *
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_config_scale_get(), 1);
|
|
|
|
else
|
|
|
|
evas_object_size_hint_min_set
|
2017-06-09 00:47:42 -07:00
|
|
|
(sd->spacer, 1, (double)sd->size * efl_ui_scale_get(obj) *
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_config_scale_get());
|
|
|
|
|
2017-06-14 21:52:54 -07:00
|
|
|
if (sd->intvl_enable)
|
2016-03-28 01:35:51 -07:00
|
|
|
elm_layout_signal_emit(obj, "elm,slider,range,enable", "elm");
|
|
|
|
else
|
|
|
|
elm_layout_signal_emit(obj, "elm,slider,range,disable", "elm");
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_inverted(sd->dir))
|
2012-07-07 02:44:52 -07:00
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,inverted,on", "elm");
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,inverted,on", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,inverted,on", "elm");
|
2012-07-07 02:44:52 -07:00
|
|
|
}
|
2016-04-07 00:50:03 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,inverted,off", "elm");
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,inverted,off", "elm");
|
|
|
|
}
|
|
|
|
|
2013-04-01 06:23:14 -07:00
|
|
|
if (sd->indicator_show)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,val,show", "elm");
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,val,show", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,val,show", "elm");
|
2013-04-01 06:23:14 -07:00
|
|
|
}
|
2016-03-28 01:35:51 -07:00
|
|
|
|
2013-07-18 06:19:44 -07:00
|
|
|
_min_max_set(obj);
|
|
|
|
_units_set(obj);
|
|
|
|
_indicator_set(obj);
|
2012-05-03 15:42:54 -07:00
|
|
|
_visuals_refresh(obj);
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
edje_object_message_signal_process(wd->resize_obj);
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
edje_object_message_signal_process(sd->popup);
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_message_signal_process(sd->popup2);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
theme: return enum from elm_widget_style_set instead of bool
Summary:
if trying to apply incorrect theme, widget apply default theme and return TRUE.
so there is no way to check it really apply correct theme.
To resolve this problem, _elm_theme_set return three type enum
* related history : 4ca3ef45146e05908a13d1010909abeba9693ad6
* elm_object_style_set is public api, so I didn't change it.
* typedef name [ Theme_Apply ] is temporarily, please suggest better one.
@fix
Reviewers: singh.amitesh, herb, Hermet, cedric, jpeg, raster
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4073
2016-06-30 23:09:42 -07:00
|
|
|
return int_ret;
|
2010-03-25 10:47:48 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Slider_Data *_pd EINA_UNUSED)
|
2010-03-25 10:47:48 -07:00
|
|
|
{
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2013-10-16 22:18:22 -07:00
|
|
|
Evas_Coord minw = -1, minh = -1;
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
|
|
|
|
edje_object_size_min_restricted_calc
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, &minw, &minh, minw, minh);
|
2012-05-03 15:42:54 -07:00
|
|
|
evas_object_size_hint_min_set(obj, minw, minh);
|
2013-10-16 22:18:22 -07:00
|
|
|
evas_object_size_hint_max_set(obj, -1, -1);
|
2010-03-25 10:47:48 -07:00
|
|
|
}
|
|
|
|
|
2016-03-28 01:35:51 -07:00
|
|
|
static void
|
|
|
|
_move_knob_on_mouse(Evas_Object *obj, double button_x, double button_y)
|
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2016-03-28 01:35:51 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
|
|
|
|
2017-06-14 21:52:54 -07:00
|
|
|
if (!sd->intvl_enable)
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
|
|
|
edje_object_part_drag_value_set
|
|
|
|
(wd->resize_obj, "elm.dragable.slider",
|
|
|
|
button_x, button_y);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
double posx = 0.0, posy = 0.0, posx2 = 0.0, posy2 = 0.0, diff1, diff2;
|
|
|
|
|
|
|
|
edje_object_part_drag_value_get
|
|
|
|
(wd->resize_obj, "elm.dragable.slider", &posx, &posy);
|
|
|
|
edje_object_part_drag_value_get
|
|
|
|
(wd->resize_obj, "elm.dragable2.slider", &posx2, &posy2);
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2016-03-28 01:35:51 -07:00
|
|
|
{
|
|
|
|
diff1 = fabs(button_x - posx);
|
|
|
|
diff2 = fabs(button_x - posx2);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
diff1 = fabs(button_y - posy);
|
|
|
|
diff2 = fabs(button_y - posy2);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (diff1 < diff2)
|
|
|
|
{
|
|
|
|
edje_object_part_drag_value_set
|
|
|
|
(wd->resize_obj, "elm.dragable.slider",
|
|
|
|
button_x, button_y);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edje_object_part_drag_value_set
|
|
|
|
(wd->resize_obj, "elm.dragable2.slider",
|
|
|
|
button_x, button_y);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-12-17 02:52:59 -08:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_spacer_down_cb(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj EINA_UNUSED,
|
2012-05-03 15:42:54 -07:00
|
|
|
void *event_info)
|
2010-12-17 02:52:59 -08:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2010-12-17 02:52:59 -08:00
|
|
|
Evas_Event_Mouse_Down *ev = event_info;
|
|
|
|
Evas_Coord x, y, w, h;
|
2012-01-02 00:56:19 -08:00
|
|
|
double button_x = 0.0, button_y = 0.0;
|
2011-04-01 04:24:15 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
sd->spacer_down = EINA_TRUE;
|
|
|
|
sd->val2 = sd->val;
|
|
|
|
evas_object_geometry_get(sd->spacer, &x, &y, &w, &h);
|
|
|
|
sd->downx = ev->canvas.x - x;
|
|
|
|
sd->downy = ev->canvas.y - y;
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2010-12-17 02:52:59 -08:00
|
|
|
{
|
2011-06-13 04:26:08 -07:00
|
|
|
button_x = ((double)ev->canvas.x - (double)x) / (double)w;
|
2010-12-17 02:52:59 -08:00
|
|
|
if (button_x > 1) button_x = 1;
|
|
|
|
if (button_x < 0) button_x = 0;
|
|
|
|
}
|
2011-04-01 04:24:15 -07:00
|
|
|
else
|
2010-12-17 02:52:59 -08:00
|
|
|
{
|
2011-06-13 04:26:08 -07:00
|
|
|
button_y = ((double)ev->canvas.y - (double)y) / (double)h;
|
2010-12-17 02:52:59 -08:00
|
|
|
if (button_y > 1) button_y = 1;
|
|
|
|
if (button_y < 0) button_y = 0;
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2016-03-28 01:35:51 -07:00
|
|
|
_move_knob_on_mouse(data, button_x, button_y);
|
|
|
|
|
2015-09-15 18:10:32 -07:00
|
|
|
if (!elm_widget_focus_get(data))
|
|
|
|
elm_object_focus_set(data, EINA_TRUE);
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,state,indicator,show", "elm");
|
2012-01-02 00:56:19 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_spacer_move_cb(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj EINA_UNUSED,
|
2012-05-03 15:42:54 -07:00
|
|
|
void *event_info)
|
2012-01-02 00:56:19 -08:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2012-01-02 00:56:19 -08:00
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
double button_x = 0.0, button_y = 0.0;
|
2012-05-03 15:42:54 -07:00
|
|
|
Evas_Event_Mouse_Move *ev = event_info;
|
2012-01-02 00:56:19 -08:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->spacer_down)
|
2011-12-26 07:01:51 -08:00
|
|
|
{
|
2012-02-14 23:38:28 -08:00
|
|
|
Evas_Coord d = 0;
|
2012-03-28 02:02:22 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
evas_object_geometry_get(sd->spacer, &x, &y, &w, &h);
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2016-04-07 00:50:03 -07:00
|
|
|
d = abs(ev->cur.canvas.x - x - sd->downx);
|
2012-05-03 15:42:54 -07:00
|
|
|
else d = abs(ev->cur.canvas.y - y - sd->downy);
|
2012-02-14 23:38:28 -08:00
|
|
|
if (d > (_elm_config->thumbscroll_threshold - 1))
|
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
if (!sd->frozen)
|
2012-02-14 23:38:28 -08:00
|
|
|
{
|
|
|
|
elm_widget_scroll_freeze_push(data);
|
2012-05-14 01:21:48 -07:00
|
|
|
sd->frozen = EINA_TRUE;
|
2012-02-14 23:38:28 -08:00
|
|
|
}
|
|
|
|
ev->event_flags &= ~EVAS_EVENT_FLAG_ON_HOLD;
|
|
|
|
}
|
2012-03-28 02:02:22 -07:00
|
|
|
|
2012-02-14 23:38:28 -08:00
|
|
|
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->spacer_down) sd->spacer_down = EINA_FALSE;
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2017-06-12 00:06:22 -07:00
|
|
|
(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->frozen)
|
2012-02-14 23:38:28 -08:00
|
|
|
{
|
|
|
|
elm_widget_scroll_freeze_pop(data);
|
2012-05-14 01:21:48 -07:00
|
|
|
sd->frozen = EINA_FALSE;
|
2012-02-14 23:38:28 -08:00
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,state,indicator,hide", "elm");
|
|
|
|
elm_slider_value_set(data, sd->val2);
|
2012-02-14 23:38:28 -08:00
|
|
|
return;
|
|
|
|
}
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2012-01-02 00:56:19 -08:00
|
|
|
{
|
|
|
|
button_x = ((double)ev->cur.canvas.x - (double)x) / (double)w;
|
|
|
|
if (button_x > 1) button_x = 1;
|
|
|
|
if (button_x < 0) button_x = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
button_y = ((double)ev->cur.canvas.y - (double)y) / (double)h;
|
|
|
|
if (button_y > 1) button_y = 1;
|
|
|
|
if (button_y < 0) button_y = 0;
|
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2016-03-28 01:35:51 -07:00
|
|
|
_move_knob_on_mouse(data, button_x, button_y);
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2011-12-26 07:01:51 -08:00
|
|
|
}
|
2012-01-02 00:56:19 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_spacer_up_cb(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2012-01-02 00:56:19 -08:00
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(data, sd);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
if (!sd->spacer_down) return;
|
|
|
|
if (sd->spacer_down) sd->spacer_down = EINA_FALSE;
|
2011-12-29 04:34:04 -08:00
|
|
|
|
2013-07-19 00:00:45 -07:00
|
|
|
_slider_update(data, EINA_TRUE);
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(data, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
if (sd->frozen)
|
2012-02-14 23:38:28 -08:00
|
|
|
{
|
|
|
|
elm_widget_scroll_freeze_pop(data);
|
2012-05-14 01:21:48 -07:00
|
|
|
sd->frozen = EINA_FALSE;
|
2012-02-14 23:38:28 -08:00
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,state,indicator,hide", "elm");
|
2010-12-17 02:52:59 -08:00
|
|
|
}
|
|
|
|
|
2011-06-29 22:58:29 -07:00
|
|
|
static void
|
2012-05-03 15:42:54 -07:00
|
|
|
_min_max_set(Evas_Object *obj)
|
2011-06-29 22:58:29 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
char *buf_min = NULL;
|
|
|
|
char *buf_max = NULL;
|
2011-12-02 09:51:49 -08:00
|
|
|
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->units_format_func)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
buf_min = sd->units_format_func(sd->val_min);
|
|
|
|
buf_max = sd->units_format_func(sd->val_max);
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
2012-05-03 15:42:54 -07:00
|
|
|
else if (sd->units)
|
2011-06-29 22:58:29 -07:00
|
|
|
{
|
2013-06-27 03:21:44 -07:00
|
|
|
int length = eina_stringshare_strlen(sd->units);
|
2011-06-29 22:58:29 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
buf_min = alloca(length + 128);
|
|
|
|
buf_max = alloca(length + 128);
|
2011-10-30 19:56:03 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
snprintf((char *)buf_min, length + 128, sd->units, sd->val_min);
|
|
|
|
snprintf((char *)buf_max, length + 128, sd->units, sd->val_max);
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_text_set(obj, "elm.units.min", buf_min);
|
|
|
|
elm_layout_text_set(obj, "elm.units.max", buf_max);
|
|
|
|
|
|
|
|
if (sd->units_format_func && sd->units_format_free)
|
2011-10-30 19:56:03 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
sd->units_format_free(buf_min);
|
|
|
|
sd->units_format_free(buf_max);
|
2011-10-30 19:56:03 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Slider_Data *sd)
|
2012-08-06 01:34:39 -07:00
|
|
|
{
|
|
|
|
elm_layout_freeze(obj);
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_size_hint_min_set
|
2017-06-09 00:47:42 -07:00
|
|
|
(sd->spacer, (double)sd->size * efl_ui_scale_get(obj) *
|
2012-08-06 01:34:39 -07:00
|
|
|
elm_config_scale_get(), 1);
|
|
|
|
else
|
|
|
|
evas_object_size_hint_min_set
|
2017-06-09 00:47:42 -07:00
|
|
|
(sd->spacer, 1, (double)sd->size * efl_ui_scale_get(obj) *
|
2012-08-06 01:34:39 -07:00
|
|
|
elm_config_scale_get());
|
|
|
|
|
2013-07-19 00:00:45 -07:00
|
|
|
_val_fetch(obj, EINA_FALSE);
|
2012-08-06 01:34:39 -07:00
|
|
|
_min_max_set(obj);
|
2013-07-18 06:19:44 -07:00
|
|
|
_units_set(obj);
|
2012-08-06 01:34:39 -07:00
|
|
|
_indicator_set(obj);
|
|
|
|
|
|
|
|
elm_layout_thaw(obj);
|
|
|
|
}
|
|
|
|
|
2012-08-18 06:52:03 -07:00
|
|
|
static char *
|
2014-01-06 06:30:02 -08:00
|
|
|
_access_info_cb(void *data EINA_UNUSED, Evas_Object *obj)
|
2012-08-18 06:52:03 -07:00
|
|
|
{
|
|
|
|
const char *txt = elm_widget_access_info_get(obj);
|
|
|
|
|
|
|
|
if (!txt) txt = elm_layout_text_get(obj, NULL);
|
|
|
|
if (txt) return strdup(txt);
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char *
|
2014-01-06 06:30:02 -08:00
|
|
|
_access_state_cb(void *data EINA_UNUSED, Evas_Object *obj)
|
2012-08-18 06:52:03 -07:00
|
|
|
{
|
|
|
|
char *ret;
|
|
|
|
Eina_Strbuf *buf = eina_strbuf_new();
|
|
|
|
const char *txt = elm_layout_text_get(obj, "elm.units");
|
2012-12-23 06:50:56 -08:00
|
|
|
|
2012-08-18 06:52:03 -07:00
|
|
|
if (txt) eina_strbuf_append(buf, txt);
|
|
|
|
|
|
|
|
if (elm_widget_disabled_get(obj))
|
|
|
|
eina_strbuf_append(buf, " state: disabled");
|
|
|
|
|
|
|
|
if (eina_strbuf_length_get(buf))
|
|
|
|
{
|
|
|
|
ret = eina_strbuf_string_steal(buf);
|
|
|
|
eina_strbuf_free(buf);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
eina_strbuf_free(buf);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2014-11-28 22:56:45 -08:00
|
|
|
static void
|
2014-11-29 06:28:14 -08:00
|
|
|
_on_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj,
|
2014-11-28 22:56:45 -08:00
|
|
|
void *event_info EINA_UNUSED)
|
|
|
|
{
|
2017-06-16 00:07:27 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
2015-02-06 04:58:32 -08:00
|
|
|
if (sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ALWAYS)
|
2014-11-29 06:28:14 -08:00
|
|
|
_popup_show(obj, NULL, NULL, NULL);
|
2014-11-28 22:56:45 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Slider_Data *priv)
|
2011-10-30 19:56:03 -07:00
|
|
|
{
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2011-10-30 19:56:03 -07:00
|
|
|
|
2016-08-15 06:44:41 -07:00
|
|
|
efl_canvas_group_add(efl_super(obj, MY_CLASS));
|
2013-09-24 21:33:39 -07:00
|
|
|
elm_widget_sub_object_parent_add(obj);
|
2013-08-26 22:19:19 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
priv->dir = EFL_UI_DIR_RIGHT;
|
2012-05-03 15:42:54 -07:00
|
|
|
priv->indicator_show = EINA_TRUE;
|
2015-02-06 04:58:32 -08:00
|
|
|
priv->indicator_visible_mode = elm_config_slider_indicator_visible_mode_get();
|
2012-05-03 15:42:54 -07:00
|
|
|
priv->val_max = 1.0;
|
2016-01-07 22:58:59 -08:00
|
|
|
//TODO: customize this time duration from api or theme data.
|
|
|
|
priv->wheel_indicator_duration = 0.25;
|
2013-10-30 02:56:29 -07:00
|
|
|
priv->step = SLIDER_STEP;
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2013-03-01 18:04:31 -08:00
|
|
|
if (!elm_layout_theme_set
|
|
|
|
(obj, "slider", "horizontal", elm_widget_style_get(obj)))
|
2013-12-25 20:03:55 -08:00
|
|
|
CRI("Failed to set layout!");
|
2012-05-02 09:59:35 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_layout_signal_callback_add(obj, "drag", "*", _drag, obj);
|
|
|
|
elm_layout_signal_callback_add(obj, "drag,start", "*", _drag_start, obj);
|
|
|
|
elm_layout_signal_callback_add(obj, "drag,stop", "*", _drag_stop, obj);
|
|
|
|
elm_layout_signal_callback_add(obj, "drag,step", "*", _drag_step, obj);
|
|
|
|
elm_layout_signal_callback_add(obj, "drag,page", "*", _drag_stop, obj);
|
2013-10-05 05:35:27 -07:00
|
|
|
elm_layout_signal_callback_add(obj, "popup,show", "elm", _popup_show, obj); // XXX: for compat
|
|
|
|
elm_layout_signal_callback_add(obj, "popup,hide", "elm", _popup_hide, obj); // XXX: for compat
|
|
|
|
elm_layout_signal_callback_add(obj, "elm,popup,show", "elm", _popup_show, obj);
|
|
|
|
elm_layout_signal_callback_add(obj, "elm,popup,hide", "elm", _popup_hide, obj);
|
2012-07-07 02:44:52 -07:00
|
|
|
elm_layout_signal_callback_add(obj, "*", "popup,emit", _popup_emit, obj);
|
2012-05-03 15:42:54 -07:00
|
|
|
edje_object_part_drag_value_set
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, "elm.dragable.slider", 0.0, 0.0);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
priv->spacer = evas_object_rectangle_add(evas_object_evas_get(obj));
|
|
|
|
evas_object_color_set(priv->spacer, 0, 0, 0, 0);
|
|
|
|
evas_object_pass_events_set(priv->spacer, EINA_TRUE);
|
|
|
|
elm_layout_content_set(obj, "elm.swallow.bar", priv->spacer);
|
|
|
|
|
2017-06-14 21:52:54 -07:00
|
|
|
if (!priv->intvl_enable)
|
|
|
|
_popup_add(priv, obj, &priv->popup, &priv->track, priv->intvl_enable);
|
2016-03-28 01:35:51 -07:00
|
|
|
else
|
2017-06-14 21:52:54 -07:00
|
|
|
_popup_add(priv, obj, &priv->popup2, &priv->track2, priv->intvl_enable);
|
2012-07-07 02:44:52 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
evas_object_event_callback_add
|
|
|
|
(priv->spacer, EVAS_CALLBACK_MOUSE_DOWN, _spacer_down_cb, obj);
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(priv->spacer, EVAS_CALLBACK_MOUSE_MOVE, _spacer_move_cb, obj);
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(priv->spacer, EVAS_CALLBACK_MOUSE_UP, _spacer_up_cb, obj);
|
|
|
|
|
2014-11-28 22:56:45 -08:00
|
|
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _on_show, NULL);
|
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
elm_widget_can_focus_set(obj, EINA_TRUE);
|
2012-07-17 11:46:03 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
_elm_access_object_register(obj, wd->resize_obj);
|
2012-08-18 06:52:03 -07:00
|
|
|
_elm_access_text_set
|
2013-07-30 20:53:04 -07:00
|
|
|
(_elm_access_info_get(obj), ELM_ACCESS_TYPE, E_("slider"));
|
2012-08-18 06:52:03 -07:00
|
|
|
_elm_access_callback_set
|
2013-07-30 20:53:04 -07:00
|
|
|
(_elm_access_info_get(obj), ELM_ACCESS_INFO, _access_info_cb, NULL);
|
2012-08-18 06:52:03 -07:00
|
|
|
_elm_access_callback_set
|
2013-07-30 20:53:04 -07:00
|
|
|
(_elm_access_info_get(obj), ELM_ACCESS_STATE, _access_state_cb, NULL);
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2011-10-30 19:56:03 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Slider_Data *sd)
|
2011-12-02 09:51:49 -08:00
|
|
|
{
|
2014-01-21 06:16:41 -08:00
|
|
|
eina_stringshare_del(sd->indicator);
|
|
|
|
eina_stringshare_del(sd->units);
|
|
|
|
ecore_timer_del(sd->delay);
|
2016-01-15 04:11:27 -08:00
|
|
|
ecore_timer_del(sd->wheel_indicator_timer);
|
2014-01-21 06:16:41 -08:00
|
|
|
evas_object_del(sd->popup);
|
2016-03-28 01:35:51 -07:00
|
|
|
evas_object_del(sd->popup2);
|
2012-05-03 15:42:54 -07:00
|
|
|
|
2016-08-15 06:44:41 -07:00
|
|
|
efl_canvas_group_del(efl_super(obj, MY_CLASS));
|
2011-12-02 09:51:49 -08:00
|
|
|
}
|
|
|
|
|
2015-05-19 05:34:07 -07:00
|
|
|
EOLIAN static Eo *
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_efl_object_constructor(Eo *obj, Efl_Ui_Slider_Data *_pd EINA_UNUSED)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
2016-06-20 21:26:15 -07:00
|
|
|
efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
|
2016-06-16 22:12:02 -07:00
|
|
|
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_SLIDER);
|
2015-05-19 05:34:07 -07:00
|
|
|
|
|
|
|
return obj;
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-08-09 08:01:32 -07:00
|
|
|
_efl_ui_slider_efl_ui_direction_direction_set(Eo *obj, Efl_Ui_Slider_Data *sd, Efl_Ui_Dir dir)
|
2016-04-07 00:50:03 -07:00
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
sd->dir = dir;
|
2016-04-07 00:50:03 -07:00
|
|
|
|
|
|
|
elm_obj_widget_theme_apply(obj);
|
|
|
|
}
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
EOLIAN static Efl_Ui_Dir
|
|
|
|
_efl_ui_slider_efl_ui_direction_direction_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2016-04-07 00:50:03 -07:00
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
return sd->dir;
|
2016-04-07 00:50:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2017-06-14 18:31:25 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, Evas_Coord size)
|
2012-05-03 15:42:54 -07:00
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2017-09-19 05:46:59 -07:00
|
|
|
efl_gfx_size_hint_min_set(efl_part(obj, "span"), EINA_SIZE2D(size, 1));
|
2010-09-28 08:09:19 -07:00
|
|
|
else
|
2017-09-19 05:46:59 -07:00
|
|
|
efl_gfx_size_hint_min_set(efl_part(obj, "span"), EINA_SIZE2D(1, size));
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Evas_Coord
|
2017-06-14 18:31:25 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_span_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return sd->size;
|
2010-03-25 10:27:00 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-14 21:29:51 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_range_unit_format_set(Eo *obj, Efl_Ui_Slider_Data *sd, const char *units)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2013-10-05 01:15:46 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2012-05-03 15:42:54 -07:00
|
|
|
eina_stringshare_replace(&sd->units, units);
|
2013-07-26 00:26:17 -07:00
|
|
|
if (units)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,units,visible", "elm");
|
|
|
|
edje_object_message_signal_process(wd->resize_obj);
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,units,visible", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,units,visible", "elm");
|
2013-07-26 00:26:17 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,units,hidden", "elm");
|
|
|
|
edje_object_message_signal_process(wd->resize_obj);
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,units,hidden", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,units,hidden", "elm");
|
2013-07-26 00:26:17 -07:00
|
|
|
}
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2016-04-07 00:50:03 -07:00
|
|
|
EOLIAN static const char *
|
2017-06-14 21:29:51 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_range_unit_format_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return sd->units;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_format_set(Eo *obj, Efl_Ui_Slider_Data *sd, const char *indicator)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
eina_stringshare_replace(&sd->indicator, indicator);
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static const char*
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_format_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return sd->indicator;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-14 18:31:25 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_range_min_max_set(Eo *obj, Efl_Ui_Slider_Data *sd, double min, double max)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
if ((sd->val_min == min) && (sd->val_max == max)) return;
|
|
|
|
sd->val_min = min;
|
|
|
|
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;
|
|
|
|
|
|
|
|
_visuals_refresh(obj);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-14 18:31:25 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_range_min_max_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double *min, double *max)
|
2010-03-25 10:27:00 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
if (min) *min = sd->val_min;
|
|
|
|
if (max) *max = sd->val_max;
|
2010-03-25 10:27:00 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-14 18:31:25 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_range_value_set(Eo *obj, Efl_Ui_Slider_Data *sd, double val)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
if (sd->val == val) return;
|
|
|
|
sd->val = val;
|
2017-06-14 21:52:54 -07:00
|
|
|
sd->intvl_from = val;
|
2012-05-03 15:42:54 -07:00
|
|
|
|
|
|
|
if (sd->val < sd->val_min) sd->val = sd->val_min;
|
|
|
|
if (sd->val > sd->val_max) sd->val = sd->val_max;
|
|
|
|
|
|
|
|
_visuals_refresh(obj);
|
2009-02-08 04:34:58 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static double
|
2017-06-14 18:31:25 -07:00
|
|
|
_efl_ui_slider_efl_ui_range_range_value_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2009-02-08 04:34:58 -08:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return sd->val;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_format_function_set(Eo *obj, Efl_Ui_Slider_Data *sd, slider_func_type func, slider_freefunc_type free_func)
|
2009-12-22 04:11:21 -08:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
sd->indicator_format_func = func;
|
|
|
|
sd->indicator_format_free = free_func;
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2011-07-04 12:56:19 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_show_set(Eo *obj, Efl_Ui_Slider_Data *sd, Eina_Bool show)
|
2010-09-28 08:09:19 -07:00
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
if (show)
|
|
|
|
{
|
|
|
|
sd->indicator_show = EINA_TRUE;
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,val,show", "elm");
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,val,show", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,val,show", "elm");
|
2012-05-03 15:42:54 -07:00
|
|
|
}
|
2013-07-25 02:29:59 -07:00
|
|
|
else
|
|
|
|
{
|
2012-05-03 15:42:54 -07:00
|
|
|
sd->indicator_show = EINA_FALSE;
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,val,hide", "elm");
|
2012-07-07 02:44:52 -07:00
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,val,hide", "elm");
|
2016-03-28 01:35:51 -07:00
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,val,hide", "elm");
|
2012-05-03 15:42:54 -07:00
|
|
|
}
|
|
|
|
|
2012-08-06 01:34:39 -07:00
|
|
|
evas_object_smart_changed(obj);
|
2010-09-28 08:09:19 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_show_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2010-09-28 08:09:19 -07:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return sd->indicator_show;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_step_set(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double step)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2013-10-30 02:56:29 -07:00
|
|
|
if (sd->step == step) return;
|
|
|
|
|
|
|
|
if (step < 0.0) step = 0.0;
|
|
|
|
else if (step > 1.0) step = 1.0;
|
|
|
|
|
|
|
|
sd->step = step;
|
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static double
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_step_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2013-10-30 02:56:29 -07:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return sd->step;
|
2013-10-30 02:56:29 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_show_on_focus_set(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, Eina_Bool flag)
|
2013-10-30 02:56:29 -07:00
|
|
|
{
|
2013-12-01 23:19:53 -08:00
|
|
|
if (flag)
|
2015-02-06 04:58:32 -08:00
|
|
|
sd->indicator_visible_mode = ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS;
|
2013-12-01 23:19:53 -08:00
|
|
|
else
|
2015-02-06 04:58:32 -08:00
|
|
|
sd->indicator_visible_mode = ELM_SLIDER_INDICATOR_VISIBLE_MODE_DEFAULT;
|
2013-12-01 23:19:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_show_on_focus_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2013-12-01 23:19:53 -08:00
|
|
|
{
|
2015-02-06 04:58:32 -08:00
|
|
|
return (sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS);
|
2013-12-01 23:19:53 -08:00
|
|
|
}
|
|
|
|
|
2015-03-04 01:45:32 -08:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_visible_mode_set(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, Elm_Slider_Indicator_Visible_Mode indicator_visible_mode)
|
2015-03-04 01:45:32 -08:00
|
|
|
{
|
|
|
|
if (sd->indicator_visible_mode == indicator_visible_mode) return;
|
|
|
|
sd->indicator_visible_mode = indicator_visible_mode;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Elm_Slider_Indicator_Visible_Mode
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_indicator_visible_mode_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2015-03-04 01:45:32 -08:00
|
|
|
{
|
|
|
|
return sd->indicator_visible_mode;
|
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *_pd EINA_UNUSED)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return EINA_FALSE;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *_pd EINA_UNUSED)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2014-03-26 02:46:20 -07:00
|
|
|
return EINA_FALSE;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-08-30 23:20:33 -07:00
|
|
|
_efl_ui_slider_elm_widget_on_focus_update(Eo *obj, Efl_Ui_Slider_Data *sd EINA_UNUSED, Elm_Object_Item *item EINA_UNUSED)
|
2013-12-01 23:19:53 -08:00
|
|
|
{
|
2014-04-03 08:53:19 -07:00
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
2013-12-01 23:19:53 -08:00
|
|
|
|
2017-08-30 23:20:33 -07:00
|
|
|
int_ret = elm_obj_widget_on_focus_update(efl_super(obj, MY_CLASS), NULL);
|
2013-12-01 23:19:53 -08:00
|
|
|
|
2015-02-06 04:58:32 -08:00
|
|
|
if ((sd->indicator_visible_mode == ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS) && elm_widget_focus_get(obj))
|
2013-12-01 23:19:53 -08:00
|
|
|
_popup_show(obj, NULL, NULL, NULL);
|
2015-11-10 14:31:03 -08:00
|
|
|
else if (!elm_widget_focus_get(obj))
|
2013-12-01 23:19:53 -08:00
|
|
|
_popup_hide(obj, NULL, NULL, NULL);
|
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
return int_ret;
|
|
|
|
}
|
2013-02-09 23:52:31 -08:00
|
|
|
|
2014-03-26 02:46:20 -07:00
|
|
|
EOLIAN static void
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_class_constructor(Efl_Class *klass)
|
2014-03-26 02:46:20 -07:00
|
|
|
{
|
2013-11-07 03:44:22 -08:00
|
|
|
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-04-24 02:03:25 -07:00
|
|
|
// A11Y Accessibility
|
|
|
|
|
|
|
|
EOLIAN static void
|
2017-09-11 23:36:24 -07:00
|
|
|
_efl_ui_slider_efl_access_value_value_and_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double *value, const char **text)
|
2014-04-24 02:03:25 -07:00
|
|
|
{
|
|
|
|
if (value) *value = sd->val;
|
|
|
|
if (text) *text = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-09-11 23:36:24 -07:00
|
|
|
_efl_ui_slider_efl_access_value_value_and_text_set(Eo *obj, Efl_Ui_Slider_Data *sd, double value, const char *text EINA_UNUSED)
|
2014-04-24 02:03:25 -07:00
|
|
|
{
|
|
|
|
double oldval = sd->val;
|
|
|
|
|
2016-12-14 03:18:50 -08:00
|
|
|
if (value < sd->val_min) value = sd->val_min;
|
|
|
|
if (value > sd->val_max) value = sd->val_max;
|
2014-04-24 02:03:25 -07:00
|
|
|
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
|
2014-04-24 02:03:25 -07:00
|
|
|
sd->val = value;
|
|
|
|
_visuals_refresh(obj);
|
|
|
|
sd->val = oldval;
|
|
|
|
_slider_update(obj, EINA_TRUE);
|
2017-06-12 00:06:22 -07:00
|
|
|
efl_event_callback_legacy_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
|
2014-04-24 02:03:25 -07:00
|
|
|
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2017-09-11 23:36:24 -07:00
|
|
|
_efl_ui_slider_efl_access_value_range_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double *lower, double *upper, const char **descr)
|
2014-04-24 02:03:25 -07:00
|
|
|
{
|
|
|
|
if (lower) *lower = sd->val_min;
|
|
|
|
if (upper) *upper = sd->val_max;
|
|
|
|
if (descr) *descr = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static double
|
2017-09-11 23:36:24 -07:00
|
|
|
_efl_ui_slider_efl_access_value_increment_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
|
2014-04-24 02:03:25 -07:00
|
|
|
{
|
|
|
|
return sd->step;
|
|
|
|
}
|
|
|
|
|
2014-07-25 01:33:19 -07:00
|
|
|
EOLIAN const Elm_Atspi_Action *
|
2017-06-12 00:06:22 -07:00
|
|
|
_efl_ui_slider_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *pd EINA_UNUSED)
|
2014-07-25 01:33:19 -07:00
|
|
|
{
|
|
|
|
static Elm_Atspi_Action atspi_actions[] = {
|
|
|
|
{ "drag,left", "drag", "left", _key_action_drag},
|
|
|
|
{ "drag,right", "drag", "right", _key_action_drag},
|
|
|
|
{ "drag,up", "drag", "up", _key_action_drag},
|
|
|
|
{ "drag,down", "drag", "down", _key_action_drag},
|
|
|
|
{ NULL, NULL, NULL, NULL}
|
|
|
|
};
|
|
|
|
return &atspi_actions[0];
|
|
|
|
}
|
|
|
|
|
2014-04-24 02:03:25 -07:00
|
|
|
// A11Y Accessibility - END
|
|
|
|
|
2017-09-12 02:25:41 -07:00
|
|
|
/* Standard widget overrides */
|
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
ELM_PART_TEXT_DEFAULT_IMPLEMENT(efl_ui_slider, Efl_Ui_Slider_Data)
|
2017-09-12 02:25:41 -07:00
|
|
|
|
2017-06-21 22:00:58 -07:00
|
|
|
/* Efl.Part begin */
|
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
EOLIAN static Eo *
|
|
|
|
_efl_ui_slider_efl_part_part(const Eo *obj, Efl_Ui_Slider_Data *sd EINA_UNUSED, const char *part)
|
2017-06-21 22:00:58 -07:00
|
|
|
{
|
2017-09-19 05:46:59 -07:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
2017-06-21 22:00:58 -07:00
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
if (eina_streq(part, "span"))
|
|
|
|
return ELM_PART_OVERRIDE_IMPLEMENT(EFL_UI_SLIDER_PART_CLASS);
|
2017-06-21 22:00:58 -07:00
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
return efl_part(efl_super(obj, MY_CLASS), part);
|
2017-06-21 22:00:58 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_span_size_set(Eo *obj, Efl_Ui_Slider_Data *sd, int w, int h)
|
|
|
|
{
|
|
|
|
Evas_Coord size;
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2017-06-21 22:00:58 -07:00
|
|
|
size = w;
|
|
|
|
else
|
|
|
|
size = h;
|
|
|
|
|
|
|
|
if (sd->size == size) return;
|
|
|
|
sd->size = size;
|
|
|
|
|
|
|
|
if (sd->indicator_show)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,val,show", "elm");
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,val,show", "elm");
|
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,val,show", "elm");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,val,hide", "elm");
|
|
|
|
if (sd->popup)
|
|
|
|
edje_object_signal_emit(sd->popup, "elm,state,val,hide", "elm");
|
|
|
|
if (sd->popup2)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,val,hide", "elm");
|
|
|
|
}
|
|
|
|
|
|
|
|
evas_object_smart_changed(obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN void
|
2017-09-19 04:02:26 -07:00
|
|
|
_efl_ui_slider_part_efl_gfx_size_hint_hint_min_set(Eo *obj, void *_pd EINA_UNUSED, Eina_Size2D sz)
|
2017-06-21 22:00:58 -07:00
|
|
|
{
|
2017-09-19 04:02:26 -07:00
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
2017-06-21 22:00:58 -07:00
|
|
|
Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS);
|
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
EINA_SAFETY_ON_FALSE_RETURN(eina_streq(pd->part, "span"));
|
2017-09-17 22:35:22 -07:00
|
|
|
_span_size_set(pd->obj, sd, sz.w, sz.h);
|
2017-06-21 22:00:58 -07:00
|
|
|
}
|
|
|
|
|
2017-09-17 22:35:22 -07:00
|
|
|
EOLIAN Eina_Size2D
|
2017-09-19 04:02:26 -07:00
|
|
|
_efl_ui_slider_part_efl_gfx_size_hint_hint_min_get(Eo *obj, void *_pd EINA_UNUSED)
|
2017-06-21 22:00:58 -07:00
|
|
|
{
|
2017-09-19 04:02:26 -07:00
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
2017-06-21 22:00:58 -07:00
|
|
|
Efl_Ui_Slider_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_SLIDER_CLASS);
|
2017-09-19 05:46:59 -07:00
|
|
|
Eina_Size2D ret = { 0, 0 };
|
2017-06-21 22:00:58 -07:00
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
EINA_SAFETY_ON_FALSE_GOTO(eina_streq(pd->part, "span"), end);
|
2017-08-09 08:01:32 -07:00
|
|
|
if (_is_horizontal(sd->dir))
|
2017-09-19 05:46:59 -07:00
|
|
|
ret = EINA_SIZE2D(sd->size, 1);
|
2017-06-21 22:00:58 -07:00
|
|
|
else
|
2017-09-19 05:46:59 -07:00
|
|
|
ret = EINA_SIZE2D(1, sd->size);
|
|
|
|
|
|
|
|
end:
|
|
|
|
return ret;
|
2017-06-21 22:00:58 -07:00
|
|
|
}
|
|
|
|
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#include "efl_ui_slider_part.eo.c"
|
2017-06-21 22:00:58 -07:00
|
|
|
/* Efl.Part end */
|
|
|
|
|
2017-06-20 23:33:16 -07:00
|
|
|
/* Legacy APIs */
|
2017-05-18 01:52:17 -07:00
|
|
|
|
2017-06-21 19:11:50 -07:00
|
|
|
EAPI Evas_Object *
|
|
|
|
elm_slider_add(Evas_Object *parent)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
2017-07-06 00:47:41 -07:00
|
|
|
return efl_add(MY_CLASS, parent, efl_canvas_object_legacy_ctor(efl_added));
|
2017-06-21 19:11:50 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size)
|
|
|
|
{
|
|
|
|
efl_ui_range_span_size_set(obj, size);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Evas_Coord
|
|
|
|
elm_slider_span_size_get(const Evas_Object *obj)
|
|
|
|
{
|
|
|
|
return efl_ui_range_span_size_get(obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_unit_format_set(Evas_Object *obj, const char *units)
|
|
|
|
{
|
|
|
|
efl_ui_range_unit_format_set(obj, units);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI const char *
|
|
|
|
elm_slider_unit_format_get(const Evas_Object *obj)
|
|
|
|
{
|
|
|
|
return efl_ui_range_unit_format_get(obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_horizontal_set(Evas_Object *obj, Eina_Bool horizontal)
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
Efl_Ui_Dir dir;
|
2017-06-21 19:11:50 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
dir = _direction_get(horizontal, _is_inverted(sd->dir));
|
2017-06-21 19:11:50 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
efl_ui_direction_set(obj, dir);
|
2017-06-21 19:11:50 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_slider_horizontal_get(const Evas_Object *obj)
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
Efl_Ui_Dir dir;
|
|
|
|
dir = efl_ui_direction_get(obj);
|
2017-06-21 19:11:50 -07:00
|
|
|
|
|
|
|
return _is_horizontal(dir);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_value_set(Evas_Object *obj, double val)
|
|
|
|
{
|
|
|
|
efl_ui_range_value_set(obj, val);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI double
|
|
|
|
elm_slider_value_get(const Evas_Object *obj)
|
|
|
|
{
|
|
|
|
return efl_ui_range_value_get(obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_inverted_set(Evas_Object *obj, Eina_Bool inverted)
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
Efl_Ui_Dir dir;
|
2017-06-21 19:11:50 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
dir = _direction_get(_is_horizontal(sd->dir), inverted);
|
2017-06-21 19:11:50 -07:00
|
|
|
|
2017-08-09 08:01:32 -07:00
|
|
|
efl_ui_direction_set(obj, dir);
|
2017-06-21 19:11:50 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_slider_inverted_get(const Evas_Object *obj)
|
|
|
|
{
|
2017-08-09 08:01:32 -07:00
|
|
|
Efl_Ui_Dir dir;
|
|
|
|
dir = efl_ui_direction_get(obj);
|
2017-06-21 19:11:50 -07:00
|
|
|
|
|
|
|
return _is_inverted(dir);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_units_format_function_set(Evas_Object *obj, slider_func_type func, slider_freefunc_type free_func)
|
|
|
|
{
|
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
sd->units_format_func = func;
|
|
|
|
sd->units_format_free = free_func;
|
|
|
|
|
|
|
|
evas_object_smart_changed(obj);
|
|
|
|
}
|
|
|
|
|
2017-06-20 23:33:16 -07:00
|
|
|
EAPI void
|
|
|
|
elm_slider_range_enabled_set(Evas_Object *obj, Eina_Bool enable)
|
|
|
|
{
|
2017-09-12 01:29:18 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (sd->intvl_enable == enable) return;
|
|
|
|
|
|
|
|
sd->intvl_enable = enable;
|
|
|
|
elm_obj_widget_theme_apply(obj);
|
|
|
|
if (sd->intvl_enable)
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,slider,range,enable", "elm");
|
|
|
|
if (sd->indicator_show)
|
|
|
|
edje_object_signal_emit(sd->popup2, "elm,state,val,show", "elm");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_layout_signal_emit(obj, "elm,slider,range,disable", "elm");
|
|
|
|
ELM_SAFE_FREE(sd->popup2, evas_object_del);
|
|
|
|
}
|
|
|
|
|
2017-06-20 23:33:16 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_slider_range_enabled_get(const Evas_Object *obj)
|
|
|
|
{
|
2017-09-12 01:29:18 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, pd);
|
|
|
|
return pd->intvl_enable;
|
2017-06-20 23:33:16 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_range_set(Evas_Object *obj, double from, double to)
|
|
|
|
{
|
2017-09-12 01:29:18 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, pd);
|
|
|
|
pd->intvl_from = from;
|
|
|
|
pd->val = from;
|
|
|
|
pd->intvl_to = to;
|
|
|
|
|
|
|
|
if (pd->intvl_from < pd->val_min) pd->intvl_from = pd->val_min;
|
|
|
|
if (pd->intvl_to > pd->val_max) pd->intvl_to = pd->val_max;
|
|
|
|
|
|
|
|
_visuals_refresh(obj);
|
2017-06-20 23:33:16 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_range_get(const Evas_Object *obj, double *from, double *to)
|
|
|
|
{
|
2017-09-12 01:29:18 -07:00
|
|
|
EFL_UI_SLIDER_DATA_GET(obj, pd);
|
|
|
|
if (from) *from = fmin(pd->intvl_from, pd->intvl_to);
|
|
|
|
if (to) *to = fmax(pd->intvl_from, pd->intvl_to);
|
2017-06-20 23:33:16 -07:00
|
|
|
}
|
2017-05-18 01:52:17 -07:00
|
|
|
|
2017-06-12 22:59:05 -07:00
|
|
|
EAPI void
|
|
|
|
elm_slider_min_max_set(Evas_Object *obj, double min, double max)
|
|
|
|
{
|
2017-06-14 18:31:25 -07:00
|
|
|
efl_ui_range_min_max_set(obj, min, max);
|
2017-06-12 22:59:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_slider_min_max_get(const Evas_Object *obj, double *min, double *max)
|
|
|
|
{
|
2017-06-14 18:31:25 -07:00
|
|
|
efl_ui_range_min_max_get(obj, min, max);
|
2017-06-12 22:59:05 -07:00
|
|
|
}
|
|
|
|
|
2017-06-20 23:33:16 -07:00
|
|
|
/* Internal EO APIs and hidden overrides */
|
|
|
|
|
2017-09-19 05:46:59 -07:00
|
|
|
ELM_LAYOUT_CONTENT_ALIASES_IMPLEMENT(efl_ui_slider)
|
|
|
|
ELM_LAYOUT_TEXT_ALIASES_IMPLEMENT(efl_ui_slider)
|
2017-07-27 23:35:10 -07:00
|
|
|
|
2017-06-20 23:33:16 -07:00
|
|
|
#define EFL_UI_SLIDER_EXTRA_OPS \
|
2017-09-19 05:46:59 -07:00
|
|
|
ELM_LAYOUT_CONTENT_ALIASES_OPS(efl_ui_slider), \
|
|
|
|
ELM_LAYOUT_TEXT_ALIASES_OPS(efl_ui_slider), \
|
2017-08-07 00:13:38 -07:00
|
|
|
ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_slider), \
|
2017-06-20 23:33:16 -07:00
|
|
|
EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_slider)
|
|
|
|
|
2017-06-12 00:06:22 -07:00
|
|
|
#include "efl_ui_slider.eo.c"
|