2fd475af71b86cba046fdb0497c7401bdcdfc731
[framework/uifw/ecore.git] / src / lib / ecore_evas / ecore_evas_private.h
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4 #ifndef _ECORE_EVAS_PRIVATE_H
5 #define _ECORE_EVAS_PRIVATE_H
6
7 #ifdef HAVE_CONFIG_H
8 # include <config.h>
9 #endif
10
11 #include "Ecore_Data.h"
12
13 #include <sys/types.h>
14 #include <sys/stat.h>
15 #include <fcntl.h>
16
17 #ifdef HAVE_SYS_MMAN_H
18 # include <sys/mman.h>
19 #endif
20
21 #include <Evas.h>
22
23 #define ECORE_MAGIC_EVAS 0x76543211
24
25 #ifndef BUILD_ECORE_DIRECTFB
26 # undef BUILD_ECORE_EVAS_DIRECTFB
27 #endif
28
29 #ifdef BUILD_ECORE_EVAS_X11
30 # include "Ecore_X.h"
31 # ifdef HAVE_ECORE_X_XCB
32 #  include <xcb/xcb.h>
33 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
34 #   include <Evas_Engine_Software_Xcb.h>
35 #  endif
36 #  ifdef BUILD_ECORE_EVAS_XRENDER_XCB
37 #   include <xcb/render.h>
38 #   include <Evas_Engine_XRender_Xcb.h>
39 #  endif
40 # endif
41 # ifdef HAVE_ECORE_X_XLIB
42 #  include <X11/Xlib.h>
43 #  include <X11/Xutil.h>
44 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_X11
45 #   include <Evas_Engine_Software_X11.h>
46 #  endif
47 #  ifdef BUILD_ECORE_EVAS_XRENDER_X11
48 #   include <X11/extensions/Xrender.h>
49 #   include <Evas_Engine_XRender_X11.h>
50 #  endif
51 #  ifdef BUILD_ECORE_EVAS_OPENGL_X11
52 #    include <Evas_Engine_GL_X11.h>
53 #  endif
54 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_16_X11
55 #   include <Evas_Engine_Software_16_X11.h>
56 #  endif
57 # endif
58 #endif
59
60 #ifdef BUILD_ECORE_EVAS_FB
61 # include <Evas_Engine_FB.h>
62 #endif
63
64 #ifdef BUILD_ECORE_EVAS_DIRECTFB
65 # include <Evas_Engine_DirectFB.h>
66 # include "Ecore_DirectFB.h"
67 #endif
68
69 #ifdef BUILD_ECORE_EVAS_BUFFER
70 # include <Evas_Engine_Buffer.h>
71 #endif
72
73 #ifdef BUILD_ECORE_EVAS_WIN32
74 # include "Ecore_Win32.h"
75 # ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW
76 #  include <Evas_Engine_Software_DDraw.h>
77 # endif
78 # ifdef BUILD_ECORE_EVAS_DIRECT3D
79 #  include <Evas_Engine_Direct3D.h>
80 # endif
81 # ifdef BUILD_ECORE_EVAS_OPENGL_GLEW
82 #  include <Evas_Engine_GL_Glew.h>
83 # endif
84 # ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW
85 #  include <Evas_Engine_Software_16_DDraw.h>
86 # endif
87 #endif
88
89 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
90 # include "Ecore_WinCE.h"
91 # include <Evas_Engine_Software_16_WinCE.h>
92 #endif
93
94
95 #define IDLE_FLUSH_TIME 0.5
96
97 typedef struct _Ecore_Evas             Ecore_Evas;
98 typedef struct _Ecore_Evas_Engine      Ecore_Evas_Engine;
99 typedef struct _Ecore_Evas_Engine_Func Ecore_Evas_Engine_Func;
100
101 struct _Ecore_Evas_Engine_Func
102 {
103    void        (*fn_free) (Ecore_Evas *ee);
104    void        (*fn_callback_resize_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
105    void        (*fn_callback_move_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
106    void        (*fn_callback_show_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
107    void        (*fn_callback_hide_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
108    void        (*fn_callback_delete_request_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
109    void        (*fn_callback_destroy_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
110    void        (*fn_callback_focus_in_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
111    void        (*fn_callback_focus_out_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
112    void        (*fn_callback_mouse_in_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
113    void        (*fn_callback_mouse_out_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
114    void        (*fn_callback_sticky_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
115    void        (*fn_callback_unsticky_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
116    void        (*fn_callback_pre_render_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
117    void        (*fn_callback_post_render_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
118    void        (*fn_move) (Ecore_Evas *ee, int x, int y);
119    void        (*fn_managed_move) (Ecore_Evas *ee, int x, int y);
120    void        (*fn_resize) (Ecore_Evas *ee, int w, int h);
121    void        (*fn_move_resize) (Ecore_Evas *ee, int x, int y, int w, int h);
122    void        (*fn_rotation_set) (Ecore_Evas *ee, int rot);
123    void        (*fn_shaped_set) (Ecore_Evas *ee, int shaped);
124    void        (*fn_show) (Ecore_Evas *ee);
125    void        (*fn_hide) (Ecore_Evas *ee);
126    void        (*fn_raise) (Ecore_Evas *ee);
127    void        (*fn_lower) (Ecore_Evas *ee);
128    void        (*fn_activate) (Ecore_Evas *ee);
129    void        (*fn_title_set) (Ecore_Evas *ee, const char *t);
130    void        (*fn_name_class_set) (Ecore_Evas *ee, const char *n, const char *c);
131    void        (*fn_size_min_set) (Ecore_Evas *ee, int w, int h);
132    void        (*fn_size_max_set) (Ecore_Evas *ee, int w, int h);
133    void        (*fn_size_base_set) (Ecore_Evas *ee, int w, int h);
134    void        (*fn_size_step_set) (Ecore_Evas *ee, int w, int h);
135    void        (*fn_object_cursor_set) (Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y);
136    void        (*fn_layer_set) (Ecore_Evas *ee, int layer);
137    void        (*fn_focus_set) (Ecore_Evas *ee, int on);
138    void        (*fn_iconified_set) (Ecore_Evas *ee, int on);
139    void        (*fn_borderless_set) (Ecore_Evas *ee, int on);
140    void        (*fn_override_set) (Ecore_Evas *ee, int on);
141    void        (*fn_maximized_set) (Ecore_Evas *ee, int on);
142    void        (*fn_fullscreen_set) (Ecore_Evas *ee, int on);
143    void        (*fn_avoid_damage_set) (Ecore_Evas *ee, int on);
144    void        (*fn_withdrawn_set) (Ecore_Evas *ee, int withdrawn);
145    void        (*fn_sticky_set) (Ecore_Evas *ee, int sticky);
146    void        (*fn_ignore_events_set) (Ecore_Evas *ee, int ignore);
147    void        (*fn_alpha_set) (Ecore_Evas *ee, int alpha);
148    void       *(*fn_window_get) (Ecore_Evas *ee);
149 };
150
151 struct _Ecore_Evas_Engine
152 {
153    Ecore_Evas_Engine_Func *func;
154
155 #if defined (BUILD_ECORE_EVAS_SOFTWARE_X11) || defined (BUILD_ECORE_EVAS_SOFTWARE_XCB)
156    struct {
157       Ecore_X_Window win_root;
158       Ecore_X_Window win;
159       Evas_List     *win_extra;
160       Ecore_X_Pixmap pmap;
161       Ecore_X_Pixmap mask;
162       Ecore_X_GC     gc;
163 #ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
164 # warning [XCB] No Region code
165 #else
166       Region         damages;
167 #endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
168       int            px, py, pw, ph;
169       unsigned char  direct_resize : 1;
170       unsigned char  using_bg_pixmap : 1;
171       unsigned char  managed : 1;
172       struct {
173            unsigned char modal : 1;
174            unsigned char sticky : 1;
175            unsigned char maximized_v : 1;
176            unsigned char maximized_h : 1;
177            unsigned char shaded : 1;
178            unsigned char skip_taskbar : 1;
179            unsigned char skip_pager : 1;
180            unsigned char fullscreen : 1;
181            unsigned char above : 1;
182            unsigned char below : 1;
183       } state;
184    } x;
185 #endif
186 #ifdef BUILD_ECORE_EVAS_FB
187    struct {
188       int real_w;
189       int real_h;
190    } fb;
191 #endif
192 #ifdef BUILD_ECORE_EVAS_BUFFER
193    struct {
194       void *pixels;
195       Evas_Object *image;
196    } buffer;
197 #endif
198 #ifdef BUILD_ECORE_EVAS_DIRECTFB
199    struct {
200       Ecore_DirectFB_Window *window;
201    } directfb;
202 #endif
203 #ifdef BUILD_ECORE_EVAS_WIN32
204    struct {
205       Ecore_Win32_Window *parent;
206       Ecore_Win32_Window *window;
207      struct {
208        unsigned char fullscreen : 1;
209      } state;
210    } win32;
211 #endif
212 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
213    struct {
214       Ecore_WinCE_Window *window;
215    } wince;
216 #endif
217
218    Ecore_Timer *idle_flush_timer;
219 };
220
221 struct _Ecore_Evas
222 {
223    Ecore_List  __list_data;
224    ECORE_MAGIC;
225    Evas       *evas;
226    const char *driver;
227    char       *name;
228    int         x, y, w, h;
229    short       rotation;
230    char        shaped  : 1;
231    char        visible : 1;
232    char        draw_ok : 1;
233    char        should_be_visible : 1;
234    char        alpha  : 1;
235
236    Evas_Hash  *data;
237
238    struct {
239       int      x, y;
240    } mouse;
241
242    struct {
243       int      w, h;
244    } expecting_resize;
245
246    struct {
247       char           *title;
248       char           *name;
249       char           *clas;
250       struct {
251          int          w, h;
252       } min,
253         max,
254         base,
255         step;
256       struct {
257          Evas_Object *object;
258          int          layer;
259          struct {
260             int       x, y;
261          } hot;
262       } cursor;
263       int             layer;
264       unsigned char   avoid_damage;
265       char            focused      : 1;
266       char            iconified    : 1;
267       char            borderless   : 1;
268       char            override     : 1;
269       char            maximized    : 1;
270       char            fullscreen   : 1;
271       char            withdrawn    : 1;
272       char            sticky       : 1;
273       char            request_pos  : 1;
274    } prop;
275
276    struct {
277       void          (*fn_resize) (Ecore_Evas *ee);
278       void          (*fn_move) (Ecore_Evas *ee);
279       void          (*fn_show) (Ecore_Evas *ee);
280       void          (*fn_hide) (Ecore_Evas *ee);
281       void          (*fn_delete_request) (Ecore_Evas *ee);
282       void          (*fn_destroy) (Ecore_Evas *ee);
283       void          (*fn_focus_in) (Ecore_Evas *ee);
284       void          (*fn_focus_out) (Ecore_Evas *ee);
285       void          (*fn_sticky) (Ecore_Evas *ee);
286       void          (*fn_unsticky) (Ecore_Evas *ee);
287       void          (*fn_mouse_in) (Ecore_Evas *ee);
288       void          (*fn_mouse_out) (Ecore_Evas *ee);
289       void          (*fn_pre_render) (Ecore_Evas *ee);
290       void          (*fn_post_render) (Ecore_Evas *ee);
291    } func;
292
293    Ecore_Evas_Engine engine;
294    Evas_List *sub_ecore_evas;
295
296    unsigned char ignore_events : 1;
297 };
298
299 #ifdef BUILD_ECORE_EVAS_X11
300 int _ecore_evas_x_shutdown(void);
301 #endif
302 #ifdef BUILD_ECORE_EVAS_FB
303 int _ecore_evas_fb_shutdown(void);
304 #endif
305 #ifdef BUILD_ECORE_EVAS_BUFFER
306 int _ecore_evas_buffer_shutdown(void);
307 void _ecore_evas_buffer_render(Ecore_Evas *ee);
308 #endif
309 #ifdef BUILD_ECORE_EVAS_DIRECTFB
310 int _ecore_evas_directfb_shutdown(void);
311 #endif
312 #ifdef BUILD_ECORE_EVAS_WIN32
313 int _ecore_evas_win32_shutdown(void);
314 #endif
315 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
316 int _ecore_evas_wince_shutdown(void);
317 #endif
318
319 void _ecore_evas_fps_debug_init(void);
320 void _ecore_evas_fps_debug_shutdown(void);
321 void _ecore_evas_fps_debug_rendertime_add(double t);
322 void _ecore_evas_free(Ecore_Evas *ee);
323 void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
324
325 #endif