diff --git a/src/bin/e_spectrum.c b/src/bin/e_spectrum.c index ba3e6f1eb..7a083701e 100644 --- a/src/bin/e_spectrum.c +++ b/src/bin/e_spectrum.c @@ -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 * diff --git a/src/bin/e_test.c b/src/bin/e_test.c index fb92ea39f..1053b86d4 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -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); diff --git a/src/bin/e_widget_csel.c b/src/bin/e_widget_csel.c index d17ac2aea..50c7953a1 100644 --- a/src/bin/e_widget_csel.c +++ b/src/bin/e_widget_csel.c @@ -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; diff --git a/src/bin/e_widget_csel.h b/src/bin/e_widget_csel.h index 50ce8d621..6a6292d5c 100644 --- a/src/bin/e_widget_csel.h +++ b/src/bin/e_widget_csel.h @@ -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