parent
fc77e5d854
commit
06cba940f0
|
@ -13,12 +13,12 @@ typedef struct _E_Smart_Data E_Smart_Data;
|
||||||
typedef struct _E_Slider_Special_Value E_Slider_Special_Value;
|
typedef struct _E_Slider_Special_Value E_Slider_Special_Value;
|
||||||
|
|
||||||
struct _E_Smart_Data
|
struct _E_Smart_Data
|
||||||
{
|
{
|
||||||
Evas_Coord x, y, w, h;
|
Evas_Coord x, y, w, h;
|
||||||
|
|
||||||
Evas_Object *smart_obj;
|
Evas_Object *smart_obj;
|
||||||
Evas_Object *edje_obj;
|
Evas_Object *edje_obj;
|
||||||
double val, val_min, val_max, step_size;
|
double val, val_min, val_max, val_range, step_size;
|
||||||
int reversed, step_count, horizontal;
|
int reversed, step_count, horizontal;
|
||||||
int direction;
|
int direction;
|
||||||
const char *format;
|
const char *format;
|
||||||
|
@ -113,6 +113,7 @@ e_slider_value_range_set(Evas_Object *obj, double min, double max)
|
||||||
sd->val_min = min;
|
sd->val_min = min;
|
||||||
sd->val_max = max;
|
sd->val_max = max;
|
||||||
if (sd->val_max < sd->val_min) sd->val_min = sd->val_max;
|
if (sd->val_max < sd->val_min) sd->val_min = sd->val_max;
|
||||||
|
sd->val_range = sd->val_max - sd->val_min;
|
||||||
sd->direction = 0;
|
sd->direction = 0;
|
||||||
_e_smart_value_limit(sd);
|
_e_smart_value_limit(sd);
|
||||||
_e_smart_value_update_now(sd);
|
_e_smart_value_update_now(sd);
|
||||||
|
@ -130,14 +131,15 @@ EAPI void
|
||||||
e_slider_value_step_size_set(Evas_Object *obj, double step_size)
|
e_slider_value_step_size_set(Evas_Object *obj, double step_size)
|
||||||
{
|
{
|
||||||
double step;
|
double step;
|
||||||
|
|
||||||
API_ENTRY return;
|
API_ENTRY return;
|
||||||
if (step_size < 0.0) step_size = 0.0;
|
if (step_size < 0.0) step_size = 0.0;
|
||||||
sd->step_size = step_size;
|
sd->step_size = step_size;
|
||||||
step = 0.0;
|
step = 0.0;
|
||||||
if (sd->val_max > sd->val_min)
|
if (sd->val_range > 0.0)
|
||||||
step = step_size / (sd->val_max - sd->val_min);
|
step = step_size / sd->val_range;
|
||||||
edje_object_part_drag_step_set(sd->edje_obj, "e.dragable.slider", step, step);
|
edje_object_part_drag_step_set
|
||||||
|
(sd->edje_obj, "e.dragable.slider", step, step);
|
||||||
sd->direction = 0;
|
sd->direction = 0;
|
||||||
_e_smart_value_limit(sd);
|
_e_smart_value_limit(sd);
|
||||||
_e_smart_value_update_now(sd);
|
_e_smart_value_update_now(sd);
|
||||||
|
@ -171,7 +173,7 @@ EAPI void
|
||||||
e_slider_value_format_display_set(Evas_Object *obj, const char *format)
|
e_slider_value_format_display_set(Evas_Object *obj, const char *format)
|
||||||
{
|
{
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
|
|
||||||
API_ENTRY return;
|
API_ENTRY return;
|
||||||
if (((sd->format) && (!format)) || ((!sd->format) && (format))) changed = 1;
|
if (((sd->format) && (!format)) || ((!sd->format) && (format))) changed = 1;
|
||||||
if (sd->format) eina_stringshare_del(sd->format);
|
if (sd->format) eina_stringshare_del(sd->format);
|
||||||
|
@ -246,12 +248,10 @@ e_slider_special_value_add(Evas_Object *obj, double value, double error, const c
|
||||||
static int
|
static int
|
||||||
_e_smart_set_timer(void *data)
|
_e_smart_set_timer(void *data)
|
||||||
{
|
{
|
||||||
E_Smart_Data *sd;
|
E_Smart_Data *sd = data;
|
||||||
double pos = 0.0;
|
double pos = 0.0;
|
||||||
|
|
||||||
sd = data;
|
if (sd->val_range > 0.0) pos = (sd->val - sd->val_min) / sd->val_range;
|
||||||
if (sd->val_max > sd->val_min)
|
|
||||||
pos = (sd->val - sd->val_min) / (sd->val_max - sd->val_min);
|
|
||||||
if (pos < 0.0) pos = 0.0;
|
if (pos < 0.0) pos = 0.0;
|
||||||
else if (pos > 1.0) pos = 1.0;
|
else if (pos > 1.0) pos = 1.0;
|
||||||
if (sd->reversed) pos = 1.0 - pos;
|
if (sd->reversed) pos = 1.0 - pos;
|
||||||
|
@ -278,11 +278,12 @@ static void
|
||||||
_e_smart_value_fetch(E_Smart_Data *sd)
|
_e_smart_value_fetch(E_Smart_Data *sd)
|
||||||
{
|
{
|
||||||
double posx = 0.0, posy = 0.0, pos = 0.0;
|
double posx = 0.0, posy = 0.0, pos = 0.0;
|
||||||
|
|
||||||
edje_object_part_drag_value_get(sd->edje_obj, "e.dragable.slider", &posx, &posy);
|
edje_object_part_drag_value_get
|
||||||
|
(sd->edje_obj, "e.dragable.slider", &posx, &posy);
|
||||||
if (sd->horizontal) pos = posx;
|
if (sd->horizontal) pos = posx;
|
||||||
else pos = posy;
|
else pos = posy;
|
||||||
sd->val = (pos * (sd->val_max - sd->val_min)) + sd->val_min;
|
sd->val = (pos * sd->val_range) + sd->val_min;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -290,13 +291,13 @@ _e_smart_value_limit(E_Smart_Data *sd)
|
||||||
{
|
{
|
||||||
if (sd->val < sd->val_min) sd->val = sd->val_min;
|
if (sd->val < sd->val_min) sd->val = sd->val_min;
|
||||||
if (sd->val > sd->val_max) sd->val = sd->val_max;
|
if (sd->val > sd->val_max) sd->val = sd->val_max;
|
||||||
if (sd->val_max > sd->val_min)
|
if (sd->val_range > 0.0)
|
||||||
{
|
{
|
||||||
if (sd->step_count > 0)
|
if (sd->step_count > 0)
|
||||||
{
|
{
|
||||||
double p, s;
|
double p, s;
|
||||||
|
|
||||||
s = (sd->val_max - sd->val_min) / sd->step_count;
|
s = sd->val_range / sd->step_count;
|
||||||
p = sd->val / s;
|
p = sd->val / s;
|
||||||
if (sd->direction == 1)
|
if (sd->direction == 1)
|
||||||
p = ceil(p);
|
p = ceil(p);
|
||||||
|
@ -398,9 +399,7 @@ _e_smart_event_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE
|
||||||
{
|
{
|
||||||
if (sd->step_count > 0)
|
if (sd->step_count > 0)
|
||||||
{
|
{
|
||||||
double s;
|
double s = sd->val_range / sd->step_count;
|
||||||
|
|
||||||
s = (sd->val_max - sd->val_min) / sd->step_count;
|
|
||||||
edje_object_part_drag_step(sd->edje_obj, "e.dragable.slider", -s, -s);
|
edje_object_part_drag_step(sd->edje_obj, "e.dragable.slider", -s, -s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -414,9 +413,7 @@ _e_smart_event_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE
|
||||||
{
|
{
|
||||||
if (sd->step_count > 0)
|
if (sd->step_count > 0)
|
||||||
{
|
{
|
||||||
double s;
|
double s = sd->val_range / sd->step_count;
|
||||||
|
|
||||||
s = (sd->val_max - sd->val_min) / sd->step_count;
|
|
||||||
edje_object_part_drag_step(sd->edje_obj, "e.dragable.slider", s, s);
|
edje_object_part_drag_step(sd->edje_obj, "e.dragable.slider", s, s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -448,39 +445,40 @@ static void
|
||||||
_e_smart_add(Evas_Object *obj)
|
_e_smart_add(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
E_Smart_Data *sd;
|
E_Smart_Data *sd;
|
||||||
|
|
||||||
sd = calloc(1, sizeof(E_Smart_Data));
|
sd = calloc(1, sizeof(E_Smart_Data));
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
evas_object_smart_data_set(obj, sd);
|
evas_object_smart_data_set(obj, sd);
|
||||||
|
|
||||||
sd->smart_obj = obj;
|
sd->smart_obj = obj;
|
||||||
sd->x = 0;
|
sd->x = 0;
|
||||||
sd->y = 0;
|
sd->y = 0;
|
||||||
sd->w = 0;
|
sd->w = 0;
|
||||||
sd->h = 0;
|
sd->h = 0;
|
||||||
|
|
||||||
sd->val = 0.0;
|
sd->val = 0.0;
|
||||||
sd->val_min = 0.0;
|
sd->val_min = 0.0;
|
||||||
sd->val_max = 1.0;
|
sd->val_max = 1.0;
|
||||||
|
sd->val_range = 1.0;
|
||||||
sd->step_size = 0.01;
|
sd->step_size = 0.01;
|
||||||
sd->reversed = 0;
|
sd->reversed = 0;
|
||||||
sd->step_count = 0;
|
sd->step_count = 0;
|
||||||
sd->horizontal = 0;
|
sd->horizontal = 0;
|
||||||
sd->format = NULL;
|
sd->format = NULL;
|
||||||
sd->direction = 0;
|
sd->direction = 0;
|
||||||
|
|
||||||
sd->edje_obj = edje_object_add(evas_object_evas_get(obj));
|
sd->edje_obj = edje_object_add(evas_object_evas_get(obj));
|
||||||
e_theme_edje_object_set(sd->edje_obj, "base/theme/widgets",
|
e_theme_edje_object_set(sd->edje_obj, "base/theme/widgets",
|
||||||
"e/widgets/slider_vertical");
|
"e/widgets/slider_vertical");
|
||||||
edje_object_size_min_calc(sd->edje_obj, &(sd->minw), &(sd->minh));
|
edje_object_size_min_calc(sd->edje_obj, &(sd->minw), &(sd->minh));
|
||||||
evas_object_smart_member_add(sd->edje_obj, obj);
|
evas_object_smart_member_add(sd->edje_obj, obj);
|
||||||
|
|
||||||
edje_object_signal_callback_add(sd->edje_obj, "drag", "*", _e_smart_signal_cb_drag, sd);
|
edje_object_signal_callback_add(sd->edje_obj, "drag", "*", _e_smart_signal_cb_drag, sd);
|
||||||
edje_object_signal_callback_add(sd->edje_obj, "drag,start", "*", _e_smart_signal_cb_drag_start, sd);
|
edje_object_signal_callback_add(sd->edje_obj, "drag,start", "*", _e_smart_signal_cb_drag_start, sd);
|
||||||
edje_object_signal_callback_add(sd->edje_obj, "drag,stop", "*", _e_smart_signal_cb_drag_stop, sd);
|
edje_object_signal_callback_add(sd->edje_obj, "drag,stop", "*", _e_smart_signal_cb_drag_stop, sd);
|
||||||
edje_object_signal_callback_add(sd->edje_obj, "drag,step", "*", _e_smart_signal_cb_drag_stop, sd);
|
edje_object_signal_callback_add(sd->edje_obj, "drag,step", "*", _e_smart_signal_cb_drag_stop, sd);
|
||||||
edje_object_signal_callback_add(sd->edje_obj, "drag,set", "*", _e_smart_signal_cb_drag_stop, sd);
|
edje_object_signal_callback_add(sd->edje_obj, "drag,set", "*", _e_smart_signal_cb_drag_stop, sd);
|
||||||
|
|
||||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN, _e_smart_event_key_down, sd);
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN, _e_smart_event_key_down, sd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,7 +552,7 @@ _e_smart_clip_unset(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
INTERNAL_ENTRY;
|
INTERNAL_ENTRY;
|
||||||
evas_object_clip_unset(sd->edje_obj);
|
evas_object_clip_unset(sd->edje_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* never need to touch this */
|
/* never need to touch this */
|
||||||
|
|
||||||
|
@ -579,4 +577,3 @@ _e_smart_init(void)
|
||||||
_e_smart = evas_smart_class_new(&sc);
|
_e_smart = evas_smart_class_new(&sc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue