forked from enlightenment/efl
elm_colorselector: selected item is updated when color is changed.
Summary: - Previously, mode change, color change updated sd->selected, but did not send signals to edje of the item. - Also, mode change in colorselector set sd->selected to the first item even when palette is visible in previous mode. - Now, when mode is changed, sd->selected is set NULL and send unselected signal if palette is invisible, and keep sd->selected if palette is visible. - sd->selected is set NULL when color is changed in picker and color bars because previous selected item is not current color of colorselector Test Plan: 1. 1) launch elementary_test colorselector. 2)Select any item and check the item is selected when palette is visible. 3) Change mode to Palette, Both, All, and check selected item is not changed. (Previously, selected item is changed to the first item of the palette, but previous item was seen as selected.) 2. 1) launch elementary_test colorselector. 2) Select any item and check the item is selected when palette is visible. 3) Change mode to Components, Picker. 4) Change mode to Palette, and check none of items is selected. (Previously, selected item is changed to the first item of the palette, but previous item was seen as selected.) 3. 1) launch elementary_test colorselector. 2) Select any item and check the item is selected when palette is visible. 3) Change mode to All. 4) Click arrows in Picker and color bars. 5) Observe selected item is not unselected when color is not changed, and selected item is unselected when color is changed. 4. 1) launch elementary_test colorselector. 2) Select any item and check the item is selected when palette is visible. 3) Press direction key and check selected item is changed. (Previously, selected item's edje is not updated.) Reviewers: woohyun, Hermet, jpeg, cedric Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4156 Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
03915fc07b
commit
cebbf43881
|
@ -584,13 +584,14 @@ _colors_set(Evas_Object *obj,
|
||||||
int r,
|
int r,
|
||||||
int g,
|
int g,
|
||||||
int b,
|
int b,
|
||||||
int a)
|
int a,
|
||||||
|
Eina_Bool mode_change)
|
||||||
{
|
{
|
||||||
double x, y;
|
double x, y;
|
||||||
|
|
||||||
ELM_COLORSELECTOR_DATA_GET(obj, sd);
|
ELM_COLORSELECTOR_DATA_GET(obj, sd);
|
||||||
|
|
||||||
if ((sd->r == r) && (sd->g == g) && (sd->b == b) && (sd->a == a))
|
if ((sd->r == r) && (sd->g == g) && (sd->b == b) && (sd->a == a) && !mode_change)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sd->r = r;
|
sd->r = r;
|
||||||
|
@ -631,9 +632,22 @@ _colors_set(Evas_Object *obj,
|
||||||
}
|
}
|
||||||
if ((sd->mode == ELM_COLORSELECTOR_ALL) || (sd->mode == ELM_COLORSELECTOR_PICKER))
|
if ((sd->mode == ELM_COLORSELECTOR_ALL) || (sd->mode == ELM_COLORSELECTOR_PICKER))
|
||||||
_color_picker_init(sd);
|
_color_picker_init(sd);
|
||||||
|
if (!mode_change)
|
||||||
eo_event_callback_call(obj, ELM_COLORSELECTOR_EVENT_CHANGED, NULL);
|
eo_event_callback_call(obj, ELM_COLORSELECTOR_EVENT_CHANGED, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_unselect_selected_item(Elm_Colorselector_Data *sd)
|
||||||
|
{
|
||||||
|
Eo *eo_temp_item;
|
||||||
|
|
||||||
|
if (sd->selected)
|
||||||
|
{
|
||||||
|
eo_temp_item = eina_list_data_get(sd->selected);
|
||||||
|
elm_obj_color_item_selected_set(eo_temp_item, EINA_FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_spinner_changed_cb(void *data, const Eo_Event *event)
|
_spinner_changed_cb(void *data, const Eo_Event *event)
|
||||||
{
|
{
|
||||||
|
@ -641,6 +655,7 @@ _spinner_changed_cb(void *data, const Eo_Event *event)
|
||||||
Evas_Object *parent;
|
Evas_Object *parent;
|
||||||
int i, v;
|
int i, v;
|
||||||
|
|
||||||
|
_unselect_selected_item(sd);
|
||||||
for (i = 0; i < 4 && sd->spinners[i] != event->object; i++);
|
for (i = 0; i < 4 && sd->spinners[i] != event->object; i++);
|
||||||
|
|
||||||
parent = evas_object_data_get(event->object, "parent");
|
parent = evas_object_data_get(event->object, "parent");
|
||||||
|
@ -650,16 +665,16 @@ _spinner_changed_cb(void *data, const Eo_Event *event)
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
_colors_set(parent, v, sd->g, sd->b, sd->a);
|
_colors_set(parent, v, sd->g, sd->b, sd->a, EINA_FALSE);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
_colors_set(parent, sd->r, v, sd->b, sd->a);
|
_colors_set(parent, sd->r, v, sd->b, sd->a, EINA_FALSE);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
_colors_set(parent, sd->r, sd->g, v, sd->a);
|
_colors_set(parent, sd->r, sd->g, v, sd->a, EINA_FALSE);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
_colors_set(parent, sd->r, sd->g, sd->b, v);
|
_colors_set(parent, sd->r, sd->g, sd->b, v, EINA_FALSE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
evas_object_data_del(event->object, "_changed");
|
evas_object_data_del(event->object, "_changed");
|
||||||
|
@ -749,7 +764,8 @@ _mouse_up_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
|
||||||
g = (pixels[17 * 8 + 8] >> 8) & 0xFF;
|
g = (pixels[17 * 8 + 8] >> 8) & 0xFF;
|
||||||
b = pixels[17 * 8 + 8] & 0xFF;
|
b = pixels[17 * 8 + 8] & 0xFF;
|
||||||
|
|
||||||
_colors_set(o, r, g, b, 0xFF);
|
_unselect_selected_item(sd);
|
||||||
|
_colors_set(o, r, g, b, 0xFF, EINA_FALSE);
|
||||||
eo_event_callback_call(o, ELM_COLORSELECTOR_EVENT_CHANGED_USER, NULL);
|
eo_event_callback_call(o, ELM_COLORSELECTOR_EVENT_CHANGED_USER, NULL);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
@ -953,7 +969,9 @@ _arrow_cb(void *data,
|
||||||
{
|
{
|
||||||
Color_Bar_Data *cb_data = data;
|
Color_Bar_Data *cb_data = data;
|
||||||
double x, y;
|
double x, y;
|
||||||
|
ELM_COLORSELECTOR_DATA_GET(cb_data->parent, sd);
|
||||||
|
|
||||||
|
_unselect_selected_item(sd);
|
||||||
edje_object_part_drag_value_get(obj, "elm.arrow", &x, &y);
|
edje_object_part_drag_value_get(obj, "elm.arrow", &x, &y);
|
||||||
_update_hsla_from_colorbar(cb_data->parent, cb_data->color_type, x);
|
_update_hsla_from_colorbar(cb_data->parent, cb_data->color_type, x);
|
||||||
}
|
}
|
||||||
|
@ -971,7 +989,9 @@ _colorbar_arrow_set(Color_Bar_Data *cb_data, int mouse_x)
|
||||||
|
|
||||||
if (w > 0) arrow_x = (double)(mouse_x - x) / (double)w;
|
if (w > 0) arrow_x = (double)(mouse_x - x) / (double)w;
|
||||||
if (arrow_x > 1) arrow_x = 1;
|
if (arrow_x > 1) arrow_x = 1;
|
||||||
if (arrow_x < 0) arrow_x = 0;
|
else if (arrow_x < 0) arrow_x = 0;
|
||||||
|
else _unselect_selected_item(sd);
|
||||||
|
|
||||||
edje_object_part_drag_value_set
|
edje_object_part_drag_value_set
|
||||||
(cb_data->colorbar, "elm.arrow", arrow_x, arrow_y);
|
(cb_data->colorbar, "elm.arrow", arrow_x, arrow_y);
|
||||||
|
|
||||||
|
@ -1043,6 +1063,7 @@ _button_clicked_cb(void *data, const Eo_Event *event)
|
||||||
|
|
||||||
if (x > 1.0) x = 1.0;
|
if (x > 1.0) x = 1.0;
|
||||||
else if (x < 0.0) x = 0.0;
|
else if (x < 0.0) x = 0.0;
|
||||||
|
else _unselect_selected_item(sd);
|
||||||
|
|
||||||
edje_object_part_drag_value_set(cb_data->colorbar, "elm.arrow", x, y);
|
edje_object_part_drag_value_set(cb_data->colorbar, "elm.arrow", x, y);
|
||||||
_update_hsla_from_colorbar(cb_data->parent, cb_data->color_type, x);
|
_update_hsla_from_colorbar(cb_data->parent, cb_data->color_type, x);
|
||||||
|
@ -2080,7 +2101,7 @@ _key_action_move(Evas_Object *obj, const char *params)
|
||||||
item->color->a);
|
item->color->a);
|
||||||
eo_event_callback_call
|
eo_event_callback_call
|
||||||
(WIDGET(item), ELM_COLORSELECTOR_EVENT_COLOR_ITEM_SELECTED, eo_item);
|
(WIDGET(item), ELM_COLORSELECTOR_EVENT_COLOR_ITEM_SELECTED, eo_item);
|
||||||
sd->selected = cl;
|
elm_obj_color_item_selected_set(eo_item, EINA_TRUE);
|
||||||
}
|
}
|
||||||
else if (!cl && sd->focused == ELM_COLORSELECTOR_PALETTE)
|
else if (!cl && sd->focused == ELM_COLORSELECTOR_PALETTE)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
@ -2226,7 +2247,7 @@ _elm_colorselector_eo_base_constructor(Eo *obj, Elm_Colorselector_Data *_pd EINA
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_elm_colorselector_color_set(Eo *obj, Elm_Colorselector_Data *_pd EINA_UNUSED, int r, int g, int b, int a)
|
_elm_colorselector_color_set(Eo *obj, Elm_Colorselector_Data *_pd EINA_UNUSED, int r, int g, int b, int a)
|
||||||
{
|
{
|
||||||
_colors_set(obj, r, g, b, a);
|
_colors_set(obj, r, g, b, a, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
|
@ -2266,7 +2287,6 @@ _elm_colorselector_mode_set(Eo *obj, Elm_Colorselector_Data *sd, Elm_Colorselect
|
||||||
elm_layout_content_set(obj, "palette", sd->palette_box);
|
elm_layout_content_set(obj, "palette", sd->palette_box);
|
||||||
elm_layout_signal_emit(obj, "elm,state,palette", "elm");
|
elm_layout_signal_emit(obj, "elm,state,palette", "elm");
|
||||||
sd->focused = ELM_COLORSELECTOR_PALETTE;
|
sd->focused = ELM_COLORSELECTOR_PALETTE;
|
||||||
sd->selected = sd->items;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ELM_COLORSELECTOR_COMPONENTS:
|
case ELM_COLORSELECTOR_COMPONENTS:
|
||||||
|
@ -2275,6 +2295,7 @@ _elm_colorselector_mode_set(Eo *obj, Elm_Colorselector_Data *sd, Elm_Colorselect
|
||||||
elm_layout_signal_emit(obj, "elm,state,components", "elm");
|
elm_layout_signal_emit(obj, "elm,state,components", "elm");
|
||||||
sd->focused = ELM_COLORSELECTOR_COMPONENTS;
|
sd->focused = ELM_COLORSELECTOR_COMPONENTS;
|
||||||
sd->sel_color_type = HUE;
|
sd->sel_color_type = HUE;
|
||||||
|
_unselect_selected_item(sd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ELM_COLORSELECTOR_BOTH:
|
case ELM_COLORSELECTOR_BOTH:
|
||||||
|
@ -2284,7 +2305,6 @@ _elm_colorselector_mode_set(Eo *obj, Elm_Colorselector_Data *sd, Elm_Colorselect
|
||||||
elm_layout_content_set(obj, "selector", sd->col_bars_area);
|
elm_layout_content_set(obj, "selector", sd->col_bars_area);
|
||||||
elm_layout_signal_emit(obj, "elm,state,both", "elm");
|
elm_layout_signal_emit(obj, "elm,state,both", "elm");
|
||||||
sd->focused = ELM_COLORSELECTOR_PALETTE;
|
sd->focused = ELM_COLORSELECTOR_PALETTE;
|
||||||
sd->selected = sd->items;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ELM_COLORSELECTOR_PICKER:
|
case ELM_COLORSELECTOR_PICKER:
|
||||||
|
@ -2293,6 +2313,7 @@ _elm_colorselector_mode_set(Eo *obj, Elm_Colorselector_Data *sd, Elm_Colorselect
|
||||||
elm_layout_content_set(obj, "picker", sd->picker);
|
elm_layout_content_set(obj, "picker", sd->picker);
|
||||||
elm_layout_signal_emit(obj, "elm,state,picker", "elm");
|
elm_layout_signal_emit(obj, "elm,state,picker", "elm");
|
||||||
sd->focused = ELM_COLORSELECTOR_PICKER;
|
sd->focused = ELM_COLORSELECTOR_PICKER;
|
||||||
|
_unselect_selected_item(sd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ELM_COLORSELECTOR_ALL:
|
case ELM_COLORSELECTOR_ALL:
|
||||||
|
@ -2305,7 +2326,6 @@ _elm_colorselector_mode_set(Eo *obj, Elm_Colorselector_Data *sd, Elm_Colorselect
|
||||||
elm_layout_content_set(obj, "picker", sd->picker);
|
elm_layout_content_set(obj, "picker", sd->picker);
|
||||||
elm_layout_signal_emit(obj, "elm,state,all", "elm");
|
elm_layout_signal_emit(obj, "elm,state,all", "elm");
|
||||||
sd->focused = ELM_COLORSELECTOR_PALETTE;
|
sd->focused = ELM_COLORSELECTOR_PALETTE;
|
||||||
sd->selected = sd->items;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -2314,6 +2334,7 @@ _elm_colorselector_mode_set(Eo *obj, Elm_Colorselector_Data *sd, Elm_Colorselect
|
||||||
|
|
||||||
edje_object_message_signal_process(wd->resize_obj);
|
edje_object_message_signal_process(wd->resize_obj);
|
||||||
|
|
||||||
|
_colors_set(obj, sd->r, sd->g, sd->b, sd->a, EINA_TRUE);
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2445,10 +2466,20 @@ _elm_color_item_selected_set(Eo *eo_item,
|
||||||
|
|
||||||
ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
|
ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
|
||||||
|
|
||||||
|
eo_temp_item = eina_list_data_get(sd->selected);
|
||||||
|
if (eo_item == eo_temp_item)
|
||||||
|
{
|
||||||
|
if (!selected)
|
||||||
|
{
|
||||||
|
elm_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
|
||||||
|
sd->selected = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (selected)
|
if (selected)
|
||||||
{
|
{
|
||||||
eo_temp_item = eina_list_data_get(sd->selected);
|
|
||||||
if (eo_item == eo_temp_item) return;
|
|
||||||
elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
|
elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
|
||||||
elm_colorselector_color_set(WIDGET(item), item->color->r, item->color->g,
|
elm_colorselector_color_set(WIDGET(item), item->color->r, item->color->g,
|
||||||
item->color->b, item->color->a);
|
item->color->b, item->color->a);
|
||||||
|
@ -2461,11 +2492,6 @@ _elm_color_item_selected_set(Eo *eo_item,
|
||||||
EINA_LIST_FOREACH(sd->items, l, eo_temp_item)
|
EINA_LIST_FOREACH(sd->items, l, eo_temp_item)
|
||||||
if (eo_item == eo_temp_item) sd->selected = l;
|
if (eo_item == eo_temp_item) sd->selected = l;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
elm_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
|
|
||||||
sd->selected = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
|
|
Loading…
Reference in New Issue