[SVN's EFL Migration] ecore in SLP is merged with SVN r55371.
[profile/ivi/ecore.git] / src / lib / ecore_evas / ecore_evas_private.h
1 #ifndef _ECORE_EVAS_PRIVATE_H
2 #define _ECORE_EVAS_PRIVATE_H
3
4 #ifdef HAVE_CONFIG_H
5 # include <config.h>
6 #endif
7
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <fcntl.h>
11
12 #ifdef HAVE_SYS_MMAN_H
13 # include <sys/mman.h>
14 #endif
15
16 #include <Evas.h>
17 #include <ecore_private.h>
18 #include <Ecore_Input.h>
19 #include <Ecore_Input_Evas.h>
20
21 #define ECORE_MAGIC_EVAS 0x76543211
22
23 #ifndef BUILD_ECORE_DIRECTFB
24 # undef BUILD_ECORE_EVAS_DIRECTFB
25 #endif
26
27 #ifdef BUILD_ECORE_EVAS_X11
28 # include "Ecore_X.h"
29 # ifdef HAVE_ECORE_X_XCB
30 #  include <xcb/xcb.h>
31 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
32 #   include <Evas_Engine_Software_X11.h>
33 #  endif
34 #  ifdef BUILD_ECORE_EVAS_XRENDER_XCB
35 #   include <xcb/render.h>
36 #   include <Evas_Engine_XRender_X11.h>
37 #  endif
38 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_8_X11
39 #   include <Evas_Engine_Software_8_X11.h>
40 #  endif
41 # endif
42 # ifdef HAVE_ECORE_X_XLIB
43 #  include <X11/Xlib.h>
44 #  include <X11/Xutil.h>
45 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_XLIB
46 #   include <Evas_Engine_Software_X11.h>
47 #  endif
48 #  ifdef BUILD_ECORE_EVAS_XRENDER_X11
49 #   include <X11/extensions/Xrender.h>
50 #   include <Evas_Engine_XRender_X11.h>
51 #  endif
52 #  ifdef BUILD_ECORE_EVAS_OPENGL_X11
53 #    include <Evas_Engine_GL_X11.h>
54 #  endif
55 #  ifdef BUILD_ECORE_EVAS_SOFTWARE_16_X11
56 #   include <Evas_Engine_Software_16_X11.h>
57 #  endif
58 # endif
59 #endif
60
61 #ifdef BUILD_ECORE_EVAS_FB
62 # include <Evas_Engine_FB.h>
63 #endif
64
65 #ifdef BUILD_ECORE_EVAS_DIRECTFB
66 # include <Evas_Engine_DirectFB.h>
67 # include "Ecore_DirectFB.h"
68 #endif
69
70 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
71 # include <Evas_Engine_Buffer.h>
72 #endif
73
74 #ifdef BUILD_ECORE_EVAS_WIN32
75 # include "Ecore_Win32.h"
76 # ifdef BUILD_ECORE_EVAS_SOFTWARE_GDI
77 #  include <Evas_Engine_Software_Gdi.h>
78 # endif
79 # ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW
80 #  include <Evas_Engine_Software_DDraw.h>
81 # endif
82 # ifdef BUILD_ECORE_EVAS_DIRECT3D
83 #  include <Evas_Engine_Direct3D.h>
84 # endif
85 # ifdef BUILD_ECORE_EVAS_OPENGL_GLEW
86 #  include <Evas_Engine_GL_Glew.h>
87 # endif
88 # ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW
89 #  include <Evas_Engine_Software_16_DDraw.h>
90 # endif
91 #endif
92
93 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
94 # include "Ecore_WinCE.h"
95 # include <Evas_Engine_Software_16_WinCE.h>
96 #endif
97
98 /**
99    Log domain macros and variable
100  **/
101
102 extern int _ecore_evas_log_dom;
103
104 #ifdef ECORE_EVAS_DEFAULT_LOG_COLOR
105 # undef ECORE_EVAS_DEFAULT_LOG_COLOR
106 #endif
107 #define ECORE_EVAS_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
108
109 #ifdef ERR
110 # undef ERR
111 #endif
112 #define ERR(...) EINA_LOG_DOM_ERR(_ecore_evas_log_dom, __VA_ARGS__)
113 #ifdef DBG
114 # undef DBG
115 #endif
116 #define DBG(...) EINA_LOG_DOM_DBG(_ecore_evas_log_dom, __VA_ARGS__)
117 #ifdef INF
118 # undef INF
119 #endif
120 #define INF(...) EINA_LOG_DOM_INFO(_ecore_evas_log_dom, __VA_ARGS__)
121 #ifdef WRN
122 # undef WRN
123 #endif
124 #define WRN(...) EINA_LOG_DOM_WARN(_ecore_evas_log_dom, __VA_ARGS__)
125 #ifdef CRIT
126 # undef CRIT
127 #endif
128 #define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_evas_log_dom, __VA_ARGS__)
129
130
131 #define IDLE_FLUSH_TIME 0.5
132 #ifndef _ECORE_EVAS_H
133 typedef struct _Ecore_Evas Ecore_Evas;
134 #endif
135
136 typedef struct _Ecore_Evas_Engine      Ecore_Evas_Engine;
137 typedef struct _Ecore_Evas_Engine_Func Ecore_Evas_Engine_Func;
138
139 struct _Ecore_Evas_Engine_Func
140 {
141    void        (*fn_free) (Ecore_Evas *ee);
142    void        (*fn_callback_resize_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
143    void        (*fn_callback_move_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
144    void        (*fn_callback_show_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
145    void        (*fn_callback_hide_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
146    void        (*fn_callback_delete_request_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
147    void        (*fn_callback_destroy_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
148    void        (*fn_callback_focus_in_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
149    void        (*fn_callback_focus_out_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
150    void        (*fn_callback_mouse_in_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
151    void        (*fn_callback_mouse_out_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
152    void        (*fn_callback_sticky_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
153    void        (*fn_callback_unsticky_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
154    void        (*fn_callback_pre_render_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
155    void        (*fn_callback_post_render_set) (Ecore_Evas *ee, void (*func) (Ecore_Evas *ee));
156    void        (*fn_move) (Ecore_Evas *ee, int x, int y);
157    void        (*fn_managed_move) (Ecore_Evas *ee, int x, int y);
158    void        (*fn_resize) (Ecore_Evas *ee, int w, int h);
159    void        (*fn_move_resize) (Ecore_Evas *ee, int x, int y, int w, int h);
160    void        (*fn_rotation_set) (Ecore_Evas *ee, int rot, int resize);
161    void        (*fn_shaped_set) (Ecore_Evas *ee, int shaped);
162    void        (*fn_show) (Ecore_Evas *ee);
163    void        (*fn_hide) (Ecore_Evas *ee);
164    void        (*fn_raise) (Ecore_Evas *ee);
165    void        (*fn_lower) (Ecore_Evas *ee);
166    void        (*fn_activate) (Ecore_Evas *ee);
167    void        (*fn_title_set) (Ecore_Evas *ee, const char *t);
168    void        (*fn_name_class_set) (Ecore_Evas *ee, const char *n, const char *c);
169    void        (*fn_size_min_set) (Ecore_Evas *ee, int w, int h);
170    void        (*fn_size_max_set) (Ecore_Evas *ee, int w, int h);
171    void        (*fn_size_base_set) (Ecore_Evas *ee, int w, int h);
172    void        (*fn_size_step_set) (Ecore_Evas *ee, int w, int h);
173    void        (*fn_object_cursor_set) (Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y);
174    void        (*fn_layer_set) (Ecore_Evas *ee, int layer);
175    void        (*fn_focus_set) (Ecore_Evas *ee, int on);
176    void        (*fn_iconified_set) (Ecore_Evas *ee, int on);
177    void        (*fn_borderless_set) (Ecore_Evas *ee, int on);
178    void        (*fn_override_set) (Ecore_Evas *ee, int on);
179    void        (*fn_maximized_set) (Ecore_Evas *ee, int on);
180    void        (*fn_fullscreen_set) (Ecore_Evas *ee, int on);
181    void        (*fn_avoid_damage_set) (Ecore_Evas *ee, int on);
182    void        (*fn_withdrawn_set) (Ecore_Evas *ee, int withdrawn);
183    void        (*fn_sticky_set) (Ecore_Evas *ee, int sticky);
184    void        (*fn_ignore_events_set) (Ecore_Evas *ee, int ignore);
185    void        (*fn_alpha_set) (Ecore_Evas *ee, int alpha);
186    void        (*fn_transparent_set) (Ecore_Evas *ee, int transparent);
187
188    int         (*fn_render) (Ecore_Evas *ee);
189 };
190
191 struct _Ecore_Evas_Engine
192 {
193    Ecore_Evas_Engine_Func *func;
194
195 #ifdef BUILD_ECORE_EVAS_X11
196    struct {
197       Ecore_X_Window win_root;
198       Eina_List     *win_extra;
199       Ecore_X_Pixmap pmap;
200       Ecore_X_Pixmap mask;
201       Ecore_X_GC     gc;
202       Ecore_X_XRegion *damages;
203       Ecore_X_Sync_Counter sync_counter;
204       Ecore_X_Window leader;
205       int            sync_val; // bigger! this will screw up at 2 billion frames (414 days of continual rendering @ 60fps)
206       int            screen_num;
207       int            px, py, pw, ph;
208       unsigned char  direct_resize : 1;
209       unsigned char  using_bg_pixmap : 1;
210       unsigned char  managed : 1;
211       unsigned char  sync_began : 1;
212       unsigned char  sync_cancel : 1;
213       struct {
214            unsigned char modal : 1;
215            unsigned char sticky : 1;
216            unsigned char maximized_v : 1;
217            unsigned char maximized_h : 1;
218            unsigned char shaded : 1;
219            unsigned char skip_taskbar : 1;
220            unsigned char skip_pager : 1;
221            unsigned char fullscreen : 1;
222            unsigned char above : 1;
223            unsigned char below : 1;
224       } state;
225    } x;
226 #endif
227 #ifdef BUILD_ECORE_EVAS_FB
228    struct {
229       int real_w;
230       int real_h;
231    } fb;
232 #endif
233 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
234    struct {
235       void *pixels;
236       Evas_Object *image;
237       void  (*free_func) (void *data, void *pix);
238       void *(*alloc_func) (void *data, int size);
239       void *data;
240    } buffer;
241 #endif
242 #ifdef BUILD_ECORE_EVAS_DIRECTFB
243    struct {
244       Ecore_DirectFB_Window *window;
245    } directfb;
246 #endif
247 #ifdef BUILD_ECORE_EVAS_WIN32
248    struct {
249       Ecore_Win32_Window *parent;
250       struct {
251          unsigned char region     : 1;
252          unsigned char fullscreen : 1;
253       } state;
254    } win32;
255 #endif
256 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
257    struct {
258       Ecore_WinCE_Window *window;
259       struct {
260          unsigned char fullscreen : 1;
261       } state;
262    } wince;
263 #endif
264
265    Ecore_Timer *idle_flush_timer;
266 };
267
268 struct _Ecore_Evas
269 {
270    EINA_INLIST;
271    ECORE_MAGIC;
272    Evas       *evas;
273    const char *driver;
274    char       *name;
275    int         x, y, w, h;
276    short       rotation;
277    Eina_Bool   shaped  : 1;
278    Eina_Bool   visible : 1;
279    Eina_Bool   draw_ok : 1;
280    Eina_Bool   should_be_visible : 1;
281    Eina_Bool   alpha  : 1;
282    Eina_Bool   transparent  : 1;
283
284    Eina_Hash  *data;
285
286    struct {
287       int      x, y, w, h;
288    } req;
289    
290    struct {
291       int      x, y;
292    } mouse;
293
294    struct {
295       int      w, h;
296    } expecting_resize;
297
298    struct {
299       char           *title;
300       char           *name;
301       char           *clas;
302       struct {
303          int          w, h;
304       } min,
305         max,
306         base,
307         step;
308       struct {
309          Evas_Object *object;
310          int          layer;
311          struct {
312             int       x, y;
313          } hot;
314       } cursor;
315       int             layer;
316       Ecore_Window    window;
317       unsigned char   avoid_damage;
318       char            focused      : 1;
319       char            iconified    : 1;
320       char            borderless   : 1;
321       char            override     : 1;
322       char            maximized    : 1;
323       char            fullscreen   : 1;
324       char            withdrawn    : 1;
325       char            sticky       : 1;
326       char            request_pos  : 1;
327    } prop;
328
329    struct {
330       void          (*fn_resize) (Ecore_Evas *ee);
331       void          (*fn_move) (Ecore_Evas *ee);
332       void          (*fn_show) (Ecore_Evas *ee);
333       void          (*fn_hide) (Ecore_Evas *ee);
334       void          (*fn_delete_request) (Ecore_Evas *ee);
335       void          (*fn_destroy) (Ecore_Evas *ee);
336       void          (*fn_focus_in) (Ecore_Evas *ee);
337       void          (*fn_focus_out) (Ecore_Evas *ee);
338       void          (*fn_sticky) (Ecore_Evas *ee);
339       void          (*fn_unsticky) (Ecore_Evas *ee);
340       void          (*fn_mouse_in) (Ecore_Evas *ee);
341       void          (*fn_mouse_out) (Ecore_Evas *ee);
342       void          (*fn_pre_render) (Ecore_Evas *ee);
343       void          (*fn_post_render) (Ecore_Evas *ee);
344       void          (*fn_pre_free) (Ecore_Evas *ee);
345    } func;
346
347    Ecore_Evas_Engine engine;
348    Eina_List *sub_ecore_evas;
349
350    unsigned char ignore_events : 1;
351    unsigned char manual_render : 1;
352    unsigned char registered : 1;
353    unsigned char no_comp_sync  : 1;
354 };
355
356 #ifdef BUILD_ECORE_EVAS_X11
357 int _ecore_evas_x_shutdown(void);
358 #endif
359 #ifdef BUILD_ECORE_EVAS_FB
360 int _ecore_evas_fb_shutdown(void);
361 #endif
362 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
363 int _ecore_evas_buffer_shutdown(void);
364 int _ecore_evas_buffer_render(Ecore_Evas *ee);
365 #endif
366 #ifdef BUILD_ECORE_EVAS_DIRECTFB
367 int _ecore_evas_directfb_shutdown(void);
368 #endif
369 #ifdef BUILD_ECORE_EVAS_WIN32
370 int _ecore_evas_win32_shutdown(void);
371 #endif
372 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
373 int _ecore_evas_wince_shutdown(void);
374 #endif
375
376 void _ecore_evas_fps_debug_init(void);
377 void _ecore_evas_fps_debug_shutdown(void);
378 void _ecore_evas_fps_debug_rendertime_add(double t);
379 void _ecore_evas_register(Ecore_Evas *ee);
380 void _ecore_evas_free(Ecore_Evas *ee);
381 void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
382 void _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp);
383 void _ecore_evas_mouse_multi_move_process(Ecore_Evas *ee, int device,
384                                           int x, int y,
385                                           double radius,
386                                           double radius_x, double radius_y,
387                                           double pressure,
388                                           double angle,
389                                           double mx, double my,
390                                           unsigned int timestamp);
391 void _ecore_evas_mouse_multi_down_process(Ecore_Evas *ee, int device,
392                                           int x, int y,
393                                           double radius,
394                                           double radius_x, double radius_y,
395                                           double pressure,
396                                           double angle,
397                                           double mx, double my,
398                                           Evas_Button_Flags flags,
399                                           unsigned int timestamp);
400 void _ecore_evas_mouse_multi_up_process(Ecore_Evas *ee, int device,
401                                         int x, int y,
402                                         double radius,
403                                         double radius_x, double radius_y,
404                                         double pressure,
405                                         double angle,
406                                         double mx, double my,
407                                         Evas_Button_Flags flags,
408                                         unsigned int timestamp);
409
410 extern Eina_Bool _ecore_evas_app_comp_sync;
411
412 #endif