This small patch allows to get a smart callback when the scrollers in an
elm_list or in an elm_genlist fire the edge,{top,bottom,left,right}
signals, backporting them to the list object.
The new smart callbacks called are:
· "scroll,edge,top" - the list is scrolled until the top edge
· "scroll,edge,bottom" - the list is scrolled until the bottom edge
· "scroll,edge,left" - the list is scrolled until the left edge
· "scroll,edge,right" - the list is scrolled until the right edge
I figure this could be useful for creating dynamic lists which get
updated (adding more items) when the bottom edge is reached...
M3T
Index: src/lib/elm_genlist.c
===================================================================
--- src/lib/elm_genlist.c (revisione 54044)
+++ src/lib/elm_genlist.c (copia locale)
@@ -1844,6 +1844,34 @@
elm_smart_scroller_freeze_set(wd->scr, 0);
}
+static void
+_scroll_edge_left(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,left", NULL);
+}
+
+static void
+_scroll_edge_right(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,right", NULL);
+}
+
+static void
+_scroll_edge_top(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,top", NULL);
+}
+
+static void
+_scroll_edge_bottom(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,bottom", NULL);
+}
+
/**
* Add a new Genlist object
*
@@ -1898,6 +1926,11 @@
elm_smart_scroller_bounce_allow_set(wd->scr, EINA_FALSE,
_elm_config->thumbscroll_bounce_enable);
+ evas_object_smart_callback_add(wd->scr, "edge,left", _scroll_edge_left, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,right", _scroll_edge_right, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,top", _scroll_edge_top, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,bottom", _scroll_edge_bottom, obj);
+
wd->obj = obj;
wd->mode = ELM_LIST_SCROLL;
wd->max_items_per_block = 32;
Index: src/lib/elm_list.c
===================================================================
--- src/lib/elm_list.c (revisione 54044)
+++ src/lib/elm_list.c (copia locale)
@@ -70,6 +70,10 @@
static void _mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info);
static void _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info);
static void _mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_info);
+static void _scroll_edge_left(void *data, Evas_Object *scr, void *event_info);
+static void _scroll_edge_right(void *data, Evas_Object *scr, void *event_info);
+static void _scroll_edge_top(void *data, Evas_Object *scr, void *event_info);
+static void _scroll_edge_bottom(void *data, Evas_Object *scr, void *event_info);
static Eina_Bool _item_multi_select_up(Widget_Data *wd);
static Eina_Bool _item_multi_select_down(Widget_Data *wd);
static Eina_Bool _item_single_select_up(Widget_Data *wd);
@@ -681,6 +685,34 @@
}
}
+static void
+_scroll_edge_left(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,left", NULL);
+}
+
+static void
+_scroll_edge_right(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,right", NULL);
+}
+
+static void
+_scroll_edge_top(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,top", NULL);
+}
+
+static void
+_scroll_edge_bottom(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
+{
+ Evas_Object *obj = data;
+ evas_object_smart_callback_call(obj, "scroll,edge,bottom", NULL);
+}
+
static Eina_Bool
_long_press(void *data)
{
@@ -1162,6 +1194,11 @@
wd->mode = ELM_LIST_SCROLL;
+ evas_object_smart_callback_add(wd->scr, "edge,left", _scroll_edge_left, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,right", _scroll_edge_right, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,top", _scroll_edge_top, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,bottom", _scroll_edge_bottom, obj);
+
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
evas_object_smart_callback_add(obj, "scroll-hold-on", _hold_on, obj);
evas_object_smart_callback_add(obj, "scroll-hold-off", _hold_off, obj);
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in (revisione 54044)
+++ src/lib/Elementary.h.in (copia locale)
@@ -1468,6 +1468,10 @@
* "selected" - when the user selected an item
* "unselected" - when the user selected an item
* "longpressed" - an item in the hoversel list is long-pressed
+ * "scroll,edge,top" - the list is scrolled until the top edge
+ * "scroll,edge,bottom" - the list is scrolled until the bottom edge
+ * "scroll,edge,left" - the list is scrolled until the left edge
+ * "scroll,edge,right" - the list is scrolled until the right edge
*/
// FIXME: incomplete - carousel. don't use this until this comment is removed
Index: src/bin/test_list.c
===================================================================
--- src/bin/test_list.c (revisione 54044)
+++ src/bin/test_list.c (copia locale)
@@ -9,6 +9,30 @@
elm_list_item_show(data);
}
+static void
+scroll_top(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Top edge!\n");
+}
+
+static void
+scroll_bottom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Bottom edge!\n");
+}
+
+static void
+scroll_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Left edge!\n");
+}
+
+static void
+scroll_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Right edge!\n");
+}
+
void
test_list(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
@@ -147,6 +171,11 @@
evas_object_resize(win, 320, 300);
evas_object_show(win);
+
+ evas_object_smart_callback_add(li, "scroll,edge,top", scroll_top, NULL);
+ evas_object_smart_callback_add(li, "scroll,edge,bottom", scroll_bottom, NULL);
+ evas_object_smart_callback_add(li, "scroll,edge,left", scroll_left, NULL);
+ evas_object_smart_callback_add(li, "scroll,edge,right", scroll_right, NULL);
}
void
Index: src/bin/test_genlist.c
===================================================================
--- src/bin/test_genlist.c (revisione 54044)
+++ src/bin/test_genlist.c (copia locale)
@@ -877,6 +877,30 @@
}
static void
+scroll_top(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Top edge!\n");
+}
+
+static void
+scroll_bottom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Bottom edge!\n");
+}
+
+static void
+scroll_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Left edge!\n");
+}
+
+static void
+scroll_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ printf("Right edge!\n");
+}
+
+static void
item_drag(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
printf("drag\n");
@@ -945,6 +969,10 @@
evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL);
evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL);
evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL);
+ evas_object_smart_callback_add(gl, "scroll,edge,top", scroll_top, NULL);
+ evas_object_smart_callback_add(gl, "scroll,edge,bottom", scroll_bottom, NULL);
+ evas_object_smart_callback_add(gl, "scroll,edge,left", scroll_left, NULL);
+ evas_object_smart_callback_add(gl, "scroll,edge,right", scroll_right, NULL);
evas_object_smart_callback_add(gl, "drag", item_drag, NULL);
evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL);
evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL);
------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a
Billion" shares his insights and actions to help propel your
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel