#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