Add the API elm_scroller_page_scroll_limit_set/get.
authorJaehwan Kim <jae.hwan.kim@samsung.com>
Mon, 8 Apr 2013 08:51:07 +0000 (17:51 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Wed, 10 Apr 2013 10:52:20 +0000 (19:52 +0900)
It sets the maxium of the movable page at flicking.

Change-Id: I1123f59529e3d931e0be95948120969ba82caa88

src/lib/elm_interface_scrollable.c
src/lib/elm_interface_scrollable.h
src/lib/elm_scroller.c
src/lib/elm_scroller.h

index 175aecf..4668d6d 100644 (file)
@@ -1894,7 +1894,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;
 
@@ -1905,10 +1905,16 @@ _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid,
    psd->api->content_size_get(sid->pan_obj, &cw, &ch);
    psd->api->pos_min_get(sid->pan_obj, &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);
@@ -1925,7 +1931,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;
 
@@ -1936,10 +1942,16 @@ _elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid,
    psd->api->content_size_get(sid->pan_obj, &cw, &ch);
    psd->api->pos_min_get(sid->pan_obj, 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);
@@ -3866,6 +3878,28 @@ _elm_scroll_paging_get(const Evas_Object *obj,
 }
 
 static void
+_elm_scroll_page_scroll_limit_set(const Evas_Object *obj,
+                                  int page_limit_h,
+                                  int page_limit_v)
+{
+   ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid);
+
+   sid->page_limit_h = page_limit_h;
+   sid->page_limit_v = page_limit_v;
+}
+
+static void
+_elm_scroll_page_scroll_limit_get(const Evas_Object *obj,
+                                  int *page_limit_h,
+                                  int *page_limit_v)
+{
+   ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid);
+
+   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(const Evas_Object *obj,
                              int *pagenumber_h,
                              int *pagenumber_v)
@@ -4021,6 +4055,8 @@ _elm_scroll_interface_add(Evas_Object *obj)
    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;
@@ -4118,6 +4154,8 @@ EAPI const Elm_Scrollable_Smart_Interface ELM_SCROLLABLE_IFACE =
    _elm_scroll_bounce_allow_get,
    _elm_scroll_paging_set,
    _elm_scroll_paging_get,
+   _elm_scroll_page_scroll_limit_set,
+   _elm_scroll_page_scroll_limit_get,
    _elm_scroll_current_page_get,
    _elm_scroll_last_page_get,
    _elm_scroll_page_show,
index 83ab0a4..389957a 100644 (file)
@@ -306,6 +306,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;
@@ -494,6 +495,12 @@ struct _Elm_Scrollable_Smart_Interface
                             double *pagerel_v,
                             Evas_Coord *pagesize_h,
                             Evas_Coord *pagesize_v);
+   void       (*page_scroll_limit_set)(const Evas_Object *obj,
+                                  int page_limit_h,
+                                  int page_limit_v);
+   void       (*page_scroll_limit_get)(const Evas_Object *obj,
+                                  int *page_limit_h,
+                                  int *page_limit_v);
    void       (*current_page_get)(const Evas_Object *obj,
                                   int *pagenumber_h,
                                   int *pagenumber_v);
index 5cd8c04..249fe5e 100644 (file)
@@ -992,6 +992,31 @@ elm_scroller_page_size_get(const Evas_Object *obj,
 }
 
 EAPI void
+elm_scroller_page_scroll_limit_set(Evas_Object *obj,
+                                   int page_limit_h,
+                                   int page_limit_v)
+{
+   ELM_SCROLLABLE_CHECK(obj);
+
+   if (page_limit_h < 1)
+     page_limit_h = 9999;
+   if (page_limit_v < 1)
+     page_limit_v = 9999;
+
+   s_iface->page_scroll_limit_set(obj, page_limit_h, page_limit_v);
+}
+
+EAPI void
+elm_scroller_page_scroll_limit_get(Evas_Object *obj,
+                                   int *page_limit_h,
+                                   int *page_limit_v)
+{
+   ELM_SCROLLABLE_CHECK(obj);
+
+   s_iface->page_scroll_limit_get(obj, page_limit_h, page_limit_v);
+}
+
+EAPI void
 elm_scroller_current_page_get(const Evas_Object *obj,
                               int *h_pagenumber,
                               int *v_pagenumber)
index 0cf56ed..d550b3d 100644 (file)
@@ -287,6 +287,39 @@ 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(Evas_Object *obj, int page_limit_h, int 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(Evas_Object *obj, int *page_limit_h, int *page_limit_v);
+
+/**
  * @brief Get scroll current page number.
  *
  * @param obj The scroller object