jaehwan pushed a commit to branch master.
commit 0c1a4597857a8ba64f8e2a0ec961c9bf226881db
Author: Jaehwan Kim <[email protected]>
Date: Sat Apr 6 13:06:43 2013 +0900
Add the API elm_scroller_page_scroll_limit_set/get.
It sets the maxium of the movable page at flicking.
---
ChangeLog | 4 +++
NEWS | 1 +
src/lib/elm_interface_scrollable.c | 52 +++++++++++++++++++++++++++++----
src/lib/elm_interface_scrollable.h | 27 +++++++++++++++++
src/lib/elm_scroller.c | 49 +++++++++++++++++++++++++++++++
src/lib/elm_scroller.h | 60 ++++++++++++++++++++++++++++++++++++++
6 files changed, 187 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 17933fe..0c4d50d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index 014df47..d5e6632 100644
--- a/NEWS
+++ b/NEWS
@@ -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:
diff --git a/src/lib/elm_interface_scrollable.c
b/src/lib/elm_interface_scrollable.c
index 21398ec..051ff1d 100644
--- a/src/lib/elm_interface_scrollable.c
+++ b/src/lib/elm_interface_scrollable.c
@@ -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);
@@ -4027,6 +4039,28 @@ _elm_scroll_paging_get(Eo *obj EINA_UNUSED, void *_pd,
va_list *list)
}
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)
{
Evas_Coord x, y;
@@ -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"),
diff --git a/src/lib/elm_interface_scrollable.h
b/src/lib/elm_interface_scrollable.h
index 4978650..30a6621 100644
--- a/src/lib/elm_interface_scrollable.h
+++ b/src/lib/elm_interface_scrollable.h
@@ -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,
@@ -762,6 +764,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;
diff --git a/src/lib/elm_scroller.c b/src/lib/elm_scroller.c
index 39a581a..3f196dd 100644
--- a/src/lib/elm_scroller.c
+++ b/src/lib/elm_scroller.c
@@ -1049,6 +1049,51 @@ elm_scroller_page_size_get(const Evas_Object *obj,
}
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,
int *v_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
diff --git a/src/lib/elm_scroller.h b/src/lib/elm_scroller.h
index 3e0f37d..4d3876d 100644
--- a/src/lib/elm_scroller.h
+++ b/src/lib/elm_scroller.h
@@ -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
@@ -136,6 +138,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
*
@@ -382,6 +410,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.
*
* @param obj The scroller object
--
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire
the most talented Cisco Certified professionals. Visit the
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html