oooh fix some infinite loops in entry .. and oh so much make color
specture.selector/sliders WORK again... properly. SVN revision: 79557
This commit is contained in:
parent
4d880b56ec
commit
cff3bfb61b
|
@ -39,7 +39,7 @@ e_color_dialog_new(E_Container *con, const E_Color *color, Eina_Bool alpha_enabl
|
|||
o = e_widget_csel_add(dia->dia->win->evas, dia->color, alpha_enabled);
|
||||
evas_object_show(o);
|
||||
e_widget_size_min_get(o, &mw, &mh);
|
||||
e_dialog_content_set(dia->dia, o, 460, 260);
|
||||
e_dialog_content_set(dia->dia, o, mw, mh);
|
||||
e_widget_on_change_hook_set(o, _e_color_dialog_cb_csel_change, dia);
|
||||
|
||||
/* buttons at the bottom */
|
||||
|
|
|
@ -17,6 +17,7 @@ struct _E_Entry_Smart_Data
|
|||
Evas_Coord theme_height;
|
||||
int preedit_start_pos;
|
||||
int preedit_end_pos;
|
||||
int changing;
|
||||
Eina_Bool enabled : 1;
|
||||
Eina_Bool noedit : 1;
|
||||
Eina_Bool focused : 1;
|
||||
|
@ -105,6 +106,7 @@ e_entry_text_set(Evas_Object *entry, const char *_text)
|
|||
{
|
||||
E_Entry_Smart_Data *sd;
|
||||
char *text = NULL;
|
||||
const char *otext;
|
||||
|
||||
if (evas_object_smart_smart_get(entry) != _e_entry_smart) SMARTERRNR();
|
||||
if ((!entry) || (!(sd = evas_object_smart_data_get(entry))))
|
||||
|
@ -113,12 +115,15 @@ e_entry_text_set(Evas_Object *entry, const char *_text)
|
|||
text = evas_textblock_text_utf8_to_markup(
|
||||
edje_object_part_object_get(sd->entry_object, ENTRY_PART_NAME),
|
||||
_text);
|
||||
if ((text) && (_text) && (!strcmp(text, _text))) return;
|
||||
if ((!text) && (!_text)) return;
|
||||
otext = edje_object_part_text_get(sd->entry_object, ENTRY_PART_NAME);
|
||||
if ((text) && (otext) && (!strcmp(text, otext))) return;
|
||||
if ((!text) && (!otext)) return;
|
||||
edje_object_part_text_set(sd->entry_object, ENTRY_PART_NAME, text);
|
||||
sd->changing++;
|
||||
edje_object_message_signal_process(sd->entry_object);
|
||||
sd->changing--;
|
||||
evas_object_smart_callback_call(entry, "changed", NULL);
|
||||
if (text)
|
||||
free(text);
|
||||
if (text) free(text);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -657,7 +662,7 @@ _entry_changed_signal_cb(void *data,
|
|||
|
||||
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
||||
return;
|
||||
|
||||
if (sd->changing) return;
|
||||
evas_object_smart_callback_call(object, "changed", NULL);
|
||||
edje_object_size_min_calc(sd->entry_object, &sd->min_width, &sd->height);
|
||||
_entry_recalc_size(object);
|
||||
|
|
|
@ -128,14 +128,14 @@ _e_wid_cb_color_changed(void *data, Evas_Object *o)
|
|||
}
|
||||
|
||||
/* update the spectrum */
|
||||
if (o != wd->spectrum && changed != -1)
|
||||
if (o != wd->spectrum/* && changed != -1*/)
|
||||
{
|
||||
if (wd->mode == changed ||
|
||||
(wd->mode >= E_COLOR_COMPONENT_H && changed <= E_COLOR_COMPONENT_B) ||
|
||||
(wd->mode <= E_COLOR_COMPONENT_B && changed >= E_COLOR_COMPONENT_H))
|
||||
e_widget_spectrum_update(wd->spectrum, 1);
|
||||
else
|
||||
e_widget_spectrum_update(wd->spectrum, 0);
|
||||
e_widget_spectrum_update(wd->spectrum, 1);
|
||||
}
|
||||
|
||||
e_widget_color_well_update(wd->well);
|
||||
|
@ -152,26 +152,23 @@ _e_wid_cb_color_changed(void *data, Evas_Object *o)
|
|||
case E_COLOR_COMPONENT_R:
|
||||
snprintf(buf, 10, "%i", wd->cv->r);
|
||||
break;
|
||||
|
||||
case E_COLOR_COMPONENT_G:
|
||||
snprintf(buf, 10, "%i", wd->cv->g);
|
||||
break;
|
||||
|
||||
case E_COLOR_COMPONENT_B:
|
||||
snprintf(buf, 10, "%i", wd->cv->b);
|
||||
break;
|
||||
|
||||
case E_COLOR_COMPONENT_H:
|
||||
snprintf(buf, 10, "%.0f", wd->cv->h);
|
||||
break;
|
||||
|
||||
case E_COLOR_COMPONENT_S:
|
||||
snprintf(buf, 10, "%.2f", wd->cv->s);
|
||||
break;
|
||||
|
||||
case E_COLOR_COMPONENT_V:
|
||||
snprintf(buf, 10, "%.2f", wd->cv->v);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
e_widget_entry_text_set(eo, buf);
|
||||
i++;
|
||||
|
@ -197,6 +194,7 @@ e_widget_csel_add(Evas *evas, E_Color *color, Eina_Bool alpha_enabled)
|
|||
E_Radio_Group *grp = NULL;
|
||||
char *labels[6] = { N_("R"), N_("G"), N_("B"), N_("H"), N_("S"), N_("V") };
|
||||
E_Widget_Data *wd;
|
||||
Evas_Coord mw, mh;
|
||||
|
||||
obj = e_widget_add(evas);
|
||||
e_widget_del_hook_set(obj, _e_wid_del_hook);
|
||||
|
@ -245,6 +243,9 @@ e_widget_csel_add(Evas *evas, E_Color *color, Eina_Bool alpha_enabled)
|
|||
case E_COLOR_COMPONENT_V:
|
||||
snprintf(wd->values[i], 10, "%.2f", wd->cv->v);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
o = e_widget_radio_add(evas, _(labels[i]), i, grp);
|
||||
|
@ -257,13 +258,14 @@ e_widget_csel_add(Evas *evas, E_Color *color, Eina_Bool alpha_enabled)
|
|||
evas_object_show(o);
|
||||
wd->sliders = eina_list_append(wd->sliders, o);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
|
||||
e_widget_table_object_append(frame, o, 1, i, 1, 1, 1, 1, 1, 0);
|
||||
e_widget_size_min_set(o, 32, 16);
|
||||
e_widget_table_object_append(frame, o, 1, i, 6, 1, 1, 1, 1, 0);
|
||||
|
||||
o = e_widget_entry_add(evas, &(wd->values[i]), NULL, NULL, NULL);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_show(o);
|
||||
wd->entries = eina_list_append(wd->entries, o);
|
||||
e_widget_table_object_append(frame, o, 2, i, 1, 1, 1, 1, 1, 1);
|
||||
e_widget_table_object_append(frame, o, 7, i, 1, 1, 1, 1, 1, 0);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
|
||||
}
|
||||
|
||||
|
@ -274,32 +276,36 @@ e_widget_csel_add(Evas *evas, E_Color *color, Eina_Bool alpha_enabled)
|
|||
o = e_widget_slider_add(evas, 1, 0, "%0.0f", 0, 255, 1, 0, NULL,
|
||||
&(wd->cv->a), 100);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_alpha_changed, wd);
|
||||
e_widget_table_object_append(frame, o, 1, i, 2, 1, 1, 1, 0, 0);
|
||||
e_widget_table_object_append(frame, o, 1, i, 10, 1, 1, 1, 0, 0);
|
||||
}
|
||||
|
||||
e_widget_table_object_append(table, frame, 2, 0, 1, 2, 1, 0, 1, 0);
|
||||
|
||||
o = e_widget_spectrum_add(evas, wd->mode, wd->cv);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_show(o);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
|
||||
wd->spectrum = o;
|
||||
e_widget_table_object_append(table, o, 1, 1, 1, 1, 1, 1, 1, 1);
|
||||
e_widget_size_min_set(o, 120, 120);
|
||||
e_widget_table_object_append(table, o, 0, 0, 1, 2, 1, 1, 1, 1);
|
||||
|
||||
o = e_widget_cslider_add(evas, wd->mode, wd->cv, 1, 1);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
|
||||
e_widget_size_min_set(o, 30, 50);
|
||||
e_widget_size_min_set(o, 16, 16);
|
||||
evas_object_show(o);
|
||||
wd->vert = o;
|
||||
e_widget_table_object_append(table, o, 2, 1, 1, 1, 0, 1, 0, 1);
|
||||
|
||||
e_widget_table_object_append(table, frame, 3, 1, 1, 1, 1, 1, 1, 1);
|
||||
e_widget_table_object_append(table, o, 1, 0, 1, 2, 0, 1, 0, 1);
|
||||
|
||||
o = e_widget_color_well_add(evas, wd->cv, 0);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_show(o);
|
||||
evas_object_resize(o, 20, 20);
|
||||
wd->well = o;
|
||||
e_widget_table_object_append(table, o, 3, 2, 1, 1, 1, 1, 1, 1);
|
||||
e_widget_size_min_set(o, 32, 32);
|
||||
e_widget_table_object_append(table, o, 0, 2, 3, 1, 1, 1, 0, 0);
|
||||
|
||||
e_widget_size_min_get(table, &mw, &mh);
|
||||
e_widget_size_min_set(obj, mw, mh);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
|
|
@ -8,8 +8,6 @@ struct _E_Widget_Data
|
|||
Evas_Object *o_grad;
|
||||
Evas_Object *o_event;
|
||||
|
||||
Eina_List *o_hgrad;
|
||||
|
||||
Evas_Coord x, y, w, h;
|
||||
|
||||
int vertical;
|
||||
|
@ -37,9 +35,9 @@ static void _e_wid_cb_drag_start(void *data, Evas_Object *obj, const char *emiss
|
|||
static void _e_wid_cb_drag_stop(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||
static void _e_wid_cb_drag(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||
|
||||
/* static void _e_wid_cb_down(void *data, Evas *e, Evas_Object *obj, void *event_info); */
|
||||
/* static void _e_wid_cb_move(void *data, Evas *e, Evas_Object *obj, void *event_info); */
|
||||
/* static void _e_wid_cb_up(void *data, Evas *e, Evas_Object *obj, void *event_info); */
|
||||
static void _e_wid_cb_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _e_wid_cb_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _e_wid_cb_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
|
||||
Evas_Object *
|
||||
e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int vertical, int fixed)
|
||||
|
@ -63,7 +61,6 @@ e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int ver
|
|||
wd->mode = mode;
|
||||
wd->color = color;
|
||||
wd->prev = calloc(1, sizeof (E_Color));
|
||||
wd->o_hgrad = NULL;
|
||||
|
||||
o = edje_object_add(evas);
|
||||
wd->o_cslider = o;
|
||||
|
@ -76,6 +73,8 @@ e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int ver
|
|||
evas_object_show(o);
|
||||
edje_object_size_min_calc(o, &mw, &mh);
|
||||
e_widget_size_min_set(obj, mw, mh);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _e_wid_move, wd);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _e_wid_resize, wd);
|
||||
|
||||
edje_object_signal_callback_add(wd->o_cslider, "drag,start", "*", _e_wid_cb_drag_start, obj);
|
||||
edje_object_signal_callback_add(wd->o_cslider, "drag", "*", _e_wid_cb_drag, obj);
|
||||
|
@ -86,19 +85,19 @@ e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int ver
|
|||
e_widget_resize_object_set(obj, o);
|
||||
|
||||
/* add gradient obj */
|
||||
o = evas_object_rectangle_add(evas);
|
||||
o = evas_object_image_filled_add(evas);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
/* evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_cb_down, obj); */
|
||||
/* evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _e_wid_cb_move, obj); */
|
||||
/* evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _e_wid_cb_up, obj); */
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_cb_down, obj);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _e_wid_cb_move, obj);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _e_wid_cb_up, obj);
|
||||
evas_object_color_set(o, 255, 255, 255, 255);
|
||||
wd->o_grad = o;
|
||||
|
||||
edje_object_part_swallow(wd->o_cslider, "e.swallow.content", o);
|
||||
|
||||
o = evas_object_rectangle_add(evas);
|
||||
evas_object_repeat_events_set(o, EINA_TRUE);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _e_wid_move, wd);
|
||||
evas_object_show(o);
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
wd->o_event = o;
|
||||
|
@ -112,11 +111,11 @@ static void
|
|||
_e_wid_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
/* Evas_Coord x, y; */
|
||||
Evas_Coord x, y;
|
||||
|
||||
wd = data;
|
||||
/* evas_object_geometry_get(obj, &x, &y, NULL, NULL); */
|
||||
/* evas_object_move(wd->o_grad, x, y); */
|
||||
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
|
||||
evas_object_move(wd->o_event, x, y);
|
||||
_e_wid_update(wd);
|
||||
}
|
||||
|
||||
|
@ -124,11 +123,11 @@ static void
|
|||
_e_wid_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
/* Evas_Coord w, h; */
|
||||
Evas_Coord w, h;
|
||||
|
||||
wd = data;
|
||||
/* evas_object_geometry_get(obj, NULL, NULL, &w, &h); */
|
||||
/* evas_object_resize(wd->o_grad, w, h); */
|
||||
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
|
||||
evas_object_resize(wd->o_event, w, h);
|
||||
_e_wid_update(wd);
|
||||
}
|
||||
|
||||
|
@ -217,8 +216,6 @@ _e_wid_update(E_Widget_Data *wd)
|
|||
|
||||
if (changed)
|
||||
{
|
||||
Evas_Object *o;
|
||||
|
||||
if (wd->fixed)
|
||||
_e_wid_update_fixed(wd);
|
||||
else
|
||||
|
@ -227,17 +224,6 @@ _e_wid_update(E_Widget_Data *wd)
|
|||
wd->x = x; wd->y = y;
|
||||
wd->w = w; wd->h = h;
|
||||
memcpy(wd->prev, wd->color, sizeof (E_Color));
|
||||
|
||||
if (wd->mode != E_COLOR_COMPONENT_H)
|
||||
{
|
||||
EINA_LIST_FREE(wd->o_hgrad, o)
|
||||
evas_object_del(o);
|
||||
evas_object_show(wd->o_grad);
|
||||
}
|
||||
else
|
||||
{
|
||||
evas_object_hide(wd->o_grad);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -246,37 +232,70 @@ _e_wid_gradient_set(Evas_Object *o, Eina_Bool orientation,
|
|||
int rf, int gf, int bf,
|
||||
int rt, int gt, int bt)
|
||||
{
|
||||
static Evas_Map *m = NULL;
|
||||
unsigned int *pixels, *p;
|
||||
int x, r, g, b;
|
||||
|
||||
if (!m) m = evas_map_new(4);
|
||||
evas_map_util_points_populate_from_object(m, o);
|
||||
|
||||
if (orientation)
|
||||
{
|
||||
evas_map_point_color_set(m, 0, rf, gf, bf, 255);
|
||||
evas_map_point_color_set(m, 1, rf, gf, bf, 255);
|
||||
evas_map_point_color_set(m, 2, rt, gt, bt, 255);
|
||||
evas_map_point_color_set(m, 3, rt, gt, bt, 255);
|
||||
}
|
||||
if (!orientation)
|
||||
evas_object_image_size_set(o, 256, 1);
|
||||
else
|
||||
evas_object_image_size_set(o, 1, 256);
|
||||
pixels = evas_object_image_data_get(o, EINA_TRUE);
|
||||
if (pixels)
|
||||
{
|
||||
/* Rotate by 270° */
|
||||
evas_map_point_color_set(m, 0, rf, gf, bf, 255);
|
||||
evas_map_point_color_set(m, 1, rt, gt, bt, 255);
|
||||
evas_map_point_color_set(m, 2, rt, gt, bt, 255);
|
||||
evas_map_point_color_set(m, 3, rf, gf, bf, 255);
|
||||
p = pixels;
|
||||
for (x = 0; x < 256; x++)
|
||||
{
|
||||
r = ((rf * (255 - x)) + (rt * x)) / 255;
|
||||
g = ((gf * (255 - x)) + (gt * x)) / 255;
|
||||
b = ((bf * (255 - x)) + (bt * x)) / 255;
|
||||
*p = 0xff000000 | (r << 16) | (g << 8) | (b);
|
||||
p++;
|
||||
}
|
||||
evas_object_image_data_set(o, pixels);
|
||||
evas_object_image_data_update_add(o, 0, 0, 256, 256);
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_map_enable_set(o, 1);
|
||||
evas_object_map_set(o, m);
|
||||
static void
|
||||
_e_wid_gradient_range_set(Evas_Object *o, Eina_Bool orientation,
|
||||
int rf, int gf, int bf,
|
||||
int rt, int gt, int bt,
|
||||
int from, int to)
|
||||
{
|
||||
unsigned int *pixels, *p;
|
||||
int x, r, g, b, v, t;
|
||||
|
||||
if (from < 0) from = 0;
|
||||
if (from > 255) from = 255;
|
||||
if (to < 0) to = 0;
|
||||
if (to > 256) to = 256;
|
||||
if (to <= from) return;
|
||||
if (!orientation)
|
||||
evas_object_image_size_set(o, 256, 1);
|
||||
else
|
||||
evas_object_image_size_set(o, 1, 256);
|
||||
pixels = evas_object_image_data_get(o, EINA_TRUE);
|
||||
if (pixels)
|
||||
{
|
||||
t = to - from;
|
||||
p = pixels + from;
|
||||
for (x = from; x < to; x++)
|
||||
{
|
||||
v = x - from;
|
||||
r = ((rf * (t - v)) + (rt * v)) / t;
|
||||
g = ((gf * (t - v)) + (gt * v)) / t;
|
||||
b = ((bf * (t - v)) + (bt * v)) / t;
|
||||
*p = 0xff000000 | (r << 16) | (g << 8) | (b);
|
||||
p++;
|
||||
}
|
||||
evas_object_image_data_set(o, pixels);
|
||||
evas_object_image_data_update_add(o, 0, 0, 256, 256);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_wid_update_standard(E_Widget_Data *wd)
|
||||
{
|
||||
Evas_Object *o;
|
||||
Eina_List *l;
|
||||
Evas_Coord x, y, w, h;
|
||||
int r, g, b;
|
||||
int rd, gd, bd;
|
||||
int max, min;
|
||||
|
@ -316,40 +335,12 @@ _e_wid_update_standard(E_Widget_Data *wd)
|
|||
break;
|
||||
case E_COLOR_COMPONENT_H:
|
||||
evas_color_hsv_to_rgb(0, wd->color->s, wd->color->v, &max, &min, NULL);
|
||||
|
||||
if (!wd->o_hgrad)
|
||||
{
|
||||
Evas *e;
|
||||
|
||||
e = evas_object_evas_get(wd->o_grad);
|
||||
for (i = 0; i < 6; ++i)
|
||||
wd->o_hgrad = eina_list_append(wd->o_hgrad,
|
||||
evas_object_rectangle_add(e));
|
||||
}
|
||||
|
||||
evas_object_geometry_get(wd->o_grad, &x, &y, &w, &h);
|
||||
evas_object_hide(wd->o_grad);
|
||||
|
||||
i = 0;
|
||||
EINA_LIST_FOREACH(wd->o_hgrad, l, o)
|
||||
{
|
||||
if (wd->vertical)
|
||||
{
|
||||
evas_object_move(o, x, y + (i * h) / 6);
|
||||
evas_object_resize(o, w, h / 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
evas_object_move(o, x + (i * w) / 6, y);
|
||||
evas_object_resize(o, w / 6, h);
|
||||
}
|
||||
|
||||
_e_wid_gradient_set(o, wd->vertical,
|
||||
*grad[i][0], *grad[i][1], *grad[i][2],
|
||||
*grad[i + 1][0], *grad[i + 1][1], *grad[i + 1][2]);
|
||||
evas_object_show(o);
|
||||
i++;
|
||||
}
|
||||
for (i = 0; i < 6; i++)
|
||||
_e_wid_gradient_range_set(wd->o_grad, wd->vertical,
|
||||
*grad[i][0], *grad[i][1], *grad[i][2],
|
||||
*grad[i + 1][0], *grad[i + 1][1], *grad[i + 1][2],
|
||||
((i + 0) * 256) / 6,
|
||||
((i + 1) * 256) / 6);
|
||||
vx = wd->color->h / 360.0;
|
||||
break;
|
||||
case E_COLOR_COMPONENT_S:
|
||||
|
@ -370,7 +361,7 @@ _e_wid_update_standard(E_Widget_Data *wd)
|
|||
rd, gd, bd);
|
||||
vx = wd->color->v;
|
||||
break;
|
||||
case E_COLOR_COMPONENT_MAX:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -383,10 +374,6 @@ _e_wid_update_fixed(E_Widget_Data *wd)
|
|||
{
|
||||
#define GMAX 255
|
||||
#define GMIN 0
|
||||
|
||||
Evas_Object *o;
|
||||
Eina_List *l;
|
||||
Evas_Coord x, y, w, h;
|
||||
unsigned int i;
|
||||
float vx = 0;
|
||||
int grad[7][3] = {
|
||||
|
@ -432,40 +419,12 @@ _e_wid_update_fixed(E_Widget_Data *wd)
|
|||
* 300 x n x
|
||||
* 360 x n n
|
||||
*/
|
||||
|
||||
if (!wd->o_hgrad)
|
||||
{
|
||||
Evas *e;
|
||||
|
||||
e = evas_object_evas_get(wd->o_grad);
|
||||
for (i = 0; i < 6; ++i)
|
||||
wd->o_hgrad = eina_list_append(wd->o_hgrad,
|
||||
evas_object_rectangle_add(e));
|
||||
}
|
||||
|
||||
evas_object_geometry_get(wd->o_grad, &x, &y, &w, &h);
|
||||
evas_object_hide(wd->o_grad);
|
||||
|
||||
i = 0;
|
||||
EINA_LIST_FOREACH(wd->o_hgrad, l, o)
|
||||
{
|
||||
if (wd->vertical)
|
||||
{
|
||||
evas_object_move(o, x, y + (i * h) / 6);
|
||||
evas_object_resize(o, w, h / 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
evas_object_move(o, x + (i * w) / 6, y);
|
||||
evas_object_resize(o, w / 6, h);
|
||||
}
|
||||
|
||||
_e_wid_gradient_set(o, wd->vertical,
|
||||
grad[i][0], grad[i][1], grad[i][2],
|
||||
grad[i + 1][0], grad[i + 1][1], grad[i + 1][2]);
|
||||
evas_object_show(o);
|
||||
i++;
|
||||
}
|
||||
for (i = 0; i < 6; i++)
|
||||
_e_wid_gradient_range_set(wd->o_grad, wd->vertical,
|
||||
grad[i][0], grad[i][1], grad[i][2],
|
||||
grad[i + 1][0], grad[i + 1][1], grad[i + 1][2],
|
||||
((i + 0) * 256) / 6,
|
||||
((i + 1) * 256) / 6);
|
||||
vx = wd->color->h / 360.0;
|
||||
break;
|
||||
case E_COLOR_COMPONENT_S:
|
||||
|
@ -480,7 +439,7 @@ _e_wid_update_fixed(E_Widget_Data *wd)
|
|||
0, 0, 0);
|
||||
vx = wd->color->v;
|
||||
break;
|
||||
case E_COLOR_COMPONENT_MAX:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -588,3 +547,78 @@ _e_wid_cb_drag(void *data, Evas_Object *obj __UNUSED__, const char *emission __U
|
|||
_e_wid_value_set(o_wid, val);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_wid_mouse_handle(Evas_Object *obj, int mx, int my)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
Evas_Coord x, y, w, h;
|
||||
double vx = 0.0, vy = 0.0;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
|
||||
evas_object_geometry_get(wd->o_grad, &x, &y, &w, &h);
|
||||
if (w > 1) vx = (mx - x) / (double)(w - 1);
|
||||
if (h > 1) vy = (my - y) / (double)(h - 1);
|
||||
if (vx > 1) vx = 1;
|
||||
if (vx < 0) vx = 0;
|
||||
if (vy > 1) vy = 1;
|
||||
if (vy < 0) vy = 0;
|
||||
|
||||
|
||||
if (wd->vertical)
|
||||
{
|
||||
_e_wid_value_set(obj, 1.0 - vy);
|
||||
edje_object_part_drag_value_set(wd->o_cslider, "e.dragable.cursor", 0.5, 1.0 - vy);
|
||||
}
|
||||
else
|
||||
{
|
||||
_e_wid_value_set(obj, vx);
|
||||
edje_object_part_drag_value_set(wd->o_cslider, "e.dragable.cursor", vx, 0.5);
|
||||
}
|
||||
e_widget_change(obj);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_e_wid_cb_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Down *ev;
|
||||
Evas_Object *o_wid;
|
||||
E_Widget_Data *wd;
|
||||
|
||||
o_wid = data;
|
||||
wd = e_widget_data_get(o_wid);
|
||||
ev = event_info;
|
||||
|
||||
wd->dragging = 1;
|
||||
_e_wid_mouse_handle(o_wid, ev->canvas.x, ev->canvas.y);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_wid_cb_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
Evas_Object *o_wid;
|
||||
E_Widget_Data *wd;
|
||||
|
||||
o_wid = data;
|
||||
wd = e_widget_data_get(o_wid);
|
||||
wd->dragging = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_wid_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Move *ev;
|
||||
Evas_Object *o_wid;
|
||||
E_Widget_Data *wd;
|
||||
|
||||
o_wid = data;
|
||||
wd = e_widget_data_get(o_wid);
|
||||
ev = event_info;
|
||||
|
||||
if (wd->dragging == 1)
|
||||
{
|
||||
_e_wid_mouse_handle(o_wid, ev->cur.canvas.x, ev->cur.canvas.y);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,9 +68,9 @@ e_widget_spectrum_add(Evas *evas, E_Color_Component mode, E_Color *cv)
|
|||
evas_object_show(o);
|
||||
wd->o_spectrum = o;
|
||||
edje_object_part_swallow(wd->o_edje, "e.swallow.content", o);
|
||||
edje_extern_object_min_size_set(o, 100, 100);
|
||||
|
||||
o = evas_object_rectangle_add(evas);
|
||||
evas_object_repeat_events_set(o, EINA_TRUE);
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_show(o);
|
||||
|
|
Loading…
Reference in New Issue