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

Reply via email to