forked from enlightenment/efl
elm gengrid: Added page feature to gengrid. Patch by Benjamin Drucker
<benjamin.t.drucker@alum.mit.edu>. Thanks a lot! On Wed, Aug 31, 2011 at 1:52 PM, Benjamin Drucker <benjamin.t.drucker@alum.mit.edu> wrote: > Earlier this month, there was a svn commit > (http://trac.enlightenment.org/e/changeset/62496) which added a few > page-related APIs to the elm scroller. These should probably also be > added to gengrid, genlist and maybe even grid and list. Right now, > though, I need them for gengrid. So I propose this patch, based > entirely on the change that went in before. I've built it and I'm > using these new gengrid APIs in my code now. On Fri, Sep 9, 2011 at 4:45 PM, Benjamin Drucker <benjamin.t.drucker@alum.mit.edu> wrote: > Slowly but surely.... > > This version of the gengrid page APIs patch has the following changes: > 1. fixed spacing issues > 2. add const where needed > 3. submitted a gengrid longpressed change in a separate patch > > I really want to try to squeak this in the upcoming release if at all > possible. If I have an extra space in some file, I promise I'll not do > it again for the next patch! > > Thanks!! > Ben SVN revision: 63403
This commit is contained in:
parent
b307418960
commit
45372847f9
|
@ -365,6 +365,18 @@ _grid_del(void *data,
|
|||
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,
|
||||
|
@ -551,6 +563,7 @@ elm_main(int argc __UNUSED__,
|
|||
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");
|
||||
|
@ -588,6 +601,7 @@ elm_main(int argc __UNUSED__,
|
|||
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";
|
||||
|
|
|
@ -8413,6 +8413,88 @@ extern "C" {
|
|||
*/
|
||||
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(const 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(const 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(const 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(const 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.
|
||||
|
|
|
@ -2750,6 +2750,46 @@ elm_gengrid_page_size_set(Evas_Object *obj,
|
|||
v_pagesize);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_gengrid_current_page_get(const 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(const 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(const 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(const 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)
|
||||
{
|
||||
|
|
|
@ -1339,8 +1339,20 @@ elm_smart_scroller_current_page_get(Evas_Object *obj, int *pagenumber_h, int *pa
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue