Add the API elm_scroller_page_scroll_limit_set/get.

It sets the maxium of the movable page at flicking.
This commit is contained in:
Jaehwan Kim 2013-04-06 13:06:43 +09:00
parent be92860b61
commit 85849217f9
6 changed files with 187 additions and 6 deletions

View File

@ -1204,3 +1204,7 @@
* Add convenient macros - elm_object_translatable_part_text_set(), elm_object_item_translatable_part_text_set().
2013-04-06 Jaehwan Kim
* Add the API elm_scroller_page_scroll_limit_set/get.
It sets the maxium of the movable page at flicking.

View File

@ -57,6 +57,7 @@ Additions:
* Add elm_map smart callback - "language,changed".
* Add the repeat_events_set/get for blocking the events of content objects.
* Add convenient macros - elm_object_translatable_part_text_set(), elm_object_item_translatable_part_text_set().
* Add the API elm_scroller_page_scroll_limit_set/get.
Improvements:

View File

@ -1982,7 +1982,7 @@ static Evas_Coord
_elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid,
int offset)
{
Evas_Coord x, y, w, h, cw, ch, minx = 0;
Evas_Coord x, y, w, h, dx, cw, ch, minx = 0;
if (!sid->pan_obj) return 0;
@ -1991,10 +1991,16 @@ _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid,
eo_do(sid->pan_obj, elm_obj_pan_content_size_get(&cw, &ch));
eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, NULL));
x += offset;
if (sid->pagerel_h > 0.0)
sid->pagesize_h = w * sid->pagerel_h;
dx = (sid->pagesize_h * ((double)sid->page_limit_h - 0.5));
if (offset > 0)
x += (abs(offset) < dx ? offset : dx);
else
x += (abs(offset) < dx ? offset : -dx);
if (sid->pagesize_h > 0)
{
x = x + (sid->pagesize_h * 0.5);
@ -2011,7 +2017,7 @@ static Evas_Coord
_elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid,
int offset)
{
Evas_Coord x, y, w, h, cw, ch, miny = 0;
Evas_Coord x, y, w, h, dy, cw, ch, miny = 0;
if (!sid->pan_obj) return 0;
@ -2020,10 +2026,16 @@ _elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid,
eo_do(sid->pan_obj, elm_obj_pan_content_size_get(&cw, &ch));
eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(NULL, &miny));
y += offset;
if (sid->pagerel_v > 0.0)
sid->pagesize_v = h * sid->pagerel_v;
dy = (sid->pagesize_v * ((double)sid->page_limit_v - 0.5));
if (offset > 0)
y += (abs(offset) < dy ? offset : dy);
else
y += (abs(offset) < dy ? offset : -dy);
if (sid->pagesize_v > 0)
{
y = y + (sid->pagesize_v * 0.5);
@ -4026,6 +4038,28 @@ _elm_scroll_paging_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
if (pagesize_v) *pagesize_v = sid->pagesize_v;
}
static void
_elm_scroll_page_scroll_limit_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
int page_limit_h = va_arg(*list, int);
int page_limit_v = va_arg(*list, int);
sid->page_limit_h = page_limit_h;
sid->page_limit_v = page_limit_v;
}
static void
_elm_scroll_page_scroll_limit_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
int *page_limit_h = va_arg(*list, int *);
int *page_limit_v = va_arg(*list, int *);
if (page_limit_h) *page_limit_h = sid->page_limit_h;
if (page_limit_v) *page_limit_v = sid->page_limit_v;
}
static void
_elm_scroll_current_page_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
@ -4181,6 +4215,8 @@ _elm_scroll_interface_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
sid->step.y = 32;
sid->page.x = -50;
sid->page.y = -50;
sid->page_limit_h = 9999;
sid->page_limit_v = 9999;
sid->hbar_flags = ELM_SCROLLER_POLICY_AUTO;
sid->vbar_flags = ELM_SCROLLER_POLICY_AUTO;
sid->hbar_visible = EINA_TRUE;
@ -4282,6 +4318,8 @@ _elm_scrollable_interface_constructor(Eo_Class *klass)
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_GET), _elm_scroll_bounce_allow_get),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_SET), _elm_scroll_paging_set),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_GET), _elm_scroll_paging_get),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_SET), _elm_scroll_page_scroll_limit_set),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_GET), _elm_scroll_page_scroll_limit_get),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CURRENT_PAGE_GET), _elm_scroll_current_page_get),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_LAST_PAGE_GET), _elm_scroll_last_page_get),
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SHOW), _elm_scroll_page_show),
@ -4350,6 +4388,8 @@ static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_GET, "description here"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_SET, "description here"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_GET, "description here"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_SET, "Set the maxium of the movable page at a flicking"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_GET, "Get the maxium of the movable page at a flicking"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_CURRENT_PAGE_GET, "description here"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_LAST_PAGE_GET, "description here"),
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SHOW, "description here"),

View File

@ -196,6 +196,8 @@ enum
ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_GET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_SET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_GET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_SET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_GET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_CURRENT_PAGE_GET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_LAST_PAGE_GET,
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SHOW,
@ -761,6 +763,30 @@ enum
*/
#define elm_scrollable_interface_paging_get(pagerel_h, pagerel_v, pagesize_h, pagesize_v) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_GET), EO_TYPECHECK(double *, pagerel_h), EO_TYPECHECK(double *, pagerel_v), EO_TYPECHECK(Evas_Coord *, pagesize_h), EO_TYPECHECK(Evas_Coord *, pagesize_v)
/**
* @def elm_scrollable_interface_page_scroll_limit_set
* @since 1.8
*
* No description supplied by the EAPI.
*
* @param[in] page_limit_h
* @param[in] page_limit_v
*
*/
#define elm_scrollable_interface_page_scroll_limit_set(page_limit_h, page_limit_v) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_SET), EO_TYPECHECK(int, page_limit_h), EO_TYPECHECK(int, page_limit_v)
/**
* @def elm_scrollable_interface_page_scroll_limit_get
* @since 1.8
*
* No description supplied by the EAPI.
*
* @param[out] page_limit_h
* @param[out] page_limit_v
*
*/
#define elm_scrollable_interface_page_scroll_limit_get(page_limit_h, page_limit_v) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_SCROLL_LIMIT_GET), EO_TYPECHECK(int *, page_limit_h), EO_TYPECHECK(int *, page_limit_v)
/**
* @def elm_scrollable_interface_current_page_get
* @since 1.8
@ -1054,6 +1080,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
double pagerel_h, pagerel_v;
Evas_Coord pagesize_h, pagesize_v;
int page_limit_h, page_limit_v;
Eina_Bool momentum_animator_disabled : 1;
Eina_Bool bounce_animator_disabled : 1;

View File

@ -1048,6 +1048,51 @@ elm_scroller_page_size_get(const Evas_Object *obj,
eo_do((Eo *)obj, elm_scrollable_interface_paging_get(NULL, NULL, h_pagesize, v_pagesize));
}
EAPI void
elm_scroller_page_scroll_limit_set(const Evas_Object *obj,
int page_limit_h,
int page_limit_v)
{
ELM_SCROLLABLE_CHECK(obj);
eo_do((Eo *)obj, elm_obj_scroller_page_scroll_limit_set
(page_limit_h, page_limit_v));
}
static void
_page_scroll_limit_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
int page_limit_h = va_arg(*list, int);
int page_limit_v = va_arg(*list, int);
if (page_limit_h < 1)
page_limit_h = 9999;
if (page_limit_v < 1)
page_limit_v = 9999;
eo_do(obj, elm_scrollable_interface_page_scroll_limit_set
(page_limit_h, page_limit_v));
}
EAPI void
elm_scroller_page_scroll_limit_get(const Evas_Object *obj,
int *page_limit_h,
int *page_limit_v)
{
ELM_SCROLLABLE_CHECK(obj);
eo_do((Eo *)obj, elm_obj_scroller_page_scroll_limit_get
(page_limit_h, page_limit_v));
}
static void
_page_scroll_limit_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
int *page_limit_h = va_arg(*list, int *);
int *page_limit_v = va_arg(*list, int *);
eo_do(obj, elm_scrollable_interface_page_scroll_limit_get
(page_limit_h, page_limit_v));
}
EAPI void
elm_scroller_current_page_get(const Evas_Object *obj,
int *h_pagenumber,
@ -1187,6 +1232,8 @@ _class_constructor(Eo_Class *klass)
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_REGION_GET), _region_get),
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_CHILD_SIZE_GET), _child_size_get),
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_RELATIVE_SET), _page_relative_set),
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_SET), _page_scroll_limit_set),
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_GET), _page_scroll_limit_get),
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_SET), _propagate_events_set),
EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_GET), _propagate_events_get),
EO_OP_FUNC_SENTINEL
@ -1201,6 +1248,8 @@ static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_REGION_GET, "Get the currently visible content region."),
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_CHILD_SIZE_GET, "Get the size of the content object."),
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PAGE_RELATIVE_SET, "Set scroll page size relative to viewport size."),
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_SET, "Set the maxium of the movable page at a flicking."),
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_GET, "Get the maxium of the movable page at a flicking."),
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_SET, "Set event propagation on a scroller."),
EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_GET, "Get event propagation for a scroller."),
EO_OP_DESCRIPTION_SENTINEL

View File

@ -73,6 +73,8 @@ enum
ELM_OBJ_SCROLLER_SUB_ID_REGION_GET,
ELM_OBJ_SCROLLER_SUB_ID_CHILD_SIZE_GET,
ELM_OBJ_SCROLLER_SUB_ID_PAGE_RELATIVE_SET,
ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_SET,
ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_GET,
ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_SET,
ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_GET,
ELM_OBJ_SCROLLER_SUB_ID_LAST
@ -135,6 +137,32 @@ enum
*/
#define elm_obj_scroller_page_relative_set(h_pagerel, v_pagerel) ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_RELATIVE_SET), EO_TYPECHECK(double, h_pagerel), EO_TYPECHECK(double, v_pagerel)
/**
* @def elm_obj_scroller_page_scroll_limit_set
* @since 1.8
*
* @brief Set the maxium of the movable page at a flicking.
*
* @param[in] page_limit_h
* @param[in] page_limit_v
*
* @see elm_scroller_page_scroll_limit_set
*/
#define elm_obj_scroller_page_scroll_limit_set(page_limit_h, page_limit_v) ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_SET), EO_TYPECHECK(int, page_limit_h), EO_TYPECHECK(int, page_limit_v)
/**
* @def elm_obj_scroller_page_scroll_limit_get
* @since 1.8
*
* @brief Get the maxium of the movable page at a flicking.
*
* @param[in] page_limit_h
* @param[in] page_limit_v
*
* @see elm_scroller_page_scroll_limit_get
*/
#define elm_obj_scroller_page_scroll_limit_get(page_limit_h, page_limit_v) ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_GET), EO_TYPECHECK(int *, page_limit_h), EO_TYPECHECK(int *, page_limit_v)
/**
* @def elm_obj_scroller_propagate_events_set
* @since 1.8
@ -381,6 +409,38 @@ EAPI void elm_scroller_page_size_set(Evas_Object *obj, E
*/
EAPI void elm_scroller_page_size_get(const Evas_Object *obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize);
/**
* @brief Set the maxium of the movable page at a flicking.
*
* @param obj The scroller object
* @param page_limit_h The maxium of the movable horizontal page
* @param page_limit_v The maxium of the movable vertical page
*
* The value of maxium movable page should be more than 1.
*
* @see elm_scroller_page_scroll_limit_get()
*
* @since 1.8
*
* @ingroup Scroller
*/
EAPI void elm_scroller_page_scroll_limit_set(const Evas_Object *obj, Evas_Coord page_limit_h, Evas_Coord page_limit_v);
/**
* @brief Get the maxium of the movable page at a flicking.
*
* @param obj The scroller object
* @param page_limit_h The maxium of the movable horizontal page
* @param page_limit_v The maxium of the movable vertical page
*
* @see elm_scroller_page_scroll_limit_set()
*
* @since 1.8
*
* @ingroup Scroller
*/
EAPI void elm_scroller_page_scroll_limit_get(const Evas_Object *obj, Evas_Coord *page_limit_h, Evas_Coord *page_limit_v);
/**
* @brief Get scroll current page number.
*