1 #ifndef EFL_UI_WIDGET_FLIP_H
2 #define EFL_UI_WIDGET_FLIP_H
3 
4 #include "Elementary.h"
5 
6 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
7  * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
8  * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
9  * IT AT RUNTIME.
10  */
11 
12 /**
13  * @addtogroup Widget
14  * @{
15  *
16  * @section elm-flip-class The Elementary Flip Class
17  *
18  * Elementary, besides having the @ref Flip widget, exposes its
19  * foundation -- the Elementary Flip Class -- in order to create other
20  * widgets which are a flip with some more logic on top.
21  */
22 
23 typedef struct _Slice               Slice;
24 
25 /**
26  * Base widget smart data extended with flip instance data.
27  */
28 typedef struct _Efl_Ui_Flip_Data Efl_Ui_Flip_Data;
29 struct _Efl_Ui_Flip_Data
30 {
31    Evas_Object          *obj;
32    Evas_Object          *clip;
33    Evas_Object          *event[4];
34    struct
35    {
36       Evas_Object *content, *clip;
37    } front, back;
38 
39    Eina_List            *content_list;
40 
41    Ecore_Animator       *animator;
42    double                start, len;
43    Ecore_Job            *job;
44    Evas_Coord            down_x, down_y, x, y, ox, oy, w, h;
45    Efl_Ui_Flip_Interaction  intmode;
46    Elm_Flip_Mode         mode;
47    int                   dir;
48    double                dir_hitsize[4];
49    Eina_Bool             dir_enabled[4];
50    int                   slices_w, slices_h;
51    Slice               **slices, **slices2;
52 
53    Eina_Bool             state : 1;
54    Eina_Bool             next_state : 1;
55    Eina_Bool             mouse_down : 1;
56    Eina_Bool             finish : 1;
57    Eina_Bool             started : 1;
58    Eina_Bool             backflip : 1;
59    Eina_Bool             pageflip : 1;
60    Eina_Bool             manual : 1;
61 };
62 
63 typedef struct _Vertex2             Vertex2;
64 typedef struct _Vertex3             Vertex3;
65 
66 struct _Slice
67 {
68    Evas_Object *obj;
69    double       u[4], v[4], x[4], y[4], z[4];
70 };
71 
72 struct _Vertex2
73 {
74    double x, y;
75 };
76 
77 struct _Vertex3
78 {
79    double x, y, z;
80 };
81 
82 /**
83  * @}
84  */
85 
86 #define EFL_UI_FLIP_DATA_GET(o, sd) \
87   Efl_Ui_Flip_Data * sd = efl_data_scope_get(o, EFL_UI_FLIP_CLASS)
88 
89 #define EFL_UI_FLIP_DATA_GET_OR_RETURN(o, ptr)          \
90   EFL_UI_FLIP_DATA_GET(o, ptr);                         \
91   if (EINA_UNLIKELY(!ptr))                           \
92     {                                                \
93        ERR("No widget data for object %p (%s)",      \
94            o, evas_object_type_get(o));              \
95        return;                                       \
96     }
97 
98 #define EFL_UI_FLIP_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
99   EFL_UI_FLIP_DATA_GET(o, ptr);                         \
100   if (EINA_UNLIKELY(!ptr))                           \
101     {                                                \
102        ERR("No widget data for object %p (%s)",      \
103            o, evas_object_type_get(o));              \
104        return val;                                   \
105     }
106 
107 #define EFL_UI_FLIP_CHECK(obj)                           \
108   if (EINA_UNLIKELY(!efl_isa((obj), EFL_UI_FLIP_CLASS))) \
109     return
110 
111 #endif
112