Enlightenment CVS committal Author : handyande Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_colorpicker.c ewl_colorpicker.h Log Message: Patch from Colin Pitrat to fix color picker =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_colorpicker.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ewl_colorpicker.c 28 Mar 2005 07:04:27 -0000 1.2 +++ ewl_colorpicker.c 9 Jun 2005 21:41:55 -0000 1.3 @@ -13,7 +13,8 @@ DENTER_FUNCTION(DLEVEL_STABLE); cp = NEW(Ewl_ColorPicker, 1); - if (!ewl_colorpicker_init(cp)) { + if (!ewl_colorpicker_init(cp)) + { FREE(cp); cp = NULL; } @@ -40,16 +41,6 @@ ewl_box_spacing_set(EWL_BOX(cp), 20); /* - * Setup the larger spectrum region for selecting shades of the base - * color. - */ - cp->spectrum = ewl_spectrum_new(); - ewl_spectrum_mode_set(EWL_SPECTRUM(cp->spectrum), EWL_PICK_MODE_RGB); - ewl_object_preferred_inner_size_set(EWL_OBJECT(cp->spectrum), 200, 200); - ewl_container_child_append(EWL_CONTAINER(cp), cp->spectrum); - ewl_widget_show(cp->spectrum); - - /* * Setup the range spectrum region for the base color. */ cp->range = ewl_spectrum_new(); @@ -63,26 +54,75 @@ ewl_callback_append(cp->range, EWL_CALLBACK_MOUSE_MOVE, ewl_colorpicker_range_move_cb, cp); ewl_object_preferred_inner_size_set(EWL_OBJECT(cp->range), 20, 200); - ewl_object_fill_policy_set(EWL_OBJECT(cp->range), EWL_FLAG_FILL_VFILL); + ewl_object_fill_policy_set(EWL_OBJECT(cp->range), EWL_FLAG_FILL_FILL); ewl_container_child_append(EWL_CONTAINER(cp), cp->range); ewl_widget_show(cp->range); + /* + * Setup the larger spectrum region for selecting shades of the base + * color. + */ + cp->spectrum = ewl_spectrum_new(); + ewl_callback_append(cp->spectrum, EWL_CALLBACK_MOUSE_DOWN, + ewl_colorpicker_spectrum_down_cb, cp); + ewl_callback_append(cp->spectrum, EWL_CALLBACK_MOUSE_UP, + ewl_colorpicker_spectrum_up_cb, cp); + ewl_callback_append(cp->spectrum, EWL_CALLBACK_MOUSE_MOVE, + ewl_colorpicker_spectrum_move_cb, cp); + ewl_spectrum_mode_set(EWL_SPECTRUM(cp->spectrum), EWL_PICK_MODE_RGB); + ewl_object_preferred_inner_size_set(EWL_OBJECT(cp->spectrum), 200, 200); + ewl_object_fill_policy_set(EWL_OBJECT(cp->spectrum), EWL_FLAG_FILL_FILL); + ewl_container_child_append(EWL_CONTAINER(cp), cp->spectrum); + ewl_widget_show(cp->spectrum); + + /* + * A text to see the selected color + */ + + cp->preview = ewl_text_new(NULL); + ewl_object_fill_policy_set(EWL_OBJECT(cp->preview), EWL_FLAG_FILL_NONE); + ewl_object_alignment_set(EWL_OBJECT(cp->preview), EWL_FLAG_ALIGN_CENTER); + ewl_text_color_set(EWL_TEXT(cp->preview), 0, 0, 0, 255); + ewl_container_child_append(EWL_CONTAINER(cp), cp->preview); + ewl_text_text_set(EWL_TEXT(cp->preview), "Preview"); + ewl_widget_show(cp->preview); + DRETURN_INT(TRUE, DLEVEL_STABLE); } void ewl_colorpicker_range_move_cb(Ewl_Widget *w, void *ev_data, void *user_data) { - int r, g, b, a; + #undef R + #undef G + #undef B + #undef A + #define R cp->selected.r + #define G cp->selected.g + #define B cp->selected.b + #define A cp->selected.a Ewl_ColorPicker *cp = user_data; Ewl_Event_Mouse_Move *ev = ev_data; DENTER_FUNCTION(DLEVEL_STABLE); - if (cp->drag) { - ewl_spectrum_color_coord_map(EWL_SPECTRUM(w), ev->x, ev->y, - &r, &g, &b, &a); - ewl_spectrum_rgb_set(EWL_SPECTRUM(cp->spectrum), r, g, b); - ewl_callback_call(EWL_WIDGET(cp), EWL_CALLBACK_VALUE_CHANGED); + if (cp->drag) + { + int x = ev->x - w->object.current.x; + int y = ev->y - w->object.current.y; + ewl_spectrum_color_coord_map(EWL_SPECTRUM(w), x, y, &R, &G, &B, &A); + ewl_spectrum_rgb_set(EWL_SPECTRUM(cp->spectrum), R, G, B); + ewl_callback_call_with_event_data(EWL_WIDGET(cp), EWL_CALLBACK_VALUE_CHANGED, &cp->selected); + + ewl_widget_hide(cp->preview); + IF_FREE(cp->preview); + cp->preview = ewl_text_new(NULL); + ewl_object_fill_policy_set(EWL_OBJECT(cp->preview), EWL_FLAG_FILL_NONE); + ewl_object_alignment_set(EWL_OBJECT(cp->preview), EWL_FLAG_ALIGN_CENTER); + ewl_text_color_set(EWL_TEXT(cp->preview), R, G, B, 255); + ewl_container_child_remove(EWL_CONTAINER(cp), cp->preview); + ewl_container_child_append(EWL_CONTAINER(cp), cp->preview); + ewl_text_text_set(EWL_TEXT(cp->preview), "Preview"); + ewl_widget_show(cp->preview); } DLEAVE_FUNCTION(DLEVEL_STABLE); @@ -90,23 +130,36 @@ void ewl_colorpicker_range_down_cb(Ewl_Widget *w, void *ev_data, void *user_data) { - int r, g, b, a; Ewl_ColorPicker *cp = user_data; Ewl_Event_Mouse_Down *ev = ev_data; DENTER_FUNCTION(DLEVEL_STABLE); cp->drag = 1; - ewl_spectrum_color_coord_map(EWL_SPECTRUM(w), ev->x, ev->y, - &r, &g, &b, &a); - ewl_spectrum_rgb_set(EWL_SPECTRUM(cp->spectrum), r, g, b); - ewl_callback_call(EWL_WIDGET(cp), EWL_CALLBACK_VALUE_CHANGED); + + int x = ev->x - w->object.current.x; + int y = ev->y - w->object.current.y; + ewl_spectrum_color_coord_map(EWL_SPECTRUM(w), x, y, &R, &G, &B, &A); + ewl_spectrum_rgb_set(EWL_SPECTRUM(cp->spectrum), R, G, B); + ewl_callback_call_with_event_data(EWL_WIDGET(cp), EWL_CALLBACK_VALUE_CHANGED, &cp->selected); + ewl_text_color_set(EWL_TEXT(cp->preview), R, G, B, 255); + + ewl_widget_hide(cp->preview); + IF_FREE(cp->preview); + cp->preview = ewl_text_new(NULL); + ewl_object_fill_policy_set(EWL_OBJECT(cp->preview), EWL_FLAG_FILL_NONE); + ewl_object_alignment_set(EWL_OBJECT(cp->preview), EWL_FLAG_ALIGN_CENTER); + ewl_text_color_set(EWL_TEXT(cp->preview), R, G, B, 255); + ewl_container_child_remove(EWL_CONTAINER(cp), cp->preview); + ewl_container_child_append(EWL_CONTAINER(cp), cp->preview); + ewl_text_text_set(EWL_TEXT(cp->preview), "Preview"); + ewl_widget_show(cp->preview); DLEAVE_FUNCTION(DLEVEL_STABLE); } void ewl_colorpicker_range_up_cb(Ewl_Widget *w __UNUSED__, - void *ev_data __UNUSED__, void *user_data) + void *ev_data __UNUSED__, void *user_data) { Ewl_ColorPicker *cp = user_data; @@ -117,3 +170,72 @@ DLEAVE_FUNCTION(DLEVEL_STABLE); } +void ewl_colorpicker_spectrum_move_cb(Ewl_Widget *w, void *ev_data, void *user_data) +{ + Ewl_ColorPicker *cp = user_data; + Ewl_Event_Mouse_Move *ev = ev_data; + + DENTER_FUNCTION(DLEVEL_STABLE); + + if (cp->drag) + { + int x = ev->x - w->object.current.x; + int y = ev->y - w->object.current.y; + ewl_spectrum_color_coord_map(EWL_SPECTRUM(w), x, y, &R, &G, &B, &A); + ewl_callback_call_with_event_data(EWL_WIDGET(cp), EWL_CALLBACK_VALUE_CHANGED, &cp->selected); + + ewl_widget_hide(cp->preview); + IF_FREE(cp->preview); + cp->preview = ewl_text_new(NULL); + ewl_object_fill_policy_set(EWL_OBJECT(cp->preview), EWL_FLAG_FILL_NONE); + ewl_object_alignment_set(EWL_OBJECT(cp->preview), EWL_FLAG_ALIGN_CENTER); + ewl_text_color_set(EWL_TEXT(cp->preview), R, G, B, 255); + ewl_container_child_remove(EWL_CONTAINER(cp), cp->preview); + ewl_container_child_append(EWL_CONTAINER(cp), cp->preview); + ewl_text_text_set(EWL_TEXT(cp->preview), "Preview"); + ewl_widget_show(cp->preview); + } + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +void ewl_colorpicker_spectrum_down_cb(Ewl_Widget *w, void *ev_data, void *user_data) +{ + Ewl_ColorPicker *cp = user_data; + Ewl_Event_Mouse_Down *ev = ev_data; + + DENTER_FUNCTION(DLEVEL_STABLE); + + cp->drag = 1; + + int x = ev->x - w->object.current.x; + int y = ev->y - w->object.current.y; + ewl_spectrum_color_coord_map(EWL_SPECTRUM(w), x, y, &R, &G, &B, &A); + ewl_callback_call_with_event_data(EWL_WIDGET(cp), EWL_CALLBACK_VALUE_CHANGED, &cp->selected); + ewl_text_color_set(EWL_TEXT(cp->preview), R, G, B, 255); + + ewl_widget_hide(cp->preview); + IF_FREE(cp->preview); + cp->preview = ewl_text_new(NULL); + ewl_object_fill_policy_set(EWL_OBJECT(cp->preview), EWL_FLAG_FILL_NONE); + ewl_object_alignment_set(EWL_OBJECT(cp->preview), EWL_FLAG_ALIGN_CENTER); + ewl_text_color_set(EWL_TEXT(cp->preview), R, G, B, 255); + ewl_container_child_remove(EWL_CONTAINER(cp), cp->preview); + ewl_container_child_append(EWL_CONTAINER(cp), cp->preview); + ewl_text_text_set(EWL_TEXT(cp->preview), "Preview"); + ewl_widget_show(cp->preview); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +void ewl_colorpicker_spectrum_up_cb(Ewl_Widget *w __UNUSED__, + void *ev_data __UNUSED__, void *user_data) +{ + Ewl_ColorPicker *cp = user_data; + + DENTER_FUNCTION(DLEVEL_STABLE); + + cp->drag = 0; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_colorpicker.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ewl_colorpicker.h 17 Feb 2005 19:14:54 -0000 1.4 +++ ewl_colorpicker.h 9 Jun 2005 21:41:55 -0000 1.5 @@ -13,9 +13,14 @@ struct Ewl_ColorPicker { Ewl_Box box; + Ewl_Widget *preview; Ewl_Widget *spectrum; Ewl_Widget *range; int drag; + struct color + { + int r, g, b, a; + } selected; }; Ewl_Widget *ewl_colorpicker_new(); @@ -27,6 +32,9 @@ void ewl_colorpicker_range_down_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewl_colorpicker_range_up_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewl_colorpicker_range_move_cb(Ewl_Widget *w, void *ev_data, void *user_data); +void ewl_colorpicker_spectrum_down_cb(Ewl_Widget *w, void *ev_data, void *user_data); +void ewl_colorpicker_spectrum_up_cb(Ewl_Widget *w, void *ev_data, void *user_data); +void ewl_colorpicker_spectrum_move_cb(Ewl_Widget *w, void *ev_data, void *user_data); /** * @} ------------------------------------------------------- This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput a projector? How fast can you ride your desk chair down the office luge track? If you want to score the big prize, get to know the little guy. Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs