make csel a proper widget instead of just a wrapper around table.
pass in a color struct to update (use the change hook to know when changes have occured) use a short timer instead of an idler to update the spectrum image data -- ideally, we would add a pre/post render hooks for smart objects. then we could redraw int he pre-render callback. SVN revision: 24676
This commit is contained in:
parent
4d0d5bb122
commit
ce206f330e
|
@ -14,7 +14,7 @@ struct _E_Spectrum
|
|||
E_Color_Component mode;
|
||||
|
||||
E_Color *cv;
|
||||
int draw_queued;
|
||||
Ecore_Job *draw_timer;
|
||||
};
|
||||
|
||||
static int _e_spectrum_redraw(void *d);
|
||||
|
@ -36,8 +36,6 @@ _e_spectrum_smart_add(Evas_Object *o)
|
|||
evas_object_image_size_set(sp->o_spectrum, sp->iw, sp->ih);
|
||||
evas_object_image_alpha_set(sp->o_spectrum, 1);
|
||||
|
||||
ecore_idler_add(_e_spectrum_redraw, sp);
|
||||
|
||||
evas_object_smart_member_add(sp->o_spectrum, o);
|
||||
}
|
||||
|
||||
|
@ -52,6 +50,8 @@ _e_spectrum_smart_del(Evas_Object *o)
|
|||
evas_object_del(sp->o_spectrum);
|
||||
evas_object_del(sp->o_event);
|
||||
evas_object_del(sp->o_cursor);
|
||||
|
||||
if (sp->draw_timer) ecore_timer_del(sp->draw_timer);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -257,7 +257,6 @@ _e_spectrum_redraw(void *d)
|
|||
int r, g, b;
|
||||
float vx, vy, vz;
|
||||
|
||||
if (!sp->draw_queued) return 1;
|
||||
data = evas_object_image_data_get(sp->o_spectrum, 1);
|
||||
if (!data) return;
|
||||
|
||||
|
@ -297,8 +296,8 @@ _e_spectrum_redraw(void *d)
|
|||
|
||||
evas_object_image_data_set(sp->o_spectrum, data);
|
||||
evas_object_image_data_update_add(sp->o_spectrum, 0, 0, sp->iw, sp->ih);
|
||||
sp->draw_queued = 0;
|
||||
return 1;
|
||||
sp->draw_timer = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -306,7 +305,8 @@ _e_spectrum_update(E_Spectrum *sp)
|
|||
{
|
||||
if (!sp || !sp->cv) return;
|
||||
|
||||
sp->draw_queued = 1;
|
||||
if (sp->draw_timer) ecore_timer_del(sp->draw_timer);
|
||||
sp->draw_timer = ecore_timer_add(.001, _e_spectrum_redraw, sp);
|
||||
}
|
||||
|
||||
Evas_Object *
|
||||
|
|
|
@ -794,17 +794,30 @@ _e_test_internal(E_Container *con)
|
|||
|
||||
}
|
||||
#elif 0
|
||||
|
||||
static void
|
||||
_e_test_cb_change(void *data, Evas_Object *obj)
|
||||
{
|
||||
E_Color *c = data;
|
||||
printf("Current color: %d, %d, %d\n", c->r, c->g, c->b);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_test_internal(E_Container *con)
|
||||
{
|
||||
E_Dialog *dia;
|
||||
Evas_Object *o;
|
||||
Evas_Coord mw, mh;
|
||||
E_Color *color;
|
||||
|
||||
dia = e_dialog_new(con);
|
||||
e_dialog_title_set(dia, "Test Color Selector");
|
||||
o = e_widget_csel_add(dia->win->evas);
|
||||
|
||||
color = calloc(1, sizeof(E_Color));
|
||||
|
||||
o = e_widget_csel_add(dia->win->evas, color);
|
||||
evas_object_show(o);
|
||||
e_widget_on_change_hook_set(o, _e_test_cb_change, color);
|
||||
e_widget_min_size_get(o, &mw, &mh);
|
||||
e_dialog_content_set(dia, o, mw, mh);
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
typedef struct _E_Widget_Data E_Widget_Data;
|
||||
struct _E_Widget_Data
|
||||
{
|
||||
Evas_Object *obj;
|
||||
Evas_List *sliders;
|
||||
Evas_List *entries;
|
||||
Evas_Object *spectrum, *vert, *current;
|
||||
|
@ -136,12 +137,14 @@ _e_wid_cb_color_changed(void *data, Evas_Object *o)
|
|||
}
|
||||
|
||||
wd->changing = 0;
|
||||
|
||||
e_widget_change(wd->obj);
|
||||
}
|
||||
|
||||
Evas_Object *
|
||||
e_widget_csel_add(Evas *evas)
|
||||
e_widget_csel_add(Evas *evas, E_Color *color)
|
||||
{
|
||||
Evas_Object *o;
|
||||
Evas_Object *obj, *o;
|
||||
Evas_Object *frame, *table;
|
||||
Evas_Coord mw, mh;
|
||||
E_Color*cv;
|
||||
|
@ -150,16 +153,20 @@ e_widget_csel_add(Evas *evas)
|
|||
char *labels[6] = { "R", "G", "B", "H", "S", "V" };
|
||||
E_Widget_Data *wd;
|
||||
|
||||
table = e_widget_table_add(evas, 0);
|
||||
|
||||
frame = e_widget_frametable_add(evas, "colors", 0);
|
||||
obj = e_widget_add(evas);
|
||||
|
||||
wd = calloc(1, sizeof(E_Widget_Data));
|
||||
wd->mode = 1;
|
||||
grp = e_widget_radio_group_new(&wd->mode);
|
||||
wd->cv = color;
|
||||
wd->obj = obj;
|
||||
|
||||
// all sliders update a single color value struct
|
||||
cv = calloc(1, sizeof(E_Color));
|
||||
wd->cv = cv;
|
||||
table = e_widget_table_add(evas, 0);
|
||||
e_widget_sub_object_add(obj, table);
|
||||
e_widget_resize_object_set(obj, table);
|
||||
|
||||
frame = e_widget_frametable_add(evas, "colors", 0);
|
||||
e_widget_sub_object_add(obj, frame);
|
||||
grp = e_widget_radio_group_new(&wd->mode);
|
||||
|
||||
cv->r = 20; cv->g = 120; cv->b = 79;
|
||||
cv->a = 255;
|
||||
|
@ -193,16 +200,19 @@ e_widget_csel_add(Evas *evas)
|
|||
}
|
||||
|
||||
o = e_widget_radio_add(evas, labels[i], i, grp);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_radio_changed, wd);
|
||||
e_widget_frametable_object_append(frame, o, 0, i, 1, 1, 1, 1, 0, 0);
|
||||
|
||||
o = e_widget_cslider_add(evas, i, cv, 0, 0);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_show(o);
|
||||
wd->sliders = evas_list_append(wd->sliders, o);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
|
||||
e_widget_frametable_object_append(frame, o, 1, i, 1, 1, 1, 1, 1, 0);
|
||||
|
||||
o = e_widget_entry_add(evas, &(wd->values[i]));
|
||||
e_widget_sub_object_add(obj, o);
|
||||
evas_object_show(o);
|
||||
wd->entries = evas_list_append(wd->entries, o);
|
||||
e_widget_frametable_object_append(frame, o, 2, i, 1, 1, 1, 1, 1, 1);
|
||||
|
@ -211,12 +221,14 @@ e_widget_csel_add(Evas *evas)
|
|||
}
|
||||
|
||||
o = e_widget_spectrum_add(evas, wd->mode, 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);
|
||||
|
||||
o = e_widget_cslider_add(evas, wd->mode, cv, 1, 1);
|
||||
e_widget_sub_object_add(obj, o);
|
||||
e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
|
||||
evas_object_show(o);
|
||||
wd->vert = o;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef E_WIDGET_CSEL_H
|
||||
#define E_WIDGET_CSEL_H
|
||||
|
||||
Evas_Object *e_widget_csel_add(Evas *evas);
|
||||
Evas_Object *e_widget_csel_add(Evas *evas, E_Color *color);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue