>Hello,
>This looks ok to me.
>
>1. Can you attach the diff file to this mail instead of pasting diff
>into the email contents?
>2. Can you add any sample code either elementary test or src/examples?
>
>Thanks.
>Daniel Juyung Seo (SeoZ)
Patch is attached, with
a) example usage as part of elemental/src/examples/gengrid_example_01.c; and
b) a bug fix to related code in elementary/src/lib/els_scroller.c
(there was a div/0 case)
Index: elementary/src/lib/elm_gengrid.c
===================================================================
--- elementary/src/lib/elm_gengrid.c (revision 63079)
+++ elementary/src/lib/elm_gengrid.c (working copy)
@@ -2471,6 +2471,46 @@
v_pagesize);
}
+EAPI void
+elm_gengrid_current_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->scr)
+ elm_smart_scroller_current_page_get(wd->scr, h_pagenumber, v_pagenumber);
+}
+
+EAPI void
+elm_gengrid_last_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->scr)
+ elm_smart_scroller_last_page_get(wd->scr, h_pagenumber, v_pagenumber);
+}
+
+EAPI void
+elm_gengrid_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->scr)
+ elm_smart_scroller_page_show(wd->scr, h_pagenumber, v_pagenumber);
+}
+
+EAPI void
+elm_gengrid_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->scr)
+ elm_smart_scroller_page_bring_in(wd->scr, h_pagenumber, v_pagenumber);
+}
+
EAPI Elm_Gengrid_Item *
elm_gengrid_first_item_get(const Evas_Object *obj)
{
Index: elementary/src/lib/els_scroller.c
===================================================================
--- elementary/src/lib/els_scroller.c (revision 63079)
+++ elementary/src/lib/els_scroller.c (working copy)
@@ -1339,8 +1339,20 @@
API_ENTRY return;
Evas_Coord x, y;
elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y);
- if (pagenumber_h) *pagenumber_h = (x + sd->pagesize_h - 1) / sd->pagesize_h;
- if (pagenumber_v) *pagenumber_v = (y + sd->pagesize_v - 1) / sd->pagesize_v;
+ if (pagenumber_h)
+ {
+ if (sd->pagesize_h > 0)
+ *pagenumber_h = (x + sd->pagesize_h - 1) / sd->pagesize_h;
+ else
+ *pagenumber_h = 0;
+ }
+ if (pagenumber_v)
+ {
+ if (sd->pagesize_v > 0)
+ *pagenumber_v = (y + sd->pagesize_v - 1) / sd->pagesize_v;
+ else
+ *pagenumber_v = 0;
+ }
}
void
@@ -1352,14 +1364,14 @@
if (pagenumber_h)
{
if (sd->pagesize_h > 0)
- *pagenumber_h = cw / sd->pagesize_h + 1;
+ *pagenumber_h = (cw / sd->pagesize_h) + 1;
else
*pagenumber_h = 0;
}
if (pagenumber_v)
{
if (sd->pagesize_v > 0)
- *pagenumber_v = ch / sd->pagesize_v + 1;
+ *pagenumber_v = (ch / sd->pagesize_v) + 1;
else
*pagenumber_v = 0;
}
Index: elementary/src/lib/Elementary.h.in
===================================================================
--- elementary/src/lib/Elementary.h.in (revision 63079)
+++ elementary/src/lib/Elementary.h.in (working copy)
@@ -8346,6 +8346,87 @@
EAPI void elm_gengrid_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
/**
+ * @brief Get gengrid current page number.
+ *
+ * @param obj The gengrid object
+ * @param h_pagenumber The horizontal page number
+ * @param v_pagenumber The vertical page number
+ *
+ * The page number starts from 0. 0 is the first page.
+ * Current page means the page which meet the top-left of the viewport.
+ * If there are two or more pages in the viewport, it returns the number of page
+ * which meet the top-left of the viewport.
+ *
+ * @see elm_gengrid_last_page_get()
+ * @see elm_gengrid_page_show()
+ * @see elm_gengrid_page_brint_in()
+ */
+ EAPI void elm_gengrid_current_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+
+ /**
+ * @brief Get scroll last page number.
+ *
+ * @param obj The gengrid object
+ * @param h_pagenumber The horizoptal page number
+ * @param v_pagenumber The vertical page number
+ *
+ * The page number starts from 0. 0 is the first page.
+ * This returns the last page number among the pages.
+ *
+ * @see elm_gengrid_current_page_get()
+ * @see elm_gengrid_page_show()
+ * @see elm_gengrid_page_brint_in()
+ */
+ EAPI void elm_gengrid_last_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+ /**
+ * Show a specific virtual region within the gengrid content object by page number.
+ *
+ * @param obj The gengrid object
+ * @param h_pagenumber The horizoptal page number
+ * @param v_pagenumber The vertical page number
+ *
+ * 0, 0 of the indicated page is located at the top-left of the viewport.
+ * This will jump to the page directly without animation.
+ *
+ * Example of usage:
+ *
+ * @code
+ * sc = elm_gengrid_add(win);
+ * elm_gengrid_content_set(sc, content);
+ * elm_gengrid_page_relative_set(sc, 1, 0);
+ * elm_gengrid_current_page_get(sc, &h_page, &v_page);
+ * elm_gengrid_page_show(sc, h_page + 1, v_page);
+ * @endcode
+ *
+ * @see elm_gengrid_page_bring_in()
+ */
+ EAPI void elm_gengrid_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+
+ /**
+ * Show a specific virtual region within the gengrid content object by page number.
+ *
+ * @param obj The gengrid object
+ * @param h_pagenumber The horizoptal page number
+ * @param v_pagenumber The vertical page number
+ *
+ * 0, 0 of the indicated page is located at the top-left of the viewport.
+ * This will slide to the page with animation.
+ *
+ * Example of usage:
+ *
+ * @code
+ * sc = elm_gengrid_add(win);
+ * elm_gengrid_content_set(sc, content);
+ * elm_gengrid_page_relative_set(sc, 1, 0);
+ * elm_gengrid_last_page_get(sc, &h_page, &v_page);
+ * elm_gengrid_page_bring_in(sc, h_page, v_page);
+ * @endcode
+ *
+ * @see elm_gengrid_page_show()
+ */
+ EAPI void elm_gengrid_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+
+ /**
* Set for what direction a given gengrid widget will expand while
* placing its items.
*
Index: elementary/src/examples/gengrid_example.c
===================================================================
--- elementary/src/examples/gengrid_example.c (revision 63079)
+++ elementary/src/examples/gengrid_example.c (working copy)
@@ -355,6 +355,18 @@
free(it);
}
+/* scrolling animation stopped callback */
+static void
+_grid_scroll_stopped_cb(void *data __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
+{
+ int h_pagenumber=0, v_pagenumber=0;
+ elm_gengrid_current_page_get(obj, &h_pagenumber, &v_pagenumber);
+ fprintf(stdout, "Grid current horiz page is %d, vert page is %d\n",
+ h_pagenumber, v_pagenumber);
+}
+
/* items grid horizontal alignment change */
static void
_h_align_change_cb(void *data,
@@ -540,6 +552,7 @@
evas_object_show(hbx_3);
elm_gengrid_align_get(grid, &h, &v);
+ evas_object_smart_callback_add(grid, "scroll,anim,stop", _grid_scroll_stopped_cb, NULL);
sl = elm_slider_add(win);
elm_object_text_set(sl, "Horiz. alignment");
@@ -577,6 +590,7 @@
elm_box_pack_end(hbx_3, sl);
evas_object_show(sl);
+ _page_change_cb(grid, sl, NULL);
evas_object_smart_callback_add(sl, "changed", _page_change_cb, grid);
gic.item_style = "default";
------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel