From c37c56d4abb106c2e7f63acc1c2a953c8f6faa68 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 16 Jul 2012 11:23:33 +0000 Subject: [PATCH] e: small fix to the color dialog. NOTE: This is a terrible mess. It trigger massive bug in Evas_Map. Will try to fix the Evas part, but maybe we should use a custom code and Evas_Object_Image with a custom pixels filling code. SVN revision: 73928 --- data/themes/default.edc | 8 ++-- src/bin/e_widget_cslider.c | 90 +++++++++++++++++++------------------- 2 files changed, 48 insertions(+), 50 deletions(-) diff --git a/data/themes/default.edc b/data/themes/default.edc index 753b5c550..f596f46c0 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -27939,12 +27939,12 @@ collections { rel1 { to: "e.swallow.content"; relative: 0.5 0.0; - offset: 0 0; + offset: 0 -2; } rel2 { to: "e.swallow.content"; relative: 0.5 1.0; - offset: 0 -1; + offset: 0 +2; } color: 255 255 255 150; } @@ -27956,12 +27956,12 @@ collections { rel1 { to: "e.swallow.content"; relative: 0.0 0.5 ; - offset: 0 0; + offset: -2 0; } rel2 { to: "e.swallow.content"; relative: 1.0 0.5; - offset: -1 0; + offset: +2 0; } color: 255 255 255 150; } diff --git a/src/bin/e_widget_cslider.c b/src/bin/e_widget_cslider.c index e2840771b..24d68501e 100644 --- a/src/bin/e_widget_cslider.c +++ b/src/bin/e_widget_cslider.c @@ -33,9 +33,13 @@ static void _e_wid_update_fixed(E_Widget_Data *wd); static void _e_wid_move(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_wid_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_wid_cb_down(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_wid_cb_move(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_wid_cb_up(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_wid_cb_drag_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_wid_cb_drag_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_wid_cb_drag(void *data, Evas_Object *obj, const char *emission, const char *source); + +/* static void _e_wid_cb_down(void *data, Evas *e, Evas_Object *obj, void *event_info); */ +/* static void _e_wid_cb_move(void *data, Evas *e, Evas_Object *obj, void *event_info); */ +/* static void _e_wid_cb_up(void *data, Evas *e, Evas_Object *obj, void *event_info); */ Evas_Object * e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int vertical, int fixed) @@ -52,6 +56,8 @@ e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int ver wd = calloc(1, sizeof(E_Widget_Data)); e_widget_data_set(obj, wd); + evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _e_wid_resize, wd); + wd->vertical = vertical; wd->fixed = fixed; wd->mode = mode; @@ -71,6 +77,10 @@ e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int ver edje_object_size_min_calc(o, &mw, &mh); e_widget_size_min_set(obj, mw, mh); + edje_object_signal_callback_add(wd->o_cslider, "drag,start", "*", _e_wid_cb_drag_start, obj); + edje_object_signal_callback_add(wd->o_cslider, "drag", "*", _e_wid_cb_drag, obj); + edje_object_signal_callback_add(wd->o_cslider, "drag,stop", "*", _e_wid_cb_drag_stop, obj); + e_widget_sub_object_add(obj, o); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj); e_widget_resize_object_set(obj, o); @@ -78,22 +88,20 @@ e_widget_cslider_add(Evas *evas, E_Color_Component mode, E_Color *color, int ver /* add gradient obj */ o = evas_object_rectangle_add(evas); e_widget_sub_object_add(obj, o); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _e_wid_move, wd); - evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _e_wid_resize, wd); - evas_object_show(o); - evas_object_color_set(o, 0, 0, 0, 0); - wd->o_event = o; + /* evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_cb_down, obj); */ + /* evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _e_wid_cb_move, obj); */ + /* evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _e_wid_cb_up, obj); */ + evas_object_color_set(o, 255, 255, 255, 255); + wd->o_grad = o; edje_object_part_swallow(wd->o_cslider, "e.swallow.content", o); o = evas_object_rectangle_add(evas); e_widget_sub_object_add(obj, o); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_cb_down, obj); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _e_wid_cb_move, obj); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _e_wid_cb_up, obj); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _e_wid_move, wd); evas_object_show(o); - evas_object_color_set(o, 255, 255, 255, 255); - wd->o_grad = o; + evas_object_color_set(o, 0, 0, 0, 0); + wd->o_event = o; _e_wid_update(wd); @@ -104,11 +112,11 @@ static void _e_wid_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) { E_Widget_Data *wd; - Evas_Coord x, y; + /* Evas_Coord x, y; */ wd = data; - evas_object_geometry_get(obj, &x, &y, NULL, NULL); - evas_object_move(wd->o_grad, x, y); + /* evas_object_geometry_get(obj, &x, &y, NULL, NULL); */ + /* evas_object_move(wd->o_grad, x, y); */ _e_wid_update(wd); } @@ -116,11 +124,11 @@ static void _e_wid_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) { E_Widget_Data *wd; - Evas_Coord w, h; - + /* Evas_Coord w, h; */ + wd = data; - evas_object_geometry_get(obj, NULL, NULL, &w, &h); - evas_object_resize(wd->o_grad, w, h); + /* evas_object_geometry_get(obj, NULL, NULL, &w, &h); */ + /* evas_object_resize(wd->o_grad, w, h); */ _e_wid_update(wd); } @@ -238,9 +246,9 @@ _e_wid_gradient_set(Evas_Object *o, Eina_Bool orientation, int rf, int gf, int bf, int rt, int gt, int bt) { - Evas_Map *m; + static Evas_Map *m = NULL; - m = evas_map_new(4); + if (!m) m = evas_map_new(4); evas_map_util_points_populate_from_object(m, o); if (orientation) @@ -261,7 +269,6 @@ _e_wid_gradient_set(Evas_Object *o, Eina_Bool orientation, evas_object_map_enable_set(o, 1); evas_object_map_set(o, m); - evas_map_free(m); } static void @@ -368,6 +375,7 @@ _e_wid_update_standard(E_Widget_Data *wd) } edje_object_part_drag_value_set(wd->o_cslider, "e.dragable.cursor", vx, vx); + edje_object_message_signal_process(wd->o_cslider); /* really needed or go in infinite loop */ } void @@ -528,33 +536,27 @@ _e_wid_focus_steal(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, } static void -_e_wid_cb_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +_e_wid_cb_drag_start(void *data, Evas_Object *obj, const char *emission, const char *source) { - Evas_Event_Mouse_Down *ev; Evas_Object *o_wid; E_Widget_Data *wd; - Evas_Coord ox, oy, ow, oh; - double val; - - ev = event_info; + double val, valx, valy; o_wid = data; wd = e_widget_data_get(o_wid); wd->dragging = 1; - evas_object_geometry_get(wd->o_grad, &ox, &oy, &ow, &oh); - - if (wd->vertical) - val = 1 - ((ev->canvas.y - oy) / (double)oh); - else - val = (ev->canvas.x - ox) / (double)ow; + edje_object_part_drag_value_get(wd->o_cslider, "e.dragable.cursor", + &valx, &valy); + if (wd->vertical) val = valy; + else valx; if (val > 1) val = 1; if (val < 0) val = 0; _e_wid_value_set(o_wid, val); } static void -_e_wid_cb_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +_e_wid_cb_drag_stop(void *data, Evas_Object *obj, const char *emission, const char *source) { Evas_Object *o_wid; E_Widget_Data *wd; @@ -565,26 +567,22 @@ _e_wid_cb_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void * } static void -_e_wid_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +_e_wid_cb_drag(void *data, Evas_Object *obj, const char *emission, const char *source) { - Evas_Event_Mouse_Move *ev; Evas_Object *o_wid; E_Widget_Data *wd; o_wid = data; wd = e_widget_data_get(o_wid); - ev = event_info; if (wd->dragging == 1) { - Evas_Coord ox, oy, ow, oh; - double val; - evas_object_geometry_get(wd->o_grad, &ox, &oy, &ow, &oh); + double val, valx, valy; - if (wd->vertical) - val = 1 - ((ev->cur.canvas.y - oy) / (double)oh); - else - val = (ev->cur.canvas.x - ox) / (double)ow; + edje_object_part_drag_value_get(wd->o_cslider, "e.dragable.cursor", + &valx, &valy); + if (wd->vertical) val = valy; + else val = valx; if (val > 1) val = 1; if (val < 0) val = 0; _e_wid_value_set(o_wid, val);