forked from enlightenment/efl
evas: add infrastructure for Evas_Loader to know if what they are working on is still useful.
This commit is contained in:
parent
3fab272906
commit
27a47da15b
|
@ -134,6 +134,7 @@ typedef Efl_Image_Load_Error Evas_Load_Error;
|
||||||
#define EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED EFL_IMAGE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED
|
#define EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED EFL_IMAGE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED
|
||||||
#define EVAS_LOAD_ERROR_CORRUPT_FILE EFL_IMAGE_LOAD_ERROR_CORRUPT_FILE
|
#define EVAS_LOAD_ERROR_CORRUPT_FILE EFL_IMAGE_LOAD_ERROR_CORRUPT_FILE
|
||||||
#define EVAS_LOAD_ERROR_UNKNOWN_FORMAT EFL_IMAGE_LOAD_ERROR_UNKNOWN_FORMAT
|
#define EVAS_LOAD_ERROR_UNKNOWN_FORMAT EFL_IMAGE_LOAD_ERROR_UNKNOWN_FORMAT
|
||||||
|
#define EVAS_LOAD_ERROR_CANCELLED EFL_IMAGE_LOAD_ERROR_CANCELLED
|
||||||
|
|
||||||
typedef Emile_Image_Animated_Loop_Hint Evas_Image_Animated_Loop_Hint;
|
typedef Emile_Image_Animated_Loop_Hint Evas_Image_Animated_Loop_Hint;
|
||||||
|
|
||||||
|
@ -199,6 +200,22 @@ struct _Evas_Image_Load_Func
|
||||||
EAPI Eina_Bool evas_module_register (const Evas_Module_Api *module, Evas_Module_Type type);
|
EAPI Eina_Bool evas_module_register (const Evas_Module_Api *module, Evas_Module_Type type);
|
||||||
EAPI Eina_Bool evas_module_unregister (const Evas_Module_Api *module, Evas_Module_Type type);
|
EAPI Eina_Bool evas_module_unregister (const Evas_Module_Api *module, Evas_Module_Type type);
|
||||||
|
|
||||||
|
EAPI Eina_Bool evas_module_task_cancelled (void);
|
||||||
|
|
||||||
|
#define EVAS_MODULE_TASK_CHECK(Count, Mask, Error, Error_Handler) \
|
||||||
|
do { \
|
||||||
|
Count++; \
|
||||||
|
if ((Count & Mask) == Mask) \
|
||||||
|
{ \
|
||||||
|
Count = 0; \
|
||||||
|
if (evas_module_task_cancelled()) \
|
||||||
|
{ \
|
||||||
|
*Error = EFL_IMAGE_LOAD_ERROR_CANCELLED; \
|
||||||
|
goto Error_Handler; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define EVAS_MODULE_DEFINE(Type, Tn, Name) \
|
#define EVAS_MODULE_DEFINE(Type, Tn, Name) \
|
||||||
Eina_Bool evas_##Tn##_##Name##_init(void) \
|
Eina_Bool evas_##Tn##_##Name##_init(void) \
|
||||||
{ \
|
{ \
|
||||||
|
|
|
@ -28,6 +28,51 @@
|
||||||
#define EVAS_MODULE_NO_VG_SAVERS 0
|
#define EVAS_MODULE_NO_VG_SAVERS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct _Evas_Module_Task Evas_Module_Task;
|
||||||
|
struct _Evas_Module_Task
|
||||||
|
{
|
||||||
|
Eina_Bool (*cancelled)(void *data);
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
static Eina_TLS task = 0;
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
evas_module_task_cancelled(void)
|
||||||
|
{
|
||||||
|
Evas_Module_Task *t;
|
||||||
|
|
||||||
|
t = eina_tls_get(task);
|
||||||
|
if (!t) return EINA_FALSE;
|
||||||
|
|
||||||
|
return t->cancelled(t->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
evas_module_task_register(Eina_Bool (*cancelled)(void *data), void *data)
|
||||||
|
{
|
||||||
|
Evas_Module_Task *t;
|
||||||
|
|
||||||
|
t = malloc(sizeof (Evas_Module_Task));
|
||||||
|
if (!t) return ;
|
||||||
|
|
||||||
|
t->cancelled = cancelled;
|
||||||
|
t->data = data;
|
||||||
|
|
||||||
|
eina_tls_set(task, t);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
evas_module_task_unregister(void)
|
||||||
|
{
|
||||||
|
Evas_Module_Task *t;
|
||||||
|
|
||||||
|
t = eina_tls_get(task);
|
||||||
|
if (!t) return ;
|
||||||
|
|
||||||
|
eina_tls_set(task, NULL);
|
||||||
|
free(t);
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Hash *evas_modules[6] = {
|
static Eina_Hash *evas_modules[6] = {
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -318,6 +363,8 @@ evas_module_init(void)
|
||||||
|
|
||||||
evas_engines = eina_array_new(4);
|
evas_engines = eina_array_new(4);
|
||||||
|
|
||||||
|
eina_tls_cb_new(&task, (Eina_TLS_Delete_Cb) evas_module_task_unregister);
|
||||||
|
|
||||||
for (i = 0; evas_static_module[i].init; ++i)
|
for (i = 0; evas_static_module[i].init; ++i)
|
||||||
evas_static_module[i].init();
|
evas_static_module[i].init();
|
||||||
}
|
}
|
||||||
|
@ -694,6 +741,8 @@ evas_module_shutdown(void)
|
||||||
eina_hash_free(evas_modules[EVAS_MODULE_TYPE_VG_SAVER]);
|
eina_hash_free(evas_modules[EVAS_MODULE_TYPE_VG_SAVER]);
|
||||||
evas_modules[EVAS_MODULE_TYPE_VG_SAVER] = NULL;
|
evas_modules[EVAS_MODULE_TYPE_VG_SAVER] = NULL;
|
||||||
|
|
||||||
|
eina_tls_free(task);
|
||||||
|
|
||||||
EINA_LIST_FREE(evas_module_paths, path)
|
EINA_LIST_FREE(evas_module_paths, path)
|
||||||
free(path);
|
free(path);
|
||||||
|
|
||||||
|
|
|
@ -1956,6 +1956,9 @@ Eina_Bool evas_preload_thread_cancelled_is(Evas_Preload_Pthread *thread);
|
||||||
void _evas_walk(Evas_Public_Data *e_pd);
|
void _evas_walk(Evas_Public_Data *e_pd);
|
||||||
void _evas_unwalk(Evas_Public_Data *e_pd);
|
void _evas_unwalk(Evas_Public_Data *e_pd);
|
||||||
|
|
||||||
|
EAPI void evas_module_task_register(Eina_Bool (*cancelled)(void *data), void *data);
|
||||||
|
EAPI void evas_module_task_unregister(void);
|
||||||
|
|
||||||
// expose for use in engines
|
// expose for use in engines
|
||||||
EAPI int _evas_module_engine_inherit(Evas_Func *funcs, char *name);
|
EAPI int _evas_module_engine_inherit(Evas_Func *funcs, char *name);
|
||||||
EAPI const char *_evas_module_libdir_get(void);
|
EAPI const char *_evas_module_libdir_get(void);
|
||||||
|
|
Loading…
Reference in New Issue