aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_evas/ecore_evas_fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_evas/ecore_evas_fb.c')
-rw-r--r--libraries/ecore/src/lib/ecore_evas/ecore_evas_fb.c662
1 files changed, 0 insertions, 662 deletions
diff --git a/libraries/ecore/src/lib/ecore_evas/ecore_evas_fb.c b/libraries/ecore/src/lib/ecore_evas/ecore_evas_fb.c
deleted file mode 100644
index 11e2ffd..0000000
--- a/libraries/ecore/src/lib/ecore_evas/ecore_evas_fb.c
+++ /dev/null
@@ -1,662 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <sys/types.h>
7#include <dirent.h>
8
9#include <Ecore.h>
10#include "ecore_private.h"
11#ifdef BUILD_ECORE_EVAS_FB
12#include <Ecore_Fb.h>
13#include <ecore_fb_private.h>
14#endif
15
16#include "ecore_evas_private.h"
17#include "Ecore_Evas.h"
18
19#ifdef BUILD_ECORE_EVAS_FB
20static int _ecore_evas_init_count = 0;
21
22static char *ecore_evas_default_display = "0";
23static Eina_List *ecore_evas_input_devices = NULL;
24static Ecore_Event_Handler *ecore_evas_event_handlers[4] = {NULL, NULL, NULL, NULL};
25
26static void
27_ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y)
28{
29 int fbw, fbh;
30
31 ee->mouse.x = x;
32 ee->mouse.y = y;
33 ecore_fb_size_get(&fbw, &fbh);
34 if (ee->prop.cursor.object)
35 {
36 evas_object_show(ee->prop.cursor.object);
37 if (ee->rotation == 0)
38 evas_object_move(ee->prop.cursor.object,
39 x - ee->prop.cursor.hot.x,
40 y - ee->prop.cursor.hot.y);
41 else if (ee->rotation == 90)
42 evas_object_move(ee->prop.cursor.object,
43 (fbh - ee->h) + ee->h - y - 1 - ee->prop.cursor.hot.x,
44 x - ee->prop.cursor.hot.y);
45 else if (ee->rotation == 180)
46 evas_object_move(ee->prop.cursor.object,
47 (fbw - ee->w) + ee->w - x - 1 - ee->prop.cursor.hot.x,
48 (fbh - ee->h) + ee->h - y - 1 - ee->prop.cursor.hot.y);
49 else if (ee->rotation == 270)
50 evas_object_move(ee->prop.cursor.object,
51 y - ee->prop.cursor.hot.x,
52 (fbw - ee->w) + ee->w - x - 1 - ee->prop.cursor.hot.y);
53 }
54}
55
56static Ecore_Evas *fb_ee = NULL;
57
58static Ecore_Evas *
59_ecore_evas_fb_match(void)
60{
61 return fb_ee;
62}
63
64static void
65_ecore_evas_fb_lose(void *data __UNUSED__)
66{
67 Eina_List *ll;
68 Ecore_Fb_Input_Device *dev;
69
70 if (fb_ee) fb_ee->visible = 0;
71
72 EINA_LIST_FOREACH(ecore_evas_input_devices, ll, dev)
73 ecore_fb_input_device_listen(dev, 0);
74}
75
76static void
77_ecore_evas_fb_gain(void *data __UNUSED__)
78{
79 Ecore_Evas *ee;
80 Eina_List *ll;
81 Ecore_Fb_Input_Device *dev;
82
83 if (fb_ee)
84 {
85 ee = fb_ee;
86
87 ee->visible = 1;
88 if ((ee->rotation == 90) || (ee->rotation == 270))
89 evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
90 else
91 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
92 }
93
94 EINA_LIST_FOREACH(ecore_evas_input_devices, ll, dev)
95 ecore_fb_input_device_listen(dev, 1);
96}
97
98static Eina_Bool
99_ecore_evas_event_mouse_button_down(void *data __UNUSED__, int type __UNUSED__, void *event)
100{
101 Ecore_Evas *ee;
102 Ecore_Event_Mouse_Button *e;
103
104 e = event;
105 ee = _ecore_evas_fb_match();
106 if (!ee) return ECORE_CALLBACK_PASS_ON;
107 _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
108 return ECORE_CALLBACK_PASS_ON;
109}
110
111static Eina_Bool
112_ecore_evas_event_mouse_button_up(void *data __UNUSED__, int type __UNUSED__, void *event)
113{
114 Ecore_Evas *ee;
115 Ecore_Event_Mouse_Button *e;
116
117 e = event;
118 ee = _ecore_evas_fb_match();
119 if (!ee) return ECORE_CALLBACK_PASS_ON;
120 _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
121 return ECORE_CALLBACK_PASS_ON;
122}
123
124static Eina_Bool
125_ecore_evas_event_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event)
126{
127 Ecore_Evas *ee;
128 Ecore_Event_Mouse_Move *e;
129
130 e = event;
131 ee = _ecore_evas_fb_match();
132 if (!ee) return ECORE_CALLBACK_PASS_ON;
133 _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
134 return ECORE_CALLBACK_PASS_ON;
135}
136
137static Eina_Bool
138_ecore_evas_event_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *event)
139{
140 Ecore_Evas *ee;
141 Ecore_Event_Mouse_Wheel *e;
142
143 e = event;
144 ee = _ecore_evas_fb_match();
145 if (!ee) return ECORE_CALLBACK_PASS_ON;
146 _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
147 return ECORE_CALLBACK_PASS_ON;
148}
149
150static int
151_ecore_evas_fb_render(Ecore_Evas *ee)
152{
153 int rend = 0;
154
155 if (ee->visible)
156 {
157 Eina_List *updates;
158 Eina_List *ll;
159 Ecore_Evas *ee2;
160
161 if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
162
163 EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
164 {
165 if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
166 if (ee2->engine.func->fn_render)
167 rend |= ee2->engine.func->fn_render(ee2);
168 if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
169 }
170
171 updates = evas_render_updates(ee->evas);
172 if (updates)
173 {
174 evas_render_updates_free(updates);
175 _ecore_evas_idle_timeout_update(ee);
176 rend = 1;
177 }
178 if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
179 }
180 else
181 evas_norender(ee->evas);
182 return rend;
183}
184
185static int
186_ecore_evas_fb_init(Ecore_Evas *ee, int w, int h)
187{
188 Eina_File_Direct_Info *info;
189 Eina_Iterator *ls;
190 Ecore_Fb_Input_Device *device;
191 Ecore_Fb_Input_Device_Cap caps;
192 int mouse_handled = 0;
193
194 _ecore_evas_init_count++;
195 if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
196
197 ecore_event_evas_init();
198
199 /* register all input devices */
200 ls = eina_file_direct_ls("/dev/input/");
201
202 EINA_ITERATOR_FOREACH(ls, info)
203 {
204 if (strncmp(info->path + info->name_start, "event", 5) != 0)
205 continue;
206
207 if (!(device = ecore_fb_input_device_open(info->path)))
208 continue;
209 ecore_fb_input_device_window_set(device, ee);
210
211 caps = ecore_fb_input_device_cap_get(device);
212
213 /* Mouse */
214#ifdef HAVE_TSLIB
215 if (caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE)
216#else
217 if ((caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE) || (caps & ECORE_FB_INPUT_DEVICE_CAP_ABSOLUTE))
218#endif
219 {
220 ecore_fb_input_device_axis_size_set(device, w, h);
221 ecore_fb_input_device_listen(device,1);
222 ecore_evas_input_devices = eina_list_append(ecore_evas_input_devices, device);
223 if (!mouse_handled)
224 {
225 ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL);
226 ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL);
227 ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL);
228 ecore_evas_event_handlers[3] = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _ecore_evas_event_mouse_wheel, NULL);
229 mouse_handled = 1;
230 }
231 }
232 /* Keyboard */
233 else if ((caps & ECORE_FB_INPUT_DEVICE_CAP_KEYS_OR_BUTTONS) && !(caps & ECORE_FB_INPUT_DEVICE_CAP_ABSOLUTE))
234 {
235 ecore_fb_input_device_listen(device,1);
236 ecore_evas_input_devices = eina_list_append(ecore_evas_input_devices, device);
237 }
238 }
239 eina_iterator_free(ls);
240
241 if (!mouse_handled)
242 {
243 if (ecore_fb_ts_init())
244 {
245 ecore_fb_ts_event_window_set(ee);
246 ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL);
247 ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL);
248 ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL);
249 mouse_handled = 1;
250 }
251 }
252 return _ecore_evas_init_count;
253}
254
255static void
256_ecore_evas_fb_free(Ecore_Evas *ee)
257{
258 ecore_evas_input_event_unregister(ee);
259 if (fb_ee == ee) fb_ee = NULL;
260 _ecore_evas_fb_shutdown();
261 ecore_fb_shutdown();
262}
263
264static void
265_ecore_evas_resize(Ecore_Evas *ee, int w, int h)
266{
267 ee->req.w = w;
268 ee->req.h = h;
269 if ((w == ee->w) && (h == ee->h)) return;
270 ee->w = w;
271 ee->h = h;
272 if ((ee->rotation == 90) || (ee->rotation == 270))
273 {
274 evas_output_size_set(ee->evas, ee->h, ee->w);
275 evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
276 evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
277 }
278 else
279 {
280 evas_output_size_set(ee->evas, ee->w, ee->h);
281 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
282 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
283 }
284 if (ee->func.fn_resize) ee->func.fn_resize(ee);
285}
286
287static void
288_ecore_evas_move_resize(Ecore_Evas *ee, int x __UNUSED__, int y __UNUSED__, int w, int h)
289{
290 ee->req.w = w;
291 ee->req.h = h;
292 if ((w == ee->w) && (h == ee->h)) return;
293 ee->w = w;
294 ee->h = h;
295 if ((ee->rotation == 90) || (ee->rotation == 270))
296 {
297 evas_output_size_set(ee->evas, ee->h, ee->w);
298 evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
299 evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
300 }
301 else
302 {
303 evas_output_size_set(ee->evas, ee->w, ee->h);
304 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
305 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
306 }
307 if (ee->func.fn_resize) ee->func.fn_resize(ee);
308}
309
310static void
311_ecore_evas_rotation_set(Ecore_Evas *ee, int rotation, int resize __UNUSED__)
312{
313 Evas_Engine_Info_FB *einfo;
314 int rot_dif;
315
316 if (ee->rotation == rotation) return;
317 einfo = (Evas_Engine_Info_FB *)evas_engine_info_get(ee->evas);
318 if (!einfo) return;
319 rot_dif = ee->rotation - rotation;
320 if (rot_dif < 0) rot_dif = -rot_dif;
321 if (rot_dif != 180)
322 {
323
324 einfo->info.rotation = rotation;
325 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
326 {
327 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
328 }
329 if (!ee->prop.fullscreen)
330 {
331 int tmp;
332
333 tmp = ee->w;
334 ee->w = ee->h;
335 ee->h = tmp;
336 ee->req.w = ee->w;
337 ee->req.h = ee->h;
338 }
339 else
340 {
341 if ((rotation == 0) || (rotation == 180))
342 {
343 evas_output_size_set(ee->evas, ee->w, ee->h);
344 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
345 }
346 else
347 {
348 evas_output_size_set(ee->evas, ee->h, ee->w);
349 evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
350 }
351 }
352 ee->rotation = rotation;
353 }
354 else
355 {
356 einfo->info.rotation = rotation;
357 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
358 {
359 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
360 }
361 ee->rotation = rotation;
362 }
363 if ((ee->rotation == 90) || (ee->rotation == 270))
364 evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
365 else
366 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
367 _ecore_evas_mouse_move_process_fb(ee, ee->mouse.x, ee->mouse.y);
368 if (ee->func.fn_resize) ee->func.fn_resize(ee);
369}
370
371static void
372_ecore_evas_show(Ecore_Evas *ee)
373{
374 if (ee->prop.focused) return;
375 ee->prop.focused = 1;
376 evas_focus_in(ee->evas);
377 if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
378}
379
380static void
381_ecore_evas_object_cursor_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
382{
383 Ecore_Evas *ee;
384
385 ee = data;
386 if (ee)
387 ee->prop.cursor.object = NULL;
388}
389
390static void
391_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
392{
393 int x, y;
394
395 if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
396
397 if (!obj)
398 {
399 ee->prop.cursor.object = NULL;
400 ee->prop.cursor.layer = 0;
401 ee->prop.cursor.hot.x = 0;
402 ee->prop.cursor.hot.y = 0;
403 return;
404 }
405
406 ee->prop.cursor.object = obj;
407 ee->prop.cursor.layer = layer;
408 ee->prop.cursor.hot.x = hot_x;
409 ee->prop.cursor.hot.y = hot_y;
410 evas_pointer_output_xy_get(ee->evas, &x, &y);
411 evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
412 evas_object_move(ee->prop.cursor.object,
413 x - ee->prop.cursor.hot.x,
414 y - ee->prop.cursor.hot.y);
415 evas_object_pass_events_set(ee->prop.cursor.object, 1);
416 if (evas_pointer_inside_get(ee->evas))
417 evas_object_show(ee->prop.cursor.object);
418
419 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
420}
421
422static void
423_ecore_evas_fullscreen_set(Ecore_Evas *ee, int on)
424{
425 Eina_List *l;
426 Ecore_Fb_Input_Device *dev;
427 int resized = 0;
428
429 if (((ee->prop.fullscreen) && (on)) ||
430 ((!ee->prop.fullscreen) && (!on))) return;
431 if (on)
432 {
433 int w, h;
434
435 ee->engine.fb.real_w = ee->w;
436 ee->engine.fb.real_h = ee->h;
437 w = ee->w;
438 h = ee->h;
439 ecore_fb_size_get(&w, &h);
440 if ((w == 0) && (h == 0))
441 {
442 w = ee->w;
443 h = ee->h;
444 }
445 if ((w != ee->w) || (h != ee->h)) resized = 1;
446 ee->w = w;
447 ee->h = h;
448 ee->req.w = ee->w;
449 ee->req.h = ee->h;
450 evas_output_size_set(ee->evas, ee->w, ee->h);
451 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
452 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
453 }
454 else
455 {
456 if ((ee->engine.fb.real_w != ee->w) || (ee->engine.fb.real_h != ee->h)) resized = 1;
457 ee->w = ee->engine.fb.real_w;
458 ee->h = ee->engine.fb.real_h;
459 ee->req.w = ee->w;
460 ee->req.h = ee->h;
461 evas_output_size_set(ee->evas, ee->w, ee->h);
462 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
463 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
464 }
465 ee->prop.fullscreen = on;
466 EINA_LIST_FOREACH(ecore_evas_input_devices, l, dev)
467 ecore_fb_input_device_axis_size_set(dev, ee->w, ee->h);
468 /* rescale the input device area */
469 if (resized)
470 {
471 if (ee->func.fn_resize) ee->func.fn_resize(ee);
472 }
473}
474
475int
476_ecore_evas_fb_shutdown(void)
477{
478 _ecore_evas_init_count--;
479 if (_ecore_evas_init_count == 0)
480 {
481 int i;
482
483 for (i = 0; i < 4; i++)
484 {
485 if (ecore_evas_event_handlers[i])
486 ecore_event_handler_del(ecore_evas_event_handlers[i]);
487 }
488 ecore_fb_ts_shutdown();
489 ecore_event_evas_shutdown();
490 }
491 if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
492 return _ecore_evas_init_count;
493}
494
495static Ecore_Evas_Engine_Func _ecore_fb_engine_func =
496{
497 _ecore_evas_fb_free,
498 NULL,
499 NULL,
500 NULL,
501 NULL,
502 NULL,
503 NULL,
504 NULL,
505 NULL,
506 NULL,
507 NULL,
508 NULL,
509 NULL,
510 NULL,
511 NULL,
512 NULL,
513 NULL,
514 _ecore_evas_resize,
515 _ecore_evas_move_resize,
516 _ecore_evas_rotation_set,
517 NULL,
518 _ecore_evas_show,
519 NULL,
520 NULL,
521 NULL,
522 NULL,
523 NULL,
524 NULL,
525 NULL,
526 NULL,
527 NULL,
528 NULL,
529 _ecore_evas_object_cursor_set,
530 NULL,
531 NULL,
532 NULL,
533 NULL,
534 NULL,
535 NULL,
536 _ecore_evas_fullscreen_set,
537 NULL,
538 NULL,
539 NULL,
540 NULL,
541 NULL,
542 NULL, //transparent
543
544 NULL,
545 NULL,
546 NULL,
547 NULL,
548 NULL,
549 NULL,
550
551 NULL, // render
552 NULL // screen_geometry_get
553};
554#endif
555
556/**
557 * To be documented.
558 *
559 * FIXME: To be fixed.
560 */
561#ifdef BUILD_ECORE_EVAS_FB
562EAPI Ecore_Evas *
563ecore_evas_fb_new(const char *disp_name, int rotation, int w, int h)
564{
565 Evas_Engine_Info_FB *einfo;
566 Ecore_Evas *ee;
567
568 int rmethod;
569
570 if (!disp_name)
571 disp_name = ecore_evas_default_display;
572
573 rmethod = evas_render_method_lookup("fb");
574 if (!rmethod) return NULL;
575
576 if (!ecore_fb_init(disp_name)) return NULL;
577 ecore_fb_callback_gain_set(_ecore_evas_fb_gain, NULL);
578 ecore_fb_callback_lose_set(_ecore_evas_fb_lose, NULL);
579 ee = calloc(1, sizeof(Ecore_Evas));
580 if (!ee) return NULL;
581
582 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
583
584 _ecore_evas_fb_init(ee, w, h);
585
586 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_fb_engine_func;
587
588 ee->driver = "fb";
589 if (disp_name) ee->name = strdup(disp_name);
590
591 if (w < 1) w = 1;
592 if (h < 1) h = 1;
593 ee->rotation = rotation;
594 ee->visible = 1;
595 ee->w = w;
596 ee->h = h;
597 ee->req.w = ee->w;
598 ee->req.h = ee->h;
599
600 ee->prop.max.w = 0;
601 ee->prop.max.h = 0;
602 ee->prop.layer = 0;
603 ee->prop.focused = 1;
604 ee->prop.borderless = 1;
605 ee->prop.override = 1;
606 ee->prop.maximized = 1;
607 ee->prop.fullscreen = 0;
608 ee->prop.withdrawn = 0;
609 ee->prop.sticky = 0;
610
611 /* init evas here */
612 ee->evas = evas_new();
613 evas_data_attach_set(ee->evas, ee);
614 evas_output_method_set(ee->evas, rmethod);
615
616 if ((rotation == 90) || (rotation == 270))
617 {
618 evas_output_size_set(ee->evas, h, w);
619 evas_output_viewport_set(ee->evas, 0, 0, h, w);
620 }
621 else
622 {
623 evas_output_size_set(ee->evas, w, h);
624 evas_output_viewport_set(ee->evas, 0, 0, w, h);
625 }
626
627 einfo = (Evas_Engine_Info_FB *)evas_engine_info_get(ee->evas);
628 if (einfo)
629 {
630 einfo->info.virtual_terminal = 0;
631 einfo->info.device_number = strtol(disp_name, NULL, 10);
632 einfo->info.refresh = 0;
633 einfo->info.rotation = ee->rotation;
634 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
635 {
636 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
637 ecore_evas_free(ee);
638 return NULL;
639 }
640 }
641 else
642 {
643 ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver);
644 ecore_evas_free(ee);
645 return NULL;
646 }
647
648 ecore_evas_input_event_register(ee);
649
650 ee->engine.func->fn_render = _ecore_evas_fb_render;
651 _ecore_evas_register(ee);
652 fb_ee = ee;
653 evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
654 return ee;
655}
656#else
657EAPI Ecore_Evas *
658ecore_evas_fb_new(const char *disp_name __UNUSED__, int rotation __UNUSED__, int w __UNUSED__, int h __UNUSED__)
659{
660 return NULL;
661}
662#endif