summaryrefslogtreecommitdiff
path: root/src/lib/elementary/efl_page_transition_scroll.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elementary/efl_page_transition_scroll.h')
-rw-r--r--src/lib/elementary/efl_page_transition_scroll.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/lib/elementary/efl_page_transition_scroll.h b/src/lib/elementary/efl_page_transition_scroll.h
new file mode 100644
index 0000000000..b4203d7706
--- /dev/null
+++ b/src/lib/elementary/efl_page_transition_scroll.h
@@ -0,0 +1,93 @@
+#ifndef EFL_PAGE_TRANSITION_SCROLL_H
+#define EFL_PAGE_TRANSITION_SCROLL_H
+
+//#include "efl_ui_widget_pager.h"
+
+
+/**
+ * This is a description on how scroll transition works.
+ *
+ * Regardless of the number of pages, scroll transition maintains a fixed number
+ * of boxes which can contain pages. The boxes move along with scrolling and
+ * some of them are emptied or filled as they come in or out of screen area.
+ * When pager is scrolled left or right, each box takes the position of its
+ * previous or next box. Since the leftmost and rightmost boxes might move in
+ * reverse direction, they shouldn't be visible. This is why there are dummy
+ * boxes at both ends.
+ *
+ * Here is an example of box arrangement change by scrolling.
+ * The pager has 10 pages, numbered from 1 to 10.
+ * The current page is page5, and side_page_num equals 1.
+ *
+ * head |----- screen area ----| tail
+ * (dummy) | | (dummy)
+ * ---------- ---------- ---------- ---------- ----------
+ * | BOX1 | | BOX2 | | BOX3 | | BOX4 | | BOX5 |
+ * | | | | | | | | | |
+ * | (empty)| | page4 | | page5 | | page6 | | (empty)|
+ * | | | | | | | | | |
+ * | | | | | | | | | |
+ * | | | | | | | | | |
+ * ---------- ---------- ---------- ---------- ----------
+ * | |
+ * |----------------------|
+ *
+ * After scrolling left,
+ * 1. each box takes the position of it's previous box.
+ * 2. head and tail is changed.
+ * 3. The box moved to the end is emptied.
+ * 4. The box moved from the end is filled with content.
+ *
+ * head tail
+ * ---------- ---------- ---------- ---------- ----------
+ * | BOX2 | | BOX3 | | BOX4 | | BOX5 | | BOX1 |
+ * | | | | | | | | | |
+ * | (empty)| | page5 | | page6 | | page7 | | (empty)|
+ * |*emptied| | | | | |*filled | | |
+ * | | | | | | | | | |
+ * | | | | | | | | | |
+ * ---------- ---------- ---------- ---------- ----------
+ *
+ */
+
+
+typedef struct _Page_Info
+{
+ Evas_Map *map;
+ int id;
+ int pos;
+ int content_num;
+ Eo *obj;
+ Eo *content;
+
+ Eina_Rectangle geometry;
+ Eina_Rectangle temp;
+
+ struct _Page_Info *prev, *next;
+
+ Eina_Bool visible;
+ Eina_Bool vis_page;
+
+} Page_Info;
+
+typedef struct _Efl_Page_Transition_Scroll_Data Efl_Page_Transition_Scroll_Data;
+
+struct _Efl_Page_Transition_Scroll_Data
+{
+ Eina_List *page_infos;
+
+ Page_Info *head, *tail;
+
+ int page_info_num;
+ int side_page_num;
+
+ Eo *foreclip;
+ Eo *backclip;
+ Eina_Rectangle viewport;
+};
+
+#define EFL_PAGE_TRANSITION_SCROLL_DATA_GET(o, pd) \
+ Efl_Page_Transition_Scroll_Data *pd = \
+ efl_data_scope_get(o, EFL_PAGE_TRANSITION_SCROLL_CLASS)
+
+#endif