[ecore] merged svn latest code (svn54830)
[profile/ivi/ecore.git] / src / lib / ecore_evas / ecore_evas_win32.c
1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4
5 #include <stdlib.h> /* for NULL */
6
7 #include <Ecore.h>
8 #include "ecore_private.h"
9 #ifdef BUILD_ECORE_EVAS_WIN32
10 # define WIN32_LEAN_AND_MEAN
11 # include <windows.h>
12 # undef WIN32_LEAN_AND_MEAN
13 # include <Ecore_Win32.h>
14 # include <ecore_win32_private.h>
15 #endif /* BUILD_ECORE_EVAS_WIN32 */
16
17 #include "ecore_evas_private.h"
18 #include "Ecore_Evas.h"
19
20 #ifdef BUILD_ECORE_EVAS_WIN32
21
22 #define ECORE_EVAS_EVENT_COUNT 8
23
24 static int _ecore_evas_init_count = 0;
25
26 static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
27
28 static Eina_Bool _ecore_evas_win32_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event);
29
30 static Eina_Bool _ecore_evas_win32_event_mouse_out(void *data __UNUSED__, int type __UNUSED__, void *event);
31
32 static Eina_Bool _ecore_evas_win32_event_window_damage(void *data __UNUSED__, int type __UNUSED__, void *event);
33
34 static Eina_Bool _ecore_evas_win32_event_window_destroy(void *data __UNUSED__, int type __UNUSED__, void *event);
35
36 static Eina_Bool _ecore_evas_win32_event_window_show(void *data __UNUSED__, int type __UNUSED__, void *event);
37
38 static Eina_Bool _ecore_evas_win32_event_window_hide(void *data __UNUSED__, int type __UNUSED__, void *event);
39
40 static Eina_Bool _ecore_evas_win32_event_window_configure(void *data __UNUSED__, int type __UNUSED__, void *event);
41
42 static Eina_Bool _ecore_evas_win32_event_window_delete_request(void *data __UNUSED__, int type __UNUSED__, void *event);
43
44 /* Private functions */
45
46 static int
47 _ecore_evas_win32_render(Ecore_Evas *ee)
48 {
49    int rend = 0;
50    Eina_List *updates = NULL;
51 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
52    Eina_List *ll;
53    Ecore_Evas *ee2;
54
55    EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
56      {
57         if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
58         rend |= _ecore_evas_buffer_render(ee2);
59         if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
60      }
61 #endif
62    if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
63    if (ee->prop.avoid_damage)
64      {
65         updates = evas_render_updates(ee->evas);
66         if (updates) evas_render_updates_free(updates);
67      }
68    else if ((ee->visible) ||
69             ((ee->should_be_visible) && (ee->prop.fullscreen)) ||
70             ((ee->should_be_visible) && (ee->prop.override)))
71      {
72         if (ee->shaped)
73           {
74              updates = evas_render_updates(ee->evas);
75              if (updates) evas_render_updates_free(updates);
76           }
77         else
78           {
79              updates = evas_render_updates(ee->evas);
80              if (updates) evas_render_updates_free(updates);
81           }
82      }
83    else
84      evas_norender(ee->evas);
85    if (updates) rend = 1;
86    if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
87    return rend;
88 }
89
90 static int
91 _ecore_evas_win32_init(void)
92 {
93    _ecore_evas_init_count++;
94    if (_ecore_evas_init_count > 1)
95      return _ecore_evas_init_count;
96    
97    ecore_evas_event_handlers[0]  = ecore_event_handler_add(ECORE_WIN32_EVENT_MOUSE_IN, _ecore_evas_win32_event_mouse_in, NULL);
98    ecore_evas_event_handlers[1]  = ecore_event_handler_add(ECORE_WIN32_EVENT_MOUSE_OUT, _ecore_evas_win32_event_mouse_out, NULL);
99    ecore_evas_event_handlers[2]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_DAMAGE, _ecore_evas_win32_event_window_damage, NULL);
100    ecore_evas_event_handlers[3]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_DESTROY, _ecore_evas_win32_event_window_destroy, NULL);
101    ecore_evas_event_handlers[4]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_SHOW, _ecore_evas_win32_event_window_show, NULL);
102    ecore_evas_event_handlers[5]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_HIDE, _ecore_evas_win32_event_window_hide, NULL);
103    ecore_evas_event_handlers[6]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_CONFIGURE, _ecore_evas_win32_event_window_configure, NULL);
104    ecore_evas_event_handlers[7]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, _ecore_evas_win32_event_window_delete_request, NULL);
105
106    ecore_event_evas_init();
107    return _ecore_evas_init_count;
108 }
109
110 int
111 _ecore_evas_win32_shutdown(void)
112 {
113    _ecore_evas_init_count--;
114    if (_ecore_evas_init_count == 0)
115      {
116         int i;
117
118         for (i = 0; i < ECORE_EVAS_EVENT_COUNT; i++)
119           ecore_event_handler_del(ecore_evas_event_handlers[i]);
120         ecore_event_evas_shutdown();
121      }
122
123    if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
124
125    return _ecore_evas_init_count;
126 }
127
128 static Eina_Bool
129 _ecore_evas_win32_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event)
130 {
131    Ecore_Evas                 *ee;
132    Ecore_Win32_Event_Mouse_In *e;
133
134    INF("mouse in");
135
136    e = event;
137    ee = ecore_event_window_match((Ecore_Window)e->window);
138    if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */
139    if ((Ecore_Window)e->window != ee->prop.window) return 1;
140
141    if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee);
142    /* FIXME to do */
143 /*    _ecore_evas_x_modifier_locks_update(ee, e->modifiers); */
144    evas_event_feed_mouse_in(ee->evas, e->time, NULL);
145    evas_focus_in(ee->evas);
146    _ecore_evas_mouse_move_process(ee, e->x, e->y, e->time);
147
148    return 1;
149 }
150
151 static Eina_Bool
152 _ecore_evas_win32_event_mouse_out(void *data __UNUSED__, int type __UNUSED__, void *event)
153 {
154    Ecore_Evas                  *ee;
155    Ecore_Win32_Event_Mouse_Out *e;
156
157    INF("mouse out");
158
159    e = event;
160    ee = ecore_event_window_match((Ecore_Window)e->window);
161    if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */
162    if ((Ecore_Window)e->window != ee->prop.window) return 1;
163
164    /* FIXME to do */
165 /*    _ecore_evas_x_modifier_locks_update(ee, e->modifiers); */
166    _ecore_evas_mouse_move_process(ee, e->x, e->y, e->time);
167
168    evas_event_feed_mouse_out(ee->evas, e->time, NULL);
169    if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee);
170    if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object);
171
172    return 1;
173 }
174
175 static Eina_Bool
176 _ecore_evas_win32_event_window_damage(void *data __UNUSED__, int type __UNUSED__, void *event)
177 {
178    Ecore_Evas                      *ee;
179    Ecore_Win32_Event_Window_Damage *e;
180
181    INF("window damage");
182
183    e = event;
184    ee = ecore_event_window_match((Ecore_Window)e->window);
185    if (!ee) return 1; /* pass on event */
186    if ((Ecore_Window)e->window != ee->prop.window) return 1;
187
188    if (ee->prop.avoid_damage)
189      {
190 #ifdef _MSC_VER
191 # pragma message ("[ECORE] [WIN32] No Region code")
192 #else
193 # warning [ECORE] [WIN32] No Region code
194 #endif /* ! _MSC_VER */
195      }
196    else
197      {
198         if (ee->rotation == 0)
199           evas_damage_rectangle_add(ee->evas,
200                                     e->x,
201                                     e->y,
202                                     e->width,
203                                     e->height);
204         else if (ee->rotation == 90)
205           evas_damage_rectangle_add(ee->evas,
206                                     ee->h - e->y - e->height,
207                                     e->x,
208                                     e->height,
209                                     e->width);
210         else if (ee->rotation == 180)
211           evas_damage_rectangle_add(ee->evas,
212                                     ee->w - e->x - e->width,
213                                     ee->h - e->y - e->height,
214                                     e->width,
215                                     e->height);
216         else if (ee->rotation == 270)
217           evas_damage_rectangle_add(ee->evas,
218                                     e->y,
219                                     ee->w - e->x - e->width,
220                                     e->height,
221                                     e->width);
222      }
223
224    return 1;
225 }
226
227 static Eina_Bool
228 _ecore_evas_win32_event_window_destroy(void *data __UNUSED__, int type __UNUSED__, void *event)
229 {
230    Ecore_Evas                       *ee;
231    Ecore_Win32_Event_Window_Destroy *e;
232
233    INF("window destroy");
234
235    e = event;
236    ee = ecore_event_window_match((Ecore_Window)e->window);
237    if (!ee) return 1; /* pass on event */
238    if ((Ecore_Window)e->window != ee->prop.window) return 1;
239    if (ee->func.fn_destroy) ee->func.fn_destroy(ee);
240    ecore_evas_free(ee);
241
242    return 1;
243 }
244
245 static Eina_Bool
246 _ecore_evas_win32_event_window_show(void *data __UNUSED__, int type __UNUSED__, void *event)
247 {
248    Ecore_Evas                    *ee;
249    Ecore_Win32_Event_Window_Show *e;
250
251    INF("window show");
252
253    e = event;
254    ee = ecore_event_window_match((Ecore_Window)e->window);
255    if (!ee) return 1; /* pass on event */
256    if ((Ecore_Window)e->window != ee->prop.window) return 1;
257    if (ee->visible) return 0; /* dont pass it on */
258    ee->visible = 1;
259    if (ee->func.fn_show) ee->func.fn_show(ee);
260
261    return 1;
262 }
263
264 static Eina_Bool
265 _ecore_evas_win32_event_window_hide(void *data __UNUSED__, int type __UNUSED__, void *event)
266 {
267    Ecore_Evas                    *ee;
268    Ecore_Win32_Event_Window_Hide *e;
269
270    INF("window hide");
271
272    e = event;
273    ee = ecore_event_window_match((Ecore_Window)e->window);
274    if (!ee) return 1; /* pass on event */
275    if ((Ecore_Window)e->window != ee->prop.window) return 1;
276    if (!ee->visible) return 0; /* dont pass it on */
277    ee->visible = 0;
278    if (ee->func.fn_hide) ee->func.fn_hide(ee);
279
280    return 1;
281 }
282
283 static Eina_Bool
284 _ecore_evas_win32_event_window_configure(void *data __UNUSED__, int type __UNUSED__, void *event)
285 {
286    Ecore_Evas                         *ee;
287    Ecore_Win32_Event_Window_Configure *e;
288
289    INF("window configure");
290
291    e = event;
292    ee = ecore_event_window_match((Ecore_Window)e->window);
293    if (!ee) return 1; /* pass on event */
294    if ((Ecore_Window)e->window != ee->prop.window) return 1;
295
296    if ((ee->x != e->x) || (ee->y != e->y))
297      {
298         ee->x = e->x;
299         ee->y = e->y;
300         if (ee->func.fn_move) ee->func.fn_move(ee);
301      }
302
303    if ((ee->w != e->width) || (ee->h != e->height))
304      {
305         ee->w = e->width;
306         ee->h = e->height;
307         if ((ee->rotation == 90) || (ee->rotation == 270))
308           {
309              evas_output_size_set(ee->evas, ee->h, ee->w);
310              evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
311           }
312         else
313           {
314              evas_output_size_set(ee->evas, ee->w, ee->h);
315              evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
316           }
317         if (ee->prop.avoid_damage)
318           {
319              ecore_evas_avoid_damage_set(ee, 0);
320              ecore_evas_avoid_damage_set(ee, 1);
321           }
322 /*         if (ee->shaped) */
323 /*           _ecore_evas_win32_region_border_resize(ee); */
324         if ((ee->expecting_resize.w > 0) &&
325             (ee->expecting_resize.h > 0))
326           {
327              if ((ee->expecting_resize.w == ee->w) &&
328                  (ee->expecting_resize.h == ee->h))
329                _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
330                                               ecore_win32_current_time_get());
331              ee->expecting_resize.w = 0;
332              ee->expecting_resize.h = 0;
333           }
334         if (ee->func.fn_resize) ee->func.fn_resize(ee);
335      }
336
337    return 1;
338 }
339
340 static Eina_Bool
341 _ecore_evas_win32_event_window_delete_request(void *data __UNUSED__, int type __UNUSED__, void *event)
342 {
343    Ecore_Evas                              *ee;
344    Ecore_Win32_Event_Window_Delete_Request *e;
345
346    INF("window delete request");
347
348    e = event;
349    ee = ecore_event_window_match((Ecore_Window)e->window);
350    if (!ee) return 1; /* pass on event */
351    if ((Ecore_Window)e->window != ee->prop.window) return 1;
352    if (ee->func.fn_delete_request) ee->func.fn_delete_request(ee);
353
354    INF(" * ee event delete\n");
355    return 1;
356 }
357
358
359 /* Ecore_Evas interface */
360
361 static void
362 _ecore_evas_win32_free(Ecore_Evas *ee)
363 {
364    INF("ecore evas free");
365
366    ecore_win32_window_free((struct _Ecore_Win32_Window *)ee->prop.window);
367    ecore_event_window_unregister(ee->prop.window);
368    _ecore_evas_win32_shutdown();
369    ecore_win32_shutdown();
370 }
371
372 static void
373 _ecore_evas_win32_callback_delete_request_set(Ecore_Evas *ee,
374                                               void (*func) (Ecore_Evas *ee))
375 {
376    ee->func.fn_delete_request = func;
377 }
378
379 static void
380 _ecore_evas_win32_move(Ecore_Evas *ee, int x, int y)
381 {
382   INF("ecore evas move (%dx%d)", x, y);
383
384    if ((x != ee->x) || (y != ee->y))
385      {
386         ee->x = x;
387         ee->y = y;
388         ecore_win32_window_move((struct _Ecore_Win32_Window *)ee->prop.window,
389                                 x, y);
390         if (ee->func.fn_move) ee->func.fn_move(ee);
391      }
392 }
393
394 static void
395 _ecore_evas_win32_resize(Ecore_Evas *ee, int width, int height)
396 {
397    INF("ecore evas resize (%dx%d)", width, height);
398
399    if ((ee->w != width) || (ee->h != height))
400      {
401         ee->w = width;
402         ee->h = height;
403         ecore_win32_window_resize((struct _Ecore_Win32_Window *)ee->prop.window,
404                                   width, height);
405         if ((ee->rotation == 90) || (ee->rotation == 270))
406           {
407              evas_output_size_set(ee->evas, ee->h, ee->w);
408              evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
409           }
410         else
411           {
412              evas_output_size_set(ee->evas, ee->w, ee->h);
413              evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
414           }
415         if (ee->prop.avoid_damage)
416           {
417              int pdam;
418
419              pdam = ecore_evas_avoid_damage_get(ee);
420              ecore_evas_avoid_damage_set(ee, 0);
421              ecore_evas_avoid_damage_set(ee, pdam);
422           }
423 /*         if ((ee->shaped) || (ee->alpha)) */
424 /*           _ecore_evas_win32_region_border_resize(ee); */
425         if (ee->func.fn_resize) ee->func.fn_resize(ee);
426      }
427 }
428
429 static void
430 _ecore_evas_win32_move_resize(Ecore_Evas *ee, int x, int y, int width, int height)
431 {
432    INF("ecore evas resize (%dx%d %dx%d)", x, y, width, height);
433
434    if ((ee->w != width) || (ee->h != height) || (x != ee->x) || (y != ee->y))
435      {
436         int change_size = 0;
437         int change_pos = 0;
438
439         if ((ee->w != width) || (ee->h != height)) change_size = 1;
440         if ((x != ee->x) || (y != ee->y)) change_pos = 1;
441
442         ee->x = x;
443         ee->y = y;
444         ee->w = width;
445         ee->h = height;
446         ecore_win32_window_move_resize((struct _Ecore_Win32_Window *)ee->prop.window,
447                                        x, y, width, height);
448         if ((ee->rotation == 90) || (ee->rotation == 270))
449           {
450              evas_output_size_set(ee->evas, ee->h, ee->w);
451              evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
452           }
453         else
454           {
455              evas_output_size_set(ee->evas, ee->w, ee->h);
456              evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
457           }
458         if (ee->prop.avoid_damage)
459           {
460              int pdam;
461
462              pdam = ecore_evas_avoid_damage_get(ee);
463              ecore_evas_avoid_damage_set(ee, 0);
464              ecore_evas_avoid_damage_set(ee, pdam);
465           }
466 /*         if ((ee->shaped) || (ee->alpha)) */
467 /*           _ecore_evas_win32_region_border_resize(ee); */
468         if (change_pos)
469           {
470              if (ee->func.fn_move) ee->func.fn_move(ee);
471           }
472         if (change_size)
473           {
474              if (ee->func.fn_resize) ee->func.fn_resize(ee);
475           }
476      }
477 }
478
479 static void
480 _ecore_evas_win32_rotation_set_internal(Ecore_Evas *ee, int rotation)
481 {
482    int rot_dif;
483
484    rot_dif = ee->rotation - rotation;
485    if (rot_dif < 0) rot_dif = -rot_dif;
486
487    if (rot_dif != 180)
488      {
489         int minw, minh, maxw, maxh, basew, baseh, stepw, steph;
490
491         if (!ee->prop.fullscreen)
492           {
493              ecore_win32_window_resize((struct _Ecore_Win32_Window *)ee->prop.window,
494                                        ee->h, ee->w);
495              ee->expecting_resize.w = ee->h;
496              ee->expecting_resize.h = ee->w;
497           }
498         else
499           {
500              int w, h;
501
502              ecore_win32_window_size_get((struct _Ecore_Win32_Window *)ee->prop.window,
503                                          &w, &h);
504              ecore_win32_window_resize((struct _Ecore_Win32_Window *)ee->prop.window,
505                                        h, w);
506              if ((rotation == 0) || (rotation == 180))
507                {
508                   evas_output_size_set(ee->evas, ee->w, ee->h);
509                   evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
510                }
511              else
512                {
513                   evas_output_size_set(ee->evas, ee->h, ee->w);
514                   evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
515                }
516              if (ee->func.fn_resize) ee->func.fn_resize(ee);
517           }
518         ecore_evas_size_min_get(ee, &minw, &minh);
519         ecore_evas_size_max_get(ee, &maxw, &maxh);
520         ecore_evas_size_base_get(ee, &basew, &baseh);
521         ecore_evas_size_step_get(ee, &stepw, &steph);
522         ee->rotation = rotation;
523         ecore_evas_size_min_set(ee, minh, minw);
524         ecore_evas_size_max_set(ee, maxh, maxw);
525         ecore_evas_size_base_set(ee, baseh, basew);
526         ecore_evas_size_step_set(ee, steph, stepw);
527         _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
528                                        ecore_win32_current_time_get());
529      }
530    else
531      {
532         ee->rotation = rotation;
533         _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
534                                        ecore_win32_current_time_get());
535         if (ee->func.fn_resize) ee->func.fn_resize(ee);
536      }
537
538    if ((ee->rotation == 90) || (ee->rotation == 270))
539      evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
540    else
541      evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
542 }
543
544 static void
545 _ecore_evas_win32_rotation_set(Ecore_Evas *ee, int rotation, int resize)
546 {
547    INF("ecore evas rotation: %s", rotation ? "yes" : "no");
548
549    if (ee->rotation == rotation) return;
550
551 #ifdef BUILD_ECORE_EVAS_SOFTWARE_GDI
552    if (!strcmp(ee->driver, "software_gdi"))
553      {
554         Evas_Engine_Info_Software_Gdi *einfo;
555
556         einfo = (Evas_Engine_Info_Software_Gdi *)evas_engine_info_get(ee->evas);
557         if (!einfo) return;
558         einfo->info.rotation = rotation;
559         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
560           {
561              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
562           }
563         _ecore_evas_win32_rotation_set_internal(ee, rotation);
564      }
565 #endif /* BUILD_ECORE_EVAS_SOFTWARE_GDI */
566
567 #ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW
568    if (!strcmp(ee->driver, "software_ddraw"))
569      {
570         Evas_Engine_Info_Software_DDraw *einfo;
571
572         einfo = (Evas_Engine_Info_Software_DDraw *)evas_engine_info_get(ee->evas);
573         if (!einfo) return;
574         einfo->info.rotation = rotation;
575         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
576           {
577              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
578           }
579         _ecore_evas_win32_rotation_set_internal(ee, rotation);
580      }
581 #endif /* BUILD_ECORE_EVAS_SOFTWARE_DDRAW */
582 }
583
584 static void
585 _ecore_evas_win32_shaped_set(Ecore_Evas *ee, int shaped)
586 {
587    if (((ee->shaped) && (shaped)) || ((!ee->shaped) && (!shaped)))
588      return;
589
590    if (!strcmp(ee->driver, "software_ddraw")) return;
591
592 #ifdef BUILD_ECORE_EVAS_SOFTWARE_GDI
593    if (!strcmp(ee->driver, "software_gdi"))
594      {
595         Evas_Engine_Info_Software_Gdi *einfo;
596
597         einfo = (Evas_Engine_Info_Software_Gdi *)evas_engine_info_get(ee->evas);
598         ee->shaped = shaped;
599         if (einfo)
600           {
601              ee->engine.win32.state.region = ee->shaped;
602              einfo->info.region = ee->engine.win32.state.region;
603              if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
604                {
605                   ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
606                }
607              if (ee->shaped)
608                evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
609           }
610 #endif /* BUILD_ECORE_EVAS_SOFTWARE_GDI */
611      }
612 }
613
614 static void
615 _ecore_evas_win32_show(Ecore_Evas *ee)
616 {
617    INF("ecore evas show");
618
619    ee->should_be_visible = 1;
620    if (ee->prop.avoid_damage)
621      _ecore_evas_win32_render(ee);
622    ecore_win32_window_show((struct _Ecore_Win32_Window *)ee->prop.window);
623 /*    if (ee->prop.fullscreen) */
624 /*      ecore_win32_window_focus(ee->prop.window); */
625 }
626
627 static void
628 _ecore_evas_win32_hide(Ecore_Evas *ee)
629 {
630    INF("ecore evas hide");
631
632    ecore_win32_window_hide((struct _Ecore_Win32_Window *)ee->prop.window);
633    ee->should_be_visible = 0;
634 }
635
636 static void
637 _ecore_evas_win32_raise(Ecore_Evas *ee)
638 {
639    INF("ecore evas raise");
640
641    if (!ee->prop.fullscreen)
642      ecore_win32_window_raise((struct _Ecore_Win32_Window *)ee->prop.window);
643    else
644      ecore_win32_window_raise((struct _Ecore_Win32_Window *)ee->prop.window);
645 }
646
647 static void
648 _ecore_evas_win32_lower(Ecore_Evas *ee)
649 {
650    INF("ecore evas lower");
651
652    if (!ee->prop.fullscreen)
653      ecore_win32_window_lower((struct _Ecore_Win32_Window *)ee->prop.window);
654    else
655      ecore_win32_window_lower((struct _Ecore_Win32_Window *)ee->prop.window);
656 }
657
658 static void
659 _ecore_evas_win32_activate(Ecore_Evas *ee)
660 {
661    INF("ecore evas activate");
662
663    ecore_win32_window_focus_set((struct _Ecore_Win32_Window *)ee->prop.window);
664 }
665
666 static void
667 _ecore_evas_win32_title_set(Ecore_Evas *ee, const char *title)
668 {
669    INF("ecore evas title set");
670
671    if (ee->prop.title) free(ee->prop.title);
672    ee->prop.title = NULL;
673    if (title) ee->prop.title = strdup(title);
674    ecore_win32_window_title_set((struct _Ecore_Win32_Window *)ee->prop.window,
675                                 ee->prop.title);
676 }
677
678 static void
679 _ecore_evas_win32_size_min_set(Ecore_Evas *ee, int width, int height)
680 {
681    if (width < 0) width = 0;
682    if (height < 0) height = 0;
683    if ((ee->prop.min.w == width) && (ee->prop.min.h == height)) return;
684    ee->prop.min.w = width;
685    ee->prop.min.h = height;
686    ecore_win32_window_size_min_set((struct _Ecore_Win32_Window *)ee->prop.window,
687                                    width, height);
688 }
689
690 static void
691 _ecore_evas_win32_size_max_set(Ecore_Evas *ee, int width, int height)
692 {
693    if (width < 0) width = 0;
694    if (height < 0) height = 0;
695    if ((ee->prop.max.w == width) && (ee->prop.max.h == height)) return;
696    ee->prop.max.w = width;
697    ee->prop.max.h = height;
698    ecore_win32_window_size_max_set((struct _Ecore_Win32_Window *)ee->prop.window,
699                                    width, height);
700 }
701
702 static void
703 _ecore_evas_win32_size_base_set(Ecore_Evas *ee, int width, int height)
704 {
705    if (width < 0) width = 0;
706    if (height < 0) height = 0;
707    if ((ee->prop.base.w == width) && (ee->prop.base.h == height)) return;
708    ee->prop.base.w = width;
709    ee->prop.base.h = height;
710    ecore_win32_window_size_base_set((struct _Ecore_Win32_Window *)ee->prop.window,
711                                     width, height);
712 }
713
714 static void
715 _ecore_evas_win32_size_step_set(Ecore_Evas *ee, int width, int height)
716 {
717    if (width < 1) width = 1;
718    if (height < 1) height = 1;
719    if ((ee->prop.step.w == width) && (ee->prop.step.h == height)) return;
720    ee->prop.step.w = width;
721    ee->prop.step.h = height;
722    ecore_win32_window_size_step_set((struct _Ecore_Win32_Window *)ee->prop.window,
723                                     width, height);
724 }
725
726 static void
727 _ecore_evas_win32_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
728 {
729 #if 0
730    int x, y;
731
732    if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
733
734    if (obj == NULL)
735      {
736         ee->prop.cursor.object = NULL;
737         ee->prop.cursor.layer = 0;
738         ee->prop.cursor.hot.x = 0;
739         ee->prop.cursor.hot.y = 0;
740         ecore_win32_window_cursor_show(ee->prop.window, 1);
741         return;
742      }
743
744    ee->prop.cursor.object = obj;
745    ee->prop.cursor.layer = layer;
746    ee->prop.cursor.hot.x = hot_x;
747    ee->prop.cursor.hot.y = hot_y;
748
749    ecore_win32_window_cursor_show(ee->prop.window, 0);
750
751    evas_pointer_output_xy_get(ee->evas, &x, &y);
752    evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
753    evas_object_move(ee->prop.cursor.object,
754                     x - ee->prop.cursor.hot.x,
755                     y - ee->prop.cursor.hot.y);
756    evas_object_pass_events_set(ee->prop.cursor.object, 1);
757    if (evas_pointer_inside_get(ee->evas))
758      evas_object_show(ee->prop.cursor.object);
759 #endif
760 }
761
762 static void
763 _ecore_evas_win32_focus_set(Ecore_Evas *ee, int on __UNUSED__)
764 {
765    ecore_win32_window_focus_set((struct _Ecore_Win32_Window *)ee->prop.window);
766 }
767
768 static void
769 _ecore_evas_win32_iconified_set(Ecore_Evas *ee, int on)
770 {
771 /*    if (((ee->prop.borderless) && (on)) || */
772 /*        ((!ee->prop.borderless) && (!on))) return; */
773    ee->prop.iconified = on;
774    ecore_win32_window_iconified_set((struct _Ecore_Win32_Window *)ee->prop.window,
775                                     ee->prop.iconified);
776 }
777
778 static void
779 _ecore_evas_win32_borderless_set(Ecore_Evas *ee, int on)
780 {
781    if (((ee->prop.borderless) && (on)) ||
782        ((!ee->prop.borderless) && (!on))) return;
783    ee->prop.borderless = on;
784    ecore_win32_window_borderless_set((struct _Ecore_Win32_Window *)ee->prop.window,
785                                      ee->prop.borderless);
786
787 #ifdef BUILD_ECORE_EVAS_SOFTWARE_GDI
788    if (!strcmp(ee->driver, "software_gdi"))
789      {
790         Evas_Engine_Info_Software_Gdi *einfo;
791
792         einfo = (Evas_Engine_Info_Software_Gdi *)evas_engine_info_get(ee->evas);
793         if (einfo)
794           {
795             einfo->info.borderless = ee->prop.borderless;
796              if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
797                {
798                   ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
799                }
800              if (ee->prop.borderless)
801                evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
802           }
803      }
804 #endif /* BUILD_ECORE_EVAS_SOFTWARE_GDI */
805 }
806
807 static void
808 _ecore_evas_win32_fullscreen_set(Ecore_Evas *ee, int on)
809 {
810    struct _Ecore_Win32_Window *window;
811
812    INF("ecore evas fullscreen set");
813
814    if ((ee->engine.win32.state.fullscreen && on) ||
815       (!ee->engine.win32.state.fullscreen && !on))
816      return;
817
818    ee->engine.win32.state.fullscreen = on;
819    ee->prop.fullscreen = on;
820
821    window = (struct _Ecore_Win32_Window *)ee->prop.window;
822
823    if (on != 0)
824    {
825       ecore_win32_window_shape_set((struct _Ecore_Win32_Window *)ee->prop.window,
826                                    0, 0, NULL);
827       ecore_win32_window_fullscreen_set((struct _Ecore_Win32_Window *)ee->prop.window,
828                                         on);
829    }
830    else
831    {
832       ecore_win32_window_fullscreen_set(window, on);
833       ecore_win32_window_shape_set(window,
834                                    window->shape.width,
835                                    window->shape.height,
836                                    window->shape.mask);
837    }
838
839    /* Nothing to be done for the GDI backend at the evas level */
840
841 #ifdef BUILD_ECORE_EVAS_SOFTWRE_DDRAW
842    if (strcmp(ee->driver, "software_ddraw") == 0)
843      {
844         Evas_Engine_Info_Software_DDraw *einfo;
845
846         einfo = (Evas_Engine_Info_Software_DDraw *)evas_engine_info_get(ecore_evas_get(ee));
847         if (einfo)
848           {
849              einfo->info.fullscreen = !!on;
850 /*           einfo->info.layered = window->shape.layered; */
851              if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
852                {
853                   ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
854                }
855           }
856      }
857 #endif /* BUILD_ECORE_EVAS_SOFTWARE_DDRAW */
858
859 #ifdef BUILD_ECORE_EVAS_DIRECT3D
860    if (strcmp(ee->driver, "direct3d") == 0)
861      {
862         Evas_Engine_Info_Direct3D *einfo;
863
864         einfo = (Evas_Engine_Info_Direct3D *)evas_engine_info_get(ecore_evas_get(ee));
865         if (einfo)
866           {
867              einfo->info.fullscreen = !!on;
868              einfo->info.layered = window->shape.layered;
869              if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
870                {
871                   ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
872                }
873           }
874      }
875 #endif /* BUILD_ECORE_EVAS_DIRECT3D */
876 }
877
878
879 static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
880 {
881    _ecore_evas_win32_free,
882      NULL,
883      NULL,
884      NULL,
885      NULL,
886      _ecore_evas_win32_callback_delete_request_set,
887      NULL,
888      NULL,
889      NULL,
890      NULL,
891      NULL,
892      NULL,
893      NULL,
894      NULL,
895      NULL,
896      _ecore_evas_win32_move,
897      NULL,
898      _ecore_evas_win32_resize,
899      _ecore_evas_win32_move_resize,
900      _ecore_evas_win32_rotation_set,
901      _ecore_evas_win32_shaped_set,
902      _ecore_evas_win32_show,
903      _ecore_evas_win32_hide,
904      _ecore_evas_win32_raise,
905      _ecore_evas_win32_lower,
906      _ecore_evas_win32_activate,
907      _ecore_evas_win32_title_set,
908      NULL, /* _ecore_evas_x_name_class_set */
909      _ecore_evas_win32_size_min_set,
910      _ecore_evas_win32_size_max_set,
911      _ecore_evas_win32_size_base_set,
912      _ecore_evas_win32_size_step_set,
913      _ecore_evas_win32_cursor_set,
914      NULL, /* _ecore_evas_x_layer_set */
915      _ecore_evas_win32_focus_set,
916      _ecore_evas_win32_iconified_set,
917      _ecore_evas_win32_borderless_set,
918      NULL, /* _ecore_evas_x_override_set */
919      NULL,
920      _ecore_evas_win32_fullscreen_set,
921      NULL, /* _ecore_evas_x_avoid_damage_set */
922      NULL, /* _ecore_evas_x_withdrawn_set */
923      NULL, /* _ecore_evas_x_sticky_set */
924      NULL, /* _ecore_evas_x_ignore_events_set */
925      NULL,  /* _ecore_evas_x_alpha_set */
926      NULL, //transparent
927      
928      NULL // render
929 };
930
931 #endif /* BUILD_ECORE_EVAS_WIN32 */
932
933 /* API */
934
935 #ifdef BUILD_ECORE_EVAS_SOFTWARE_GDI
936 static int
937 _ecore_evas_engine_software_gdi_init(Ecore_Evas *ee)
938 {
939    Evas_Engine_Info_Software_Gdi *einfo;
940    const char                    *driver;
941    int                            rmethod;
942
943    driver = "software_gdi";
944
945    rmethod = evas_render_method_lookup(driver);
946    if (!rmethod)
947      return 0;
948
949    ee->driver = driver;
950    evas_output_method_set(ee->evas, rmethod);
951
952    einfo = (Evas_Engine_Info_Software_Gdi *)evas_engine_info_get(ee->evas);
953    if (einfo)
954      {
955         /* FIXME: REDRAW_DEBUG missing for now */
956         einfo->info.window = ((struct _Ecore_Win32_Window *)ee->prop.window)->window;
957         einfo->info.depth = ecore_win32_screen_depth_get();
958         einfo->info.rotation = 0;
959         einfo->info.borderless = 0;
960         einfo->info.fullscreen = 0;
961         einfo->info.region = 0;
962         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
963           {
964              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
965           }
966      }
967
968    return 1;
969 }
970 #endif /* BUILD_ECORE_EVAS_SOFTWARE_GDI */
971
972 #ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW
973 static int
974 _ecore_evas_engine_software_ddraw_init(Ecore_Evas *ee)
975 {
976    Evas_Engine_Info_Software_DDraw *einfo;
977    const char                      *driver;
978    int                              rmethod;
979
980    driver = "software_ddraw";
981
982    rmethod = evas_render_method_lookup(driver);
983    if (!rmethod)
984      return 0;
985
986    ee->driver = driver;
987    evas_output_method_set(ee->evas, rmethod);
988
989    einfo = (Evas_Engine_Info_Software_DDraw *)evas_engine_info_get(ee->evas);
990    if (einfo)
991      {
992         /* FIXME: REDRAW_DEBUG missing for now */
993         einfo->info.window = ((struct _Ecore_Win32_Window *)ee->prop.window)->window;
994         einfo->info.depth = ecore_win32_screen_depth_get();
995         einfo->info.rotation = 0;
996         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
997           {
998              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
999           }
1000      }
1001
1002    return 1;
1003 }
1004 #endif /* BUILD_ECORE_EVAS_SOFTWARE_DDRAW */
1005
1006 #ifdef BUILD_ECORE_EVAS_DIRECT3D
1007 static int
1008 _ecore_evas_engine_direct3d_init(Ecore_Evas *ee)
1009 {
1010    Evas_Engine_Info_Direct3D *einfo;
1011    const char                *driver;
1012    int                        rmethod;
1013
1014    driver = "direct3d";
1015
1016    rmethod = evas_render_method_lookup(driver);
1017    if (!rmethod)
1018      return 0;
1019
1020    ee->driver = driver;
1021    evas_output_method_set(ee->evas, rmethod);
1022
1023    einfo = (Evas_Engine_Info_Direct3D *)evas_engine_info_get(ee->evas);
1024    if (einfo)
1025      {
1026         /* FIXME: REDRAW_DEBUG missing for now */
1027         einfo->info.window = ((struct _Ecore_Win32_Window *)ee->prop.window)->window;
1028         einfo->info.depth = ecore_win32_screen_depth_get();
1029         einfo->info.rotation = 0;
1030         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
1031           {
1032              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
1033           }
1034      }
1035
1036    return 1;
1037 }
1038 #endif /* BUILD_ECORE_EVAS_DIRECT3D */
1039
1040 #ifdef BUILD_ECORE_EVAS_OPENGL_GLEW
1041 static int
1042 _ecore_evas_engine_opengl_glew_init(Ecore_Evas *ee)
1043 {
1044    Evas_Engine_Info_GL_Glew *einfo;
1045    const char               *driver;
1046    int                       rmethod;
1047
1048    driver = "gl_glew";
1049
1050    rmethod = evas_render_method_lookup(driver);
1051    if (!rmethod)
1052      return 0;
1053
1054    ee->driver = driver;
1055    evas_output_method_set(ee->evas, rmethod);
1056
1057    einfo = (Evas_Engine_Info_GL_Glew *)evas_engine_info_get(ee->evas);
1058    if (einfo)
1059      {
1060         /* FIXME: REDRAW_DEBUG missing for now */
1061         einfo->info.window = ((struct _Ecore_Win32_Window *)ee->prop.window)->window;
1062         einfo->info.depth = ecore_win32_screen_depth_get();
1063         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
1064           {
1065              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
1066           }
1067      }
1068
1069    return 1;
1070 }
1071 #endif /* BUILD_ECORE_EVAS_OPENGL_GLEW */
1072
1073 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW
1074 static int
1075 _ecore_evas_engine_software_16_ddraw_init(Ecore_Evas *ee)
1076 {
1077    Evas_Engine_Info_Software_DDraw *einfo;
1078    const char                      *driver;
1079    int                              rmethod;
1080
1081    driver = "software_16_ddraw";
1082
1083    rmethod = evas_render_method_lookup(driver);
1084    if (!rmethod)
1085      return 0;
1086
1087    ee->driver = driver;
1088    evas_output_method_set(ee->evas, rmethod);
1089
1090    if (ecore_win32_screen_depth_get() != 16)
1091      return 0;
1092
1093    einfo = (Evas_Engine_Info_Software_16_DDraw *)evas_engine_info_get(ee->evas);
1094    if (einfo)
1095      {
1096         /* FIXME: REDRAW_DEBUG missing for now */
1097         einfo->info.window = ((struct _Ecore_Win32_Window *)ee->prop.window)->window;
1098         einfo->info.depth = ecore_win32_screen_depth_get();
1099         einfo->info.rotation = 0;
1100         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
1101           {
1102              ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
1103           }
1104      }
1105
1106    return 1;
1107 }
1108 #endif /* BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW */
1109
1110 #ifdef BUILD_ECORE_EVAS_WIN32
1111 static Ecore_Evas *
1112 _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_init)(Ecore_Evas *ee),
1113                                Ecore_Win32_Window *parent,
1114                                int                 x,
1115                                int                 y,
1116                                int                 width,
1117                                int                 height)
1118 {
1119    Ecore_Evas *ee;
1120
1121    if (!ecore_win32_init())
1122      return NULL;
1123
1124    ee = calloc(1, sizeof(Ecore_Evas));
1125    if (!ee)
1126      return NULL;
1127
1128    ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
1129
1130    _ecore_evas_win32_init();
1131
1132    ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_win32_engine_func;
1133
1134    if (width < 1) width = 1;
1135    if (height < 1) height = 1;
1136    ee->x = x;
1137    ee->y = y;
1138    ee->w = width;
1139    ee->h = height;
1140
1141    ee->prop.max.w = 32767;
1142    ee->prop.max.h = 32767;
1143    ee->prop.layer = 4;
1144    ee->prop.request_pos = 0;
1145    ee->prop.sticky = 0;
1146    /* FIXME: sticky to add */
1147    ee->prop.window = 0;
1148
1149    /* init evas here */
1150    ee->evas = evas_new();
1151    evas_data_attach_set(ee->evas, ee);
1152    evas_output_size_set(ee->evas, width, height);
1153    evas_output_viewport_set(ee->evas, 0, 0, width, height);
1154
1155    ee->engine.win32.parent = parent;
1156    ee->prop.window = (Ecore_Window)ecore_win32_window_new(parent, x, y, width, height);
1157    if (!ee->prop.window)
1158      {
1159         _ecore_evas_win32_shutdown();
1160         free(ee);
1161         return NULL;
1162      }
1163
1164    if (!_ecore_evas_engine_init(ee))
1165      {
1166         _ecore_evas_win32_shutdown();
1167         free(ee);
1168         return NULL;
1169      }
1170
1171    ee->engine.func->fn_render = _ecore_evas_win32_render;
1172    _ecore_evas_register(ee);
1173    ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process);
1174    
1175    return ee;
1176 }
1177
1178 #endif /* BUILD_ECORE_EVAS_WIN32 */
1179
1180 #ifdef BUILD_ECORE_EVAS_SOFTWARE_GDI
1181
1182 EAPI Ecore_Evas *
1183 ecore_evas_software_gdi_new(Ecore_Win32_Window *parent,
1184                             int                 x,
1185                             int                 y,
1186                             int                 width,
1187                             int                 height)
1188 {
1189    return _ecore_evas_win32_new_internal(_ecore_evas_engine_software_gdi_init,
1190                                          parent,
1191                                          x,
1192                                          y,
1193                                          width,
1194                                          height);
1195 }
1196
1197 #else
1198
1199 EAPI Ecore_Evas *
1200 ecore_evas_software_gdi_new(Ecore_Win32_Window *parent __UNUSED__,
1201                             int                 x __UNUSED__,
1202                             int                 y __UNUSED__,
1203                             int                 width __UNUSED__,
1204                             int                 height __UNUSED__)
1205 {
1206    return NULL;
1207 }
1208
1209 #endif /* ! BUILD_ECORE_EVAS_SOFTWARE_GDI */
1210
1211 #ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW
1212
1213 EAPI Ecore_Evas *
1214 ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent,
1215                               int                 x,
1216                               int                 y,
1217                               int                 width,
1218                               int                 height)
1219 {
1220    return _ecore_evas_win32_new_internal(_ecore_evas_engine_software_ddraw_init,
1221                                          parent,
1222                                          x,
1223                                          y,
1224                                          width,
1225                                          height);
1226 }
1227
1228 #else
1229
1230 EAPI Ecore_Evas *
1231 ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent __UNUSED__,
1232                               int                 x __UNUSED__,
1233                               int                 y __UNUSED__,
1234                               int                 width __UNUSED__,
1235                               int                 height __UNUSED__)
1236 {
1237    return NULL;
1238 }
1239
1240 #endif /* ! BUILD_ECORE_EVAS_SOFTWARE_DDRAW */
1241
1242
1243 #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW
1244
1245 EAPI Ecore_Evas *
1246 ecore_evas_software_16_ddraw_new(Ecore_Win32_Window *parent,
1247                                  int                 x,
1248                                  int                 y,
1249                                  int                 width,
1250                                  int                 height)
1251 {
1252    return _ecore_evas_win32_new_internal(_ecore_evas_engine_software_16_ddraw_init,
1253                                          parent,
1254                                          x,
1255                                          y,
1256                                          width,
1257                                          height);
1258 }
1259
1260 #else
1261
1262 EAPI Ecore_Evas *
1263 ecore_evas_software_16_ddraw_new(Ecore_Win32_Window *parent __UNUSED__,
1264                                  int                 x __UNUSED__,
1265                                  int                 y __UNUSED__,
1266                                  int                 width __UNUSED__,
1267                                  int                 height __UNUSED__)
1268 {
1269    return NULL;
1270 }
1271
1272 #endif /* ! BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW */
1273
1274
1275 #ifdef BUILD_ECORE_EVAS_DIRECT3D
1276
1277 EAPI Ecore_Evas *
1278 ecore_evas_direct3d_new(Ecore_Win32_Window *parent,
1279                         int                 x,
1280                         int                 y,
1281                         int                 width,
1282                         int                 height)
1283 {
1284    return _ecore_evas_win32_new_internal(_ecore_evas_engine_direct3d_init,
1285                                          parent,
1286                                          x,
1287                                          y,
1288                                          width,
1289                                          height);
1290 }
1291
1292 #else
1293
1294 EAPI Ecore_Evas *
1295 ecore_evas_direct3d_new(Ecore_Win32_Window *parent __UNUSED__,
1296                         int                 x __UNUSED__,
1297                         int                 y __UNUSED__,
1298                         int                 width __UNUSED__,
1299                         int                 height __UNUSED__)
1300 {
1301    return NULL;
1302 }
1303
1304 #endif /* ! BUILD_ECORE_EVAS_DIRECT3D */
1305
1306
1307 #ifdef BUILD_ECORE_EVAS_OPENGL_GLEW
1308
1309 EAPI Ecore_Evas *
1310 ecore_evas_gl_glew_new(Ecore_Win32_Window *parent,
1311                        int                 x,
1312                        int                 y,
1313                        int                 width,
1314                        int                 height)
1315 {
1316    return _ecore_evas_win32_new_internal(_ecore_evas_engine_opengl_glew_init,
1317                                          parent,
1318                                          x,
1319                                          y,
1320                                          width,
1321                                          height);
1322 }
1323
1324 #else
1325
1326 EAPI Ecore_Evas *
1327 ecore_evas_gl_glew_new(Ecore_Win32_Window *parent __UNUSED__,
1328                        int                 x __UNUSED__,
1329                        int                 y __UNUSED__,
1330                        int                 width __UNUSED__,
1331                        int                 height __UNUSED__)
1332 {
1333    return NULL;
1334 }
1335
1336 #endif /* BUILD_ECORE_EVAS_OPENGL_GLEW */
1337
1338
1339 #ifdef BUILD_ECORE_EVAS_WIN32
1340
1341 EAPI Ecore_Win32_Window *
1342 ecore_evas_win32_window_get(const Ecore_Evas *ee)
1343 {
1344    return (Ecore_Win32_Window *) ecore_evas_window_get(ee);
1345 }
1346
1347 #else
1348
1349 EAPI Ecore_Win32_Window *
1350 ecore_evas_win32_window_get(const Ecore_Evas *ee __UNUSED__)
1351 {
1352    return NULL;
1353 }
1354
1355 #endif /* BUILD_ECORE_EVAS_WIN32 */