jackdanielz pushed a commit to branch master.
commit ae6a4b27f0a38504b01f688a977b30023a53df2a
Author: Yossi Kantor <[email protected]>
Date: Wed Mar 27 15:25:46 2013 +0200
Colorselector - selection in palette with up and down arrows is now possible
---
src/lib/elm_colorselector.c | 72 +++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 69 insertions(+), 3 deletions(-)
diff --git a/src/lib/elm_colorselector.c b/src/lib/elm_colorselector.c
index 2acc5c2..76b2837 100644
--- a/src/lib/elm_colorselector.c
+++ b/src/lib/elm_colorselector.c
@@ -27,6 +27,12 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] =
{NULL, NULL}
};
+enum Palette_Box_Direction
+{
+ PALETTE_BOX_UP,
+ PALETTE_BOX_DOWN
+};
+
static void
_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]);
}
+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
_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)
- return;
+ {
+ cl = _palette_box_vertical_item_get(sd->selected, PALETTE_BOX_UP);
+ if (!cl) cl = sd->selected;
+ }
}
else if ((!strcmp(ev->keyname, "Down")) ||
((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
{
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;
/*when focus is shifted to component start from
* first color type*/
sd->sel_color_type = HUE;
}
- else return;
}
else if (sd->focused == ELM_COLORSELECTOR_COMPONENTS)
{
--
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter