93 lines
3.3 KiB
C
93 lines
3.3 KiB
C
#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;
|
|
|
|
} 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
|