EAPI int ecore_evas_sticky_get(const Ecore_Evas *ee);
EAPI void ecore_evas_ignore_events_set(Ecore_Evas *ee, int ignore);
EAPI int ecore_evas_ignore_events_get(const Ecore_Evas *ee);
+EAPI void ecore_evas_manual_render_set(Ecore_Evas *ee, int manual_render);
+EAPI int ecore_evas_manual_render_get(const Ecore_Evas *ee);
+EAPI void ecore_evas_manual_render(Ecore_Evas *ee);
+
EAPI Ecore_Window ecore_evas_window_get(const Ecore_Evas *ee);
static Ecore_Fd_Handler *_ecore_evas_async_events_fd = NULL;
static int _ecore_evas_async_events_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
+static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
+static Ecore_Evas *ecore_evases = NULL;
+static int _ecore_evas_fps_debug = 0;
+
+static int
+_ecore_evas_idle_enter(void *data __UNUSED__)
+{
+ Ecore_Evas *ee;
+ double t1 = 0.0;
+ double t2 = 0.0;
+ int rend = 0;
+
+ if (!ecore_evases) return 1;
+ if (_ecore_evas_fps_debug)
+ {
+ t1 = ecore_time_get();
+ }
+ EINA_INLIST_FOREACH(ecore_evases, ee)
+ {
+ if (!ee->manual_render)
+ {
+ if (ee->engine.func->fn_render)
+ rend |= ee->engine.func->fn_render(ee);
+ }
+ }
+ if (_ecore_evas_fps_debug)
+ {
+ t2 = ecore_time_get();
+ if (rend)
+ _ecore_evas_fps_debug_rendertime_add(t2 - t1);
+ }
+ return 1;
+}
+
/**
* Query if a particular renginering engine target has support
* @param engine The engine to check support for
ECORE_FD_READ,
_ecore_evas_async_events_fd_handler, NULL,
NULL, NULL);
+
+ ecore_evas_idle_enterer =
+ ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL);
+ if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
+ if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
+
return _ecore_evas_init_count;
shutdown_ecore:
EAPI int
ecore_evas_shutdown(void)
{
+ while (ecore_evases) _ecore_evas_free(ecore_evases);
+
+ if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
+ ecore_idle_enterer_del(ecore_evas_idle_enterer);
+ ecore_evas_idle_enterer = NULL;
+
if (--_ecore_evas_init_count != 0)
return _ecore_evas_init_count;
ecore_evas_withdrawn_set(Ecore_Evas *ee, int withdrawn)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
- {
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
- "ecore_evas_withdrawn_set");
- return;
- }
-
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_withdrawn_set");
+ return;
+ }
+
IFC(ee, fn_withdrawn_set) (ee, withdrawn);
IFE;
}
ecore_evas_withdrawn_get(const Ecore_Evas *ee)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
- {
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
- "ecore_evas_withdrawn_get");
- return 0;
- } else
- return ee->prop.withdrawn ? 1:0;
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_withdrawn_get");
+ return 0;
+ } else
+ return ee->prop.withdrawn ? 1:0;
}
/**
ecore_evas_sticky_set(Ecore_Evas *ee, int sticky)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
- {
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
- "ecore_evas_sticky_set");
- return;
- }
-
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_sticky_set");
+ return;
+ }
+
IFC(ee, fn_sticky_set) (ee, sticky);
IFE;
}
ecore_evas_sticky_get(const Ecore_Evas *ee)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
- {
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
- "ecore_evas_sticky_get");
- return 0;
- } else
- return ee->prop.sticky ? 1:0;
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_sticky_get");
+ return 0;
+ } else
+ return ee->prop.sticky ? 1:0;
}
/**
ecore_evas_ignore_events_set(Ecore_Evas *ee, int ignore)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
- {
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
- "ecore_evas_ignore_events_set");
- return;
- }
-
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_ignore_events_set");
+ return;
+ }
+
IFC(ee, fn_ignore_events_set) (ee, ignore);
IFE;
}
ecore_evas_ignore_events_get(const Ecore_Evas *ee)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
- {
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
- "ecore_evas_ignore_events_get");
- return 0;
- } else
- return ee->ignore_events ? 1 : 0;
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_ignore_events_get");
+ return 0;
+ }
+ return ee->ignore_events ? 1 : 0;
+}
+
+EAPI void
+ecore_evas_manual_render_set(Ecore_Evas *ee, int manual_render)
+{
+ if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_manual_render_set");
+ return;
+ }
+ ee->manual_render = manual_render;
+}
+
+EAPI int
+ecore_evas_manual_render_get(const Ecore_Evas *ee)
+{
+ if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_manual_render_get");
+ return 0;
+ }
+ return ee->manual_render ? 1 : 0;
+}
+
+EAPI void
+ecore_evas_manual_render(Ecore_Evas *ee)
+{
+ if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
+ {
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+ "ecore_evas_manual_render");
+ return;
+ }
+ if (ee->engine.func->fn_render)
+ ee->engine.func->fn_render(ee);
}
EAPI Ecore_Window
}
void
+_ecore_evas_register(Ecore_Evas *ee)
+{
+ ee->registered = 1;
+ ecore_evases = (Ecore_Evas *)eina_inlist_prepend
+ (EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+}
+
+void
_ecore_evas_free(Ecore_Evas *ee)
{
if (ee->func.fn_pre_free) ee->func.fn_pre_free(ee);
if (ee->engine.idle_flush_timer)
ecore_timer_del(ee->engine.idle_flush_timer);
if (ee->engine.func->fn_free) ee->engine.func->fn_free(ee);
+ if (ee->registered)
+ {
+ ecore_evases = (Ecore_Evas *)eina_inlist_remove
+ (EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ }
free(ee);
}
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
-
-static Ecore_Evas *ecore_evases = NULL;
-
static int
_ecore_evas_buffer_init(void)
{
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
- if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
return _ecore_evas_init_count;
}
}
else
{
- ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
-
free(ee->engine.buffer.pixels);
}
_ecore_evas_buffer_shutdown();
_ecore_evas_init_count--;
if (_ecore_evas_init_count == 0)
{
- while (ecore_evases)
- {
- _ecore_evas_free(ecore_evases);
- }
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
}
if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
return _ecore_evas_init_count;
if (ee->func.fn_hide) ee->func.fn_hide(ee);
}
-static const Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
+static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
{
_ecore_evas_buffer_free,
NULL,
NULL,
NULL,
NULL,
- NULL
+ NULL,
+
+ NULL // render
};
#endif
evas_event_feed_mouse_in(ee->evas, 0, NULL);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_buffer_render;
+ _ecore_evas_register(ee);
+
return ee;
#else
return NULL;
evas_key_lock_add(ee->evas, "Scroll_Lock");
ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee);
+
+ ee->engine.func->fn_render = _ecore_evas_buffer_render;
+
return o;
#else
return NULL;
#ifdef BUILD_ECORE_EVAS_DIRECTFB
static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[13];
-static Ecore_Evas *ecore_evases = NULL;
static Eina_Hash *ecore_evases_hash = NULL;
-static Ecore_Idle_Enterer *ecore_evas_directfb_idle_enterer = NULL;
-
static void
_ecore_evas_directfb_render(Ecore_Evas *ee)
{
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
}
-static int
-_ecore_evas_directfb_idle_enter(void *data __UNUSED__)
-{
- Ecore_Evas *ee;
- double t1 = 0.0;
- double t2 = 0.0;
-
- if (!ecore_evases) return 1;
- if (_ecore_evas_fps_debug)
- {
- t1 = ecore_time_get();
- }
- EINA_INLIST_FOREACH(ecore_evases, ee)
- _ecore_evas_directfb_render(ee);
- if (_ecore_evas_fps_debug)
- {
- t2 = ecore_time_get();
- _ecore_evas_fps_debug_rendertime_add(t2 - t1);
- }
- return 1;
-}
-
static char *
_ecore_evas_directfb_winid_str_get(Ecore_X_Window win)
{
{
int i;
- while (ecore_evases) _ecore_evas_free(ecore_evases);
for (i = 0; i < 8; i++)
ecore_event_handler_del(ecore_evas_event_handlers[i]);
- ecore_idle_enterer_del(ecore_evas_directfb_idle_enterer);
- ecore_evas_directfb_idle_enterer = NULL;
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
}
if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
return _ecore_evas_init_count;
{
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
- if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
- ecore_evas_directfb_idle_enterer = ecore_idle_enterer_add(_ecore_evas_directfb_idle_enter, NULL);
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_DIRECTFB_EVENT_KEY_DOWN, _ecore_evas_directfb_event_key_down, NULL);
ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_DIRECTFB_EVENT_KEY_UP, _ecore_evas_directfb_event_key_up, NULL);
{
eina_hash_del(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
ecore_directfb_window_free(ee->engine.directfb.window);
- ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
_ecore_evas_directfb_shutdown();
ecore_directfb_shutdown();
}
#endif
#ifdef BUILD_ECORE_EVAS_DIRECTFB
-static const Ecore_Evas_Engine_Func _ecore_directfb_engine_func =
+static Ecore_Evas_Engine_Func _ecore_directfb_engine_func =
{
_ecore_evas_directfb_free, /* free an ecore_evas */
NULL, /* cb resize */
NULL, /* withdrawn */
NULL, /* sticky */
NULL, /* ignore events */
- NULL /* alpha */
+ NULL, /* alpha */
+
+ NULL // render
};
#endif
einfo->info.surface = window->surface;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
}
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+
+ ee->engine.func->fn_render = _ecore_evas_directfb_render;
+ _ecore_evas_register(ee);
+
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
#ifdef BUILD_ECORE_EVAS_FB
static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
static char *ecore_evas_default_display = "0";
static Eina_List *ecore_evas_input_devices = NULL;
-static Ecore_Evas *ecore_evases = NULL;
static Ecore_Event_Handler *ecore_evas_event_handlers[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
static void
_ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y, unsigned int timestamp)
evas_event_feed_mouse_move(ee->evas, y, (fbw - ee->w) + ee->w - x - 1, timestamp, NULL);
}
+static Ecore_Evas *fb_ee = NULL;
+
static Ecore_Evas *
_ecore_evas_fb_match(void)
{
- return ecore_evases;
+ return fb_ee;
}
static void
Eina_List *ll;
Ecore_Fb_Input_Device *dev;
- EINA_INLIST_FOREACH(ecore_evases, ee)
- ee->visible = 0;
+ if (fb_ee) fb_ee->visible = 0;
EINA_LIST_FOREACH(ecore_evas_input_devices, ll, dev)
ecore_fb_input_device_listen(dev, 0);
Eina_List *ll;
Ecore_Fb_Input_Device *dev;
- EINA_INLIST_FOREACH(ecore_evases,ee)
+ if (fb_ee)
{
+ ee = fb_ee;
+
ee->visible = 1;
if ((ee->rotation == 90) || (ee->rotation == 270))
evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
}
static int
-_ecore_evas_idle_enter(void *data __UNUSED__)
+_ecore_evas_fb_render(Ecore_Evas *ee)
{
- Ecore_Evas *ee;
- double t1 = 0.0;
- double t2 = 0.0;
-
- if (!ecore_evases) return 1;
- if (_ecore_evas_fps_debug)
- {
- t1 = ecore_time_get();
- }
- EINA_INLIST_FOREACH(ecore_evases, ee)
+ int rend = 0;
+
+ if (ee->visible)
{
- if (ee->visible)
- {
- Eina_List *updates;
-
+ Eina_List *updates;
+
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
- Eina_List *ll;
- Ecore_Evas *ee2;
+ Eina_List *ll;
+ Ecore_Evas *ee2;
#endif
- if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
+ if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
- EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
- {
- if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
- _ecore_evas_buffer_render(ee2);
- if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
- }
+ EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
+ {
+ if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
+ _ecore_evas_buffer_render(ee2);
+ if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
+ }
#endif
- updates = evas_render_updates(ee->evas);
- if (updates)
- {
- evas_render_updates_free(updates);
- _ecore_evas_idle_timeout_update(ee);
- }
- if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
- }
- else
- evas_norender(ee->evas);
+ updates = evas_render_updates(ee->evas);
+ if (updates)
+ {
+ evas_render_updates_free(updates);
+ _ecore_evas_idle_timeout_update(ee);
+ rend = 1;
+ }
+ if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
}
- if (_ecore_evas_fps_debug)
- {
- t2 = ecore_time_get();
- _ecore_evas_fps_debug_rendertime_add(t2 - t1);
- }
- return 1;
+ else
+ evas_norender(ee->evas);
+ return rend;
}
static int
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
- if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
- ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL);
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
/* register all input devices */
input_dir = opendir("/dev/input/");
if (!input_dir) return _ecore_evas_init_count;
static void
_ecore_evas_fb_free(Ecore_Evas *ee)
{
- ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ if (fb_ee == ee) fb_ee = NULL;
_ecore_evas_fb_shutdown();
ecore_fb_shutdown();
}
{
int i;
- while (ecore_evases) _ecore_evas_free(ecore_evases);
for (i = 0; i < 5; i++)
ecore_event_handler_del(ecore_evas_event_handlers[i]);
- ecore_idle_enterer_del(ecore_evas_idle_enterer);
- ecore_evas_idle_enterer = NULL;
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
ecore_fb_ts_shutdown();
}
if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
return _ecore_evas_init_count;
}
-static const Ecore_Evas_Engine_Func _ecore_fb_engine_func =
+static Ecore_Evas_Engine_Func _ecore_fb_engine_func =
{
_ecore_evas_fb_free,
NULL,
NULL,
NULL,
NULL,
- NULL
+ NULL,
+
+ NULL // render
};
#endif
evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_buffer_render;
+ _ecore_evas_register(ee);
+ fb_ee = ee;
+
return ee;
}
#else
void (*fn_sticky_set) (Ecore_Evas *ee, int sticky);
void (*fn_ignore_events_set) (Ecore_Evas *ee, int ignore);
void (*fn_alpha_set) (Ecore_Evas *ee, int alpha);
+
+ int (*fn_render) (Ecore_Evas *ee);
};
struct _Ecore_Evas_Engine
Eina_List *sub_ecore_evas;
unsigned char ignore_events : 1;
+ unsigned char manual_render : 1;
+ unsigned char registered : 1;
};
#ifdef BUILD_ECORE_EVAS_X11
void _ecore_evas_fps_debug_init(void);
void _ecore_evas_fps_debug_shutdown(void);
void _ecore_evas_fps_debug_rendertime_add(double t);
+void _ecore_evas_register(Ecore_Evas *ee);
void _ecore_evas_free(Ecore_Evas *ee);
void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
void _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp);
#include "Ecore_Quartz.h"
#include "Evas_Engine_Quartz.h"
+// FIXME: this engine has lots of problems. only 1 window at a time, drawRect looks wrong, doesnt handle resizes and more
+
static int _ecore_evas_init_count = 0;
static Ecore_Evas *ecore_evases = NULL;
static Ecore_Event_Handler *ecore_evas_event_handlers[4] = {
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
}
-static const Ecore_Evas_Engine_Func _ecore_quartz_engine_func =
+static Ecore_Evas_Engine_Func _ecore_quartz_engine_func =
{
_ecore_evas_quartz_free,
NULL,
NULL,
NULL,
NULL,
- NULL
+ NULL,
+
+ NULL // render
};
#endif
#include "ecore_evas_private.h"
#include "Ecore_Evas.h"
+// fixme: 1 sdl window only at a time? seems wrong
+
#ifdef BUILD_ECORE_EVAS_SOFTWARE_SDL
/* static char *ecore_evas_default_display = "0"; */
/* static Ecore_List *ecore_evas_input_devices = NULL; */
static int _ecore_evas_init_count = 0;
-#ifndef _WIN32
-static int _ecore_evas_fps_debug = 0;
-#endif /* _WIN32 */
-static Ecore_Evas *ecore_evases = NULL;
+
+static Ecore_Evas *sdl_ee = NULL;
static Ecore_Event_Handler *ecore_evas_event_handlers[4] = {
NULL, NULL, NULL, NULL
};
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
-static Ecore_Poller *ecore_evas_event = NULL;
static const char *ecore_evas_sdl_default = "EFL SDL";
static Ecore_Evas *
_ecore_evas_sdl_match(void)
{
- return ecore_evases;
+ return sdl_ee;
}
static int
return 0;
}
-static void
+static int
_ecore_evas_render(Ecore_Evas *ee)
{
Eina_List *updates;
evas_render_updates_free(updates);
_ecore_evas_idle_timeout_update(ee);
}
+ return (int)updates;
}
static int
-_ecore_evas_idle_enter(void *data __UNUSED__)
+ecore_evas_sdl_render(Ecore_Evas *ee)
{
- Ecore_Evas *ee;
- double t1 = 0.0;
- double t2 = 0.0;
-
- if (!ecore_evases) return 1;
-#ifndef _WIN32
- if (_ecore_evas_fps_debug)
- {
- t1 = ecore_time_get();
- }
-#endif /* _WIN32 */
- EINA_INLIST_FOREACH(ecore_evases, ee)
- {
+ int rend = 0;
+
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
- Eina_List *ll;
- Ecore_Evas *ee2;
-
- EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
- {
- if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
- _ecore_evas_buffer_render(ee2);
- if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
- }
-#endif
-
- if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
-
- if (ee->prop.avoid_damage) _ecore_evas_render(ee);
- else if ((ee->visible) ||
- ((ee->should_be_visible) && (ee->prop.fullscreen)) ||
- ((ee->should_be_visible) && (ee->prop.override)))
- _ecore_evas_render(ee);
- else
- evas_norender(ee->evas);
-
- if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
- }
-#ifndef _WIN32
- if (_ecore_evas_fps_debug)
+ Eina_List *ll;
+ Ecore_Evas *ee2;
+
+ EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
{
- t2 = ecore_time_get();
- _ecore_evas_fps_debug_rendertime_add(t2 - t1);
+ if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
+ _ecore_evas_buffer_render(ee2);
+ if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
}
-#endif /* _WIN32 */
- return 1;
+#endif
+
+ if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
+
+ if (ee->prop.avoid_damage) rend = _ecore_evas_render(ee);
+ else if ((ee->visible) ||
+ ((ee->should_be_visible) && (ee->prop.fullscreen)) ||
+ ((ee->should_be_visible) && (ee->prop.override)))
+ rend = _ecore_evas_render(ee);
+ else
+ evas_norender(ee->evas);
+
+ if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
+ return rend;
}
static int
_ecore_evas_sdl_event(void *data __UNUSED__)
{
ecore_sdl_feed_events();
-
return 1;
}
#ifndef _WIN32
if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
#endif /* _WIN32 */
- ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL);
+ // this is pretty bad: poller? and set poll time? pol time is meant to be
+ // adjustable for things like polling battery state, or amoutn of spare
+ // memory etc.
+ //
ecore_evas_event = ecore_poller_add(ECORE_POLLER_CORE, 1, _ecore_evas_sdl_event, NULL);
ecore_poller_poll_interval_set(ECORE_POLLER_CORE, 0.006);
#ifndef _WIN32
{
int i;
- while (ecore_evases) _ecore_evas_free(ecore_evases);
-
for (i = 0; i < sizeof (ecore_evas_event_handlers) / sizeof (Ecore_Event_Handler*); i++)
ecore_event_handler_del(ecore_evas_event_handlers[i]);
ecore_event_evas_shutdown();
- ecore_idle_enterer_del(ecore_evas_idle_enterer);
- ecore_evas_idle_enterer = NULL;
ecore_poller_del(ecore_evas_event);
ecore_evas_event = NULL;
#ifndef _WIN32
static void
_ecore_evas_sdl_free(Ecore_Evas *ee)
{
- ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ if (sdl_ee == ee) sdl_ee = NULL;
+
ecore_event_window_unregister(0);
_ecore_evas_sdl_shutdown();
ecore_sdl_shutdown();
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
}
-static const Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
+static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
{
_ecore_evas_sdl_free,
NULL,
NULL,
NULL,
NULL,
- NULL
+ NULL,
+
+ NULL // render
};
static Ecore_Evas*
SDL_ShowCursor(SDL_DISABLE);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_sdl_render;
+ _ecore_evas_register(ee);
+
+ sdl_ee = ee;
+
return ee;
}
#endif
#define ECORE_EVAS_EVENT_COUNT 8
static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
-static Ecore_Evas *ecore_evases = NULL;
static int _ecore_evas_win32_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event);
/* Private functions */
-static void
+static int
_ecore_evas_win32_render(Ecore_Evas *ee)
{
- Eina_List *updates;
+ int rend = 0;
+ Eina_List *updates = NULL;
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
Eina_List *ll;
Ecore_Evas *ee2;
}
else
evas_norender(ee->evas);
+ if (updates) rend = 1;
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
-}
-
-static int
-_ecore_evas_win32_idle_enter(void *data __UNUSED__)
-{
- Ecore_Evas *ee;
- double t1 = 0.0;
- double t2 = 0.0;
-
- if (!ecore_evases) return 1;
- if (_ecore_evas_fps_debug)
- {
- t1 = ecore_time_get();
- }
- EINA_INLIST_FOREACH(ecore_evases, ee)
- _ecore_evas_win32_render(ee);
-
- /* ecore_x_flush(); */
- if (_ecore_evas_fps_debug)
- {
- t2 = ecore_time_get();
-/* _ecore_evas_fps_debug_rendertime_add(t2 - t1); */
- }
- return 1;
+ return rend;
}
static int
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1)
return _ecore_evas_init_count;
-
- if (getenv("ECORE_EVAS_FPS_DEBUG"))
- _ecore_evas_fps_debug = 1;
-
- ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_win32_idle_enter, NULL);
-
+
ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_WIN32_EVENT_MOUSE_IN, _ecore_evas_win32_event_mouse_in, NULL);
ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_WIN32_EVENT_MOUSE_OUT, _ecore_evas_win32_event_mouse_out, NULL);
ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_DAMAGE, _ecore_evas_win32_event_window_damage, NULL);
{
int i;
- while (ecore_evases) _ecore_evas_free(ecore_evases);
for (i = 0; i < ECORE_EVAS_EVENT_COUNT; i++)
ecore_event_handler_del(ecore_evas_event_handlers[i]);
- ecore_idle_enterer_del(ecore_evas_idle_enterer);
- ecore_evas_idle_enterer = NULL;
ecore_event_evas_shutdown();
}
ecore_win32_window_free((struct _Ecore_Win32_Window *)ee->prop.window);
ecore_event_window_unregister(ee->prop.window);
- ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
_ecore_evas_win32_shutdown();
ecore_win32_shutdown();
}
}
-static const Ecore_Evas_Engine_Func _ecore_win32_engine_func =
+static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
{
_ecore_evas_win32_free,
NULL,
NULL, /* _ecore_evas_x_withdrawn_set */
NULL, /* _ecore_evas_x_sticky_set */
NULL, /* _ecore_evas_x_ignore_events_set */
- NULL /* _ecore_evas_x_alpha_set */
+ NULL, /* _ecore_evas_x_alpha_set */
+
+ NULL // render
};
#endif /* BUILD_ECORE_EVAS_WIN32 */
return NULL;
}
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_win32_render;
+ _ecore_evas_register(ee);
ecore_event_window_register(ee->prop.window, ee, ee->evas, _ecore_evas_mouse_move_process);
-
+
return ee;
}
#define ECORE_EVAS_EVENT_COUNT 7
static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
-static Ecore_Evas *ecore_evases = NULL;
static int _ecore_evas_wince_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event);
/* Private functions */
-static void
+static int
_ecore_evas_wince_render(Ecore_Evas *ee)
{
+ int rend = 0;
Eina_List *updates = NULL;
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
Eina_List *ll;
}
else
evas_norender(ee->evas);
+ if (updates) rend = 1;
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
-}
-
-static int
-_ecore_evas_wince_idle_enter(void *data __UNUSED__)
-{
- Ecore_Evas *ee;
- double t1 = 0.0;
- double t2 = 0.0;
-
- if (!ecore_evases) return 1;
- if (_ecore_evas_fps_debug)
- {
- t1 = ecore_time_get();
- }
- EINA_INLIST_FOREACH(ecore_evases, ee)
- _ecore_evas_wince_render(ee);
-
- if (_ecore_evas_fps_debug)
- {
- t2 = ecore_time_get();
- _ecore_evas_fps_debug_rendertime_add(t2 - t1);
- }
- return 1;
+ return rend;
}
static int
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1)
return _ecore_evas_init_count;
-
- if (getenv("ECORE_EVAS_FPS_DEBUG"))
- _ecore_evas_fps_debug = 1;
-
- ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_wince_idle_enter, NULL);
-
+
ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_WINCE_EVENT_MOUSE_IN, _ecore_evas_wince_event_mouse_in, NULL);
ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_WINCE_EVENT_MOUSE_OUT, _ecore_evas_wince_event_mouse_out, NULL);
ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_WINCE_EVENT_WINDOW_DAMAGE, _ecore_evas_wince_event_window_damage, NULL);
ecore_evas_event_handlers[5] = ecore_event_handler_add(ECORE_WINCE_EVENT_WINDOW_HIDE, _ecore_evas_wince_event_window_hide, NULL);
ecore_evas_event_handlers[6] = ecore_event_handler_add(ECORE_WINCE_EVENT_WINDOW_DELETE_REQUEST, _ecore_evas_wince_event_window_delete_request, NULL);
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
-
ecore_event_evas_init();
return _ecore_evas_init_count;
}
{
int i;
- while (ecore_evases) _ecore_evas_free(ecore_evases);
for (i = 0; i < ECORE_EVAS_EVENT_COUNT; i++)
ecore_event_handler_del(ecore_evas_event_handlers[i]);
- ecore_idle_enterer_del(ecore_evas_idle_enterer);
- ecore_evas_idle_enterer = NULL;
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
ecore_event_evas_shutdown();
}
}
}
-static const Ecore_Evas_Engine_Func _ecore_wince_engine_func =
+static Ecore_Evas_Engine_Func _ecore_wince_engine_func =
{
_ecore_evas_wince_free,
NULL,
NULL, /* _ecore_evas_x_withdrawn_set */
NULL, /* _ecore_evas_x_sticky_set */
NULL, /* _ecore_evas_x_ignore_events_set */
- NULL /* _ecore_evas_x_alpha_set */
+ NULL, /* _ecore_evas_x_alpha_set */
+
+ NULL // render
};
/* API */
ecore_wince_window_resume_set((Ecore_WinCE_Window *)ee->prop.window, einfo->func.resume);
}
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_wince_render;
+ _ecore_evas_register(ee);
ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process);
return ee;
#ifdef BUILD_ECORE_EVAS_X11
static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
-
-static Ecore_Evas *ecore_evases = NULL;
static Ecore_Event_Handler *ecore_evas_event_handlers[12];
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
#ifdef HAVE_ECORE_X_XCB
static xcb_visualtype_t *
}
static int
-_ecore_evas_x_idle_enter(void *data __UNUSED__)
-{
- Ecore_Evas *ee;
- double t1 = 0.0;
- double t2 = 0.0;
- int rend = 0;
-
- if (!ecore_evases) return 1;
- if (_ecore_evas_fps_debug)
- {
- t1 = ecore_time_get();
- }
- EINA_INLIST_FOREACH(ecore_evases, ee)
- rend |= _ecore_evas_x_render(ee);
- ecore_x_flush();
- if (_ecore_evas_fps_debug)
- {
- t2 = ecore_time_get();
- if (rend)
- _ecore_evas_fps_debug_rendertime_add(t2 - t1);
- }
- return 1;
-}
-
-static int
_ecore_evas_x_init(void)
{
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
- if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
- ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_x_idle_enter, NULL);
ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_IN, _ecore_evas_x_event_mouse_in, NULL);
ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_OUT, _ecore_evas_x_event_mouse_out, NULL);
ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _ecore_evas_x_event_window_focus_in, NULL);
ecore_evas_event_handlers[10] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _ecore_evas_x_event_property_change, NULL);
ecore_evas_event_handlers[11] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, _ecore_evas_x_event_visibility_change, NULL);
ecore_event_evas_init();
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
return _ecore_evas_init_count;
}
ee->engine.x.mask = 0;
ee->engine.x.gc = 0;
ee->engine.x.damages = NULL;
- ecore_event_window_unregister(ee->prop.window);
+ ecore_event_window_unregister(ee->prop.window);
while (ee->engine.x.win_extra)
{
Ecore_X_Window *winp;
ecore_event_window_unregister(*winp);
free(winp);
}
- ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
_ecore_evas_x_shutdown();
ecore_x_shutdown();
}
{
unsigned int i;
- while (ecore_evases) _ecore_evas_free(ecore_evases);
for (i = 0; i < sizeof(ecore_evas_event_handlers) / sizeof(Ecore_Event_Handler*); i++)
ecore_event_handler_del(ecore_evas_event_handlers[i]);
- ecore_idle_enterer_del(ecore_evas_idle_enterer);
- ecore_evas_idle_enterer = NULL;
- if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
ecore_event_evas_shutdown();
}
if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
return _ecore_evas_init_count;
}
-static const Ecore_Evas_Engine_Func _ecore_x_engine_func =
+static Ecore_Evas_Engine_Func _ecore_x_engine_func =
{
_ecore_evas_x_free,
NULL,
_ecore_evas_x_withdrawn_set,
_ecore_evas_x_sticky_set,
_ecore_evas_x_ignore_events_set,
- _ecore_evas_x_alpha_set
+ _ecore_evas_x_alpha_set,
+
+ NULL // render
};
#endif /* BUILD_ECORE_EVAS_X11 */
0 /* window_group */,
0 /* is_urgent */);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_x_render;
+ _ecore_evas_register(ee);
ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
return ee;
}
0 /* window_group */,
0 /* is_urgent */);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_x_render;
+ _ecore_evas_register(ee);
ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
# endif /* HAVE_ECORE_X_XCB */
0 /* window_group */,
0 /* is_urgent */);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_x_render;
+ _ecore_evas_register(ee);
ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
return ee;
}
0 /* window_group */,
0 /* is_urgent */);
- ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+ ee->engine.func->fn_render = _ecore_evas_x_render;
+ _ecore_evas_register(ee);
ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
return ee;
}