forked from enlightenment/efl
Colorselector - selection in palette with up and down arrows is now possible
This commit is contained in:
parent
3df6097679
commit
2b47d9ecd6
|
@ -27,6 +27,12 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] =
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Palette_Box_Direction
|
||||||
|
{
|
||||||
|
PALETTE_BOX_UP,
|
||||||
|
PALETTE_BOX_DOWN
|
||||||
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_items_del(Elm_Colorselector_Smart_Data *sd)
|
_items_del(Elm_Colorselector_Smart_Data *sd)
|
||||||
{
|
{
|
||||||
|
@ -1566,6 +1572,63 @@ _elm_colorselector_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
free(tmp[i]);
|
free(tmp[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_List*
|
||||||
|
_palette_box_vertical_item_get(Eina_List* ref_item, enum Palette_Box_Direction dir)
|
||||||
|
{
|
||||||
|
Evas_Coord basex, basey, x, y, dx, min_dx;
|
||||||
|
Elm_Color_Item *item;
|
||||||
|
Eina_List* l;
|
||||||
|
Eina_List* res = NULL;
|
||||||
|
Eina_List* (*dir_func)(const Eina_List*);
|
||||||
|
|
||||||
|
if (!ref_item) return NULL;
|
||||||
|
|
||||||
|
switch(dir)
|
||||||
|
{
|
||||||
|
case PALETTE_BOX_UP:
|
||||||
|
dir_func = eina_list_prev;
|
||||||
|
break;
|
||||||
|
case PALETTE_BOX_DOWN:
|
||||||
|
dir_func = eina_list_next;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
item = eina_list_data_get(ref_item);
|
||||||
|
evas_object_geometry_get(VIEW(item), &basex, &basey, NULL, NULL);
|
||||||
|
|
||||||
|
for (l = ref_item; l; l = dir_func(l))
|
||||||
|
{
|
||||||
|
item = eina_list_data_get(l);
|
||||||
|
evas_object_geometry_get(VIEW(item), &x, &y, NULL, NULL);
|
||||||
|
if (basey != y) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
basey = y;
|
||||||
|
min_dx = -1;
|
||||||
|
|
||||||
|
for (; l; l = dir_func(l))
|
||||||
|
{
|
||||||
|
item = eina_list_data_get(l);
|
||||||
|
evas_object_geometry_get(VIEW(item), &x, &y, NULL, NULL);
|
||||||
|
if (basey != y) break;
|
||||||
|
|
||||||
|
dx = abs(x - basex);
|
||||||
|
if (dx < min_dx || min_dx < 0)
|
||||||
|
{
|
||||||
|
min_dx = dx;
|
||||||
|
res = l;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_elm_colorselector_smart_event(Eo *obj, void *_pd, va_list *list)
|
_elm_colorselector_smart_event(Eo *obj, void *_pd, va_list *list)
|
||||||
{
|
{
|
||||||
|
@ -1631,21 +1694,24 @@ _elm_colorselector_smart_event(Eo *obj, void *_pd, va_list *list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sd->focused == ELM_COLORSELECTOR_PALETTE)
|
else if (sd->focused == ELM_COLORSELECTOR_PALETTE)
|
||||||
return;
|
{
|
||||||
|
cl = _palette_box_vertical_item_get(sd->selected, PALETTE_BOX_UP);
|
||||||
|
if (!cl) cl = sd->selected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ((!strcmp(ev->keyname, "Down")) ||
|
else if ((!strcmp(ev->keyname, "Down")) ||
|
||||||
((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
|
((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
|
||||||
{
|
{
|
||||||
if (sd->focused == ELM_COLORSELECTOR_PALETTE)
|
if (sd->focused == ELM_COLORSELECTOR_PALETTE)
|
||||||
{
|
{
|
||||||
if (sd->mode == ELM_COLORSELECTOR_BOTH)
|
cl = _palette_box_vertical_item_get(sd->selected, PALETTE_BOX_DOWN);
|
||||||
|
if (sd->mode == ELM_COLORSELECTOR_BOTH && !cl)
|
||||||
{
|
{
|
||||||
sd->focused = ELM_COLORSELECTOR_COMPONENTS;
|
sd->focused = ELM_COLORSELECTOR_COMPONENTS;
|
||||||
/*when focus is shifted to component start from
|
/*when focus is shifted to component start from
|
||||||
* first color type*/
|
* first color type*/
|
||||||
sd->sel_color_type = HUE;
|
sd->sel_color_type = HUE;
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
}
|
}
|
||||||
else if (sd->focused == ELM_COLORSELECTOR_COMPONENTS)
|
else if (sd->focused == ELM_COLORSELECTOR_COMPONENTS)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue