3 typedef struct _E_Widget_Data E_Widget_Data;
9 Evas_Object *spectrum, *vert, *well;
17 _e_wid_del_hook(Evas_Object *obj)
22 wd = e_widget_data_get(obj);
25 for (i = 0; i < E_COLOR_COMPONENT_MAX; i++)
26 E_FREE(wd->values[i]);
30 eina_list_free(wd->sliders);
31 eina_list_free(wd->entries);
37 _e_wid_cb_radio_changed(void *data, Evas_Object *o __UNUSED__)
39 E_Widget_Data *wd = data;
41 e_widget_spectrum_mode_set(wd->spectrum, wd->mode);
42 e_widget_cslider_mode_set(wd->vert, wd->mode);
46 _e_wid_cb_color_changed(void *data, Evas_Object *o)
48 E_Widget_Data *wd = data;
51 int changed = -1, i = 0;
53 if (wd->changing) return;
58 EINA_LIST_FOREACH(wd->entries, l, eo)
65 case E_COLOR_COMPONENT_R:
66 wd->cv->r = atoi(wd->values[i]);
67 if (wd->cv->r > 255) wd->cv->r = 255;
68 if (wd->cv->r < 0) wd->cv->r = 0;
71 case E_COLOR_COMPONENT_G:
72 wd->cv->g = atoi(wd->values[i]);
73 if (wd->cv->g > 255) wd->cv->g = 255;
74 if (wd->cv->g < 0) wd->cv->g = 0;
77 case E_COLOR_COMPONENT_B:
78 wd->cv->b = atoi(wd->values[i]);
79 if (wd->cv->b > 255) wd->cv->b = 255;
80 if (wd->cv->b < 0) wd->cv->b = 0;
83 case E_COLOR_COMPONENT_H:
84 wd->cv->h = atof(wd->values[i]);
85 if (wd->cv->h > 360) wd->cv->h = 360;
86 if (wd->cv->h < 0) wd->cv->h = 0;
89 case E_COLOR_COMPONENT_S:
90 wd->cv->s = atof(wd->values[i]);
91 if (wd->cv->s > 1) wd->cv->s = 1;
92 if (wd->cv->s < 0) wd->cv->s = 0;
95 case E_COLOR_COMPONENT_V:
96 wd->cv->v = atof(wd->values[i]);
97 if (wd->cv->v > 1) wd->cv->v = 1;
98 if (wd->cv->v < 0) wd->cv->v = 0;
108 if (changed >= E_COLOR_COMPONENT_H)
109 e_color_update_hsv(wd->cv);
110 else if (changed >= E_COLOR_COMPONENT_R)
111 e_color_update_rgb(wd->cv);
117 e_widget_cslider_update(wd->vert);
119 /* update the sliders */
121 EINA_LIST_FOREACH(wd->sliders, l, so)
124 e_widget_cslider_update(so);
130 /* update the spectrum */
131 if (o != wd->spectrum /* && changed != -1*/)
133 if (wd->mode == changed ||
134 (wd->mode >= E_COLOR_COMPONENT_H && changed <= E_COLOR_COMPONENT_B) ||
135 (wd->mode <= E_COLOR_COMPONENT_B && changed >= E_COLOR_COMPONENT_H))
136 e_widget_spectrum_update(wd->spectrum, 1);
138 e_widget_spectrum_update(wd->spectrum, 1);
141 e_widget_color_well_update(wd->well);
143 /* now update the text fields to show current values */
145 EINA_LIST_FOREACH(wd->entries, l, eo)
149 if (o == eo) continue;
152 case E_COLOR_COMPONENT_R:
153 snprintf(buf, 10, "%i", wd->cv->r);
156 case E_COLOR_COMPONENT_G:
157 snprintf(buf, 10, "%i", wd->cv->g);
160 case E_COLOR_COMPONENT_B:
161 snprintf(buf, 10, "%i", wd->cv->b);
164 case E_COLOR_COMPONENT_H:
165 snprintf(buf, 10, "%.0f", wd->cv->h);
168 case E_COLOR_COMPONENT_S:
169 snprintf(buf, 10, "%.2f", wd->cv->s);
172 case E_COLOR_COMPONENT_V:
173 snprintf(buf, 10, "%.2f", wd->cv->v);
179 e_widget_entry_text_set(eo, buf);
185 e_widget_change(wd->obj);
189 _e_wid_cb_alpha_changed(void *data, Evas_Object *o __UNUSED__)
191 _e_wid_cb_color_changed(data, NULL);
195 e_widget_csel_add(Evas *evas, E_Color *color, Eina_Bool alpha_enabled)
197 Evas_Object *obj, *o;
198 Evas_Object *frame, *table;
200 E_Radio_Group *grp = NULL;
201 char *labels[6] = { N_("R"), N_("G"), N_("B"), N_("H"), N_("S"), N_("V") };
205 obj = e_widget_add(evas);
206 e_widget_del_hook_set(obj, _e_wid_del_hook);
208 wd = calloc(1, sizeof(E_Widget_Data));
212 e_widget_data_set(obj, wd);
214 table = e_widget_table_add(evas, 0);
215 e_widget_sub_object_add(obj, table);
216 e_widget_resize_object_set(obj, table);
218 frame = e_widget_table_add(evas, 0);
219 e_widget_sub_object_add(obj, frame);
220 grp = e_widget_radio_group_new(&wd->mode);
222 wd->values = calloc(E_COLOR_COMPONENT_MAX, sizeof(char *));
224 for (i = 0; i < E_COLOR_COMPONENT_MAX; i++)
226 wd->values[i] = calloc(10, sizeof(char));
229 case E_COLOR_COMPONENT_R:
230 snprintf(wd->values[i], 10, "%i", wd->cv->r);
233 case E_COLOR_COMPONENT_G:
234 snprintf(wd->values[i], 10, "%i", wd->cv->g);
237 case E_COLOR_COMPONENT_B:
238 snprintf(wd->values[i], 10, "%i", wd->cv->b);
241 case E_COLOR_COMPONENT_H:
242 snprintf(wd->values[i], 10, "%.0f", wd->cv->h);
245 case E_COLOR_COMPONENT_S:
246 snprintf(wd->values[i], 10, "%.2f", wd->cv->s);
249 case E_COLOR_COMPONENT_V:
250 snprintf(wd->values[i], 10, "%.2f", wd->cv->v);
257 o = e_widget_radio_add(evas, _(labels[i]), i, grp);
258 e_widget_sub_object_add(obj, o);
259 e_widget_on_change_hook_set(o, _e_wid_cb_radio_changed, wd);
260 e_widget_table_object_append(frame, o, 0, i, 1, 1, 1, 1, 0, 0);
262 o = e_widget_cslider_add(evas, i, wd->cv, 0, 0);
263 e_widget_sub_object_add(obj, o);
265 wd->sliders = eina_list_append(wd->sliders, o);
266 e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
267 e_widget_size_min_set(o, 32, 16);
268 e_widget_table_object_append(frame, o, 1, i, 6, 1, 1, 1, 1, 0);
270 o = e_widget_entry_add(e_win_evas_win_get(evas), &(wd->values[i]), NULL, NULL, NULL);
271 e_widget_sub_object_add(obj, o);
273 wd->entries = eina_list_append(wd->entries, o);
274 e_widget_table_object_append(frame, o, 7, i, 1, 1, 1, 1, 1, 0);
275 e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
280 o = e_widget_label_add(evas, _("Alpha"));
281 e_widget_table_object_append(frame, o, 0, i, 1, 1, 1, 1, 0, 0);
282 o = e_widget_slider_add(evas, 1, 0, "%0.0f", 0, 255, 1, 0, NULL,
284 e_widget_on_change_hook_set(o, _e_wid_cb_alpha_changed, wd);
285 e_widget_table_object_append(frame, o, 1, i, 10, 1, 1, 1, 0, 0);
288 e_widget_table_object_append(table, frame, 2, 0, 1, 2, 1, 0, 1, 0);
290 o = e_widget_spectrum_add(evas, wd->mode, wd->cv);
291 e_widget_sub_object_add(obj, o);
293 e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
295 e_widget_size_min_set(o, 120, 120);
296 e_widget_table_object_append(table, o, 0, 0, 1, 2, 1, 1, 1, 1);
298 o = e_widget_cslider_add(evas, wd->mode, wd->cv, 1, 1);
299 e_widget_sub_object_add(obj, o);
300 e_widget_on_change_hook_set(o, _e_wid_cb_color_changed, wd);
301 e_widget_size_min_set(o, 16, 16);
304 e_widget_table_object_append(table, o, 1, 0, 1, 2, 0, 1, 0, 1);
306 o = e_widget_color_well_add(evas, wd->cv, 0);
307 e_widget_sub_object_add(obj, o);
310 e_widget_size_min_set(o, 32, 32);
311 e_widget_table_object_append(table, o, 0, 2, 3, 1, 1, 1, 0, 0);
313 e_widget_size_min_get(table, &mw, &mh);
314 e_widget_size_min_set(obj, mw, mh);