efl/src/lib/elementary/efl_page_transition_scroll.h

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