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:
rephorm 2006-08-14 07:05:31 +00:00 committed by rephorm
parent 4d0d5bb122
commit ce206f330e
4 changed files with 43 additions and 18 deletions

View File

@ -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 *

View File

@ -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);

View File

@ -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;

View File

@ -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