It sets the maxium of the movable page at flicking.
* 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.
* 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:
_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;
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);
_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;
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);
}
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;
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;
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),
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"),
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,
#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
*
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;
}
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)
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
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
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
#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
*
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