From dd7595a3475407a7fa96a97393bae8c5220e8762 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Wed, 4 Jan 2012 18:41:13 +1000 Subject: Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje. Note that embryo wont be used, but I'm not sure yet if you can build edje without it. --- libraries/evas/src/lib/file/evas_module.h | 94 +++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 libraries/evas/src/lib/file/evas_module.h (limited to 'libraries/evas/src/lib/file/evas_module.h') diff --git a/libraries/evas/src/lib/file/evas_module.h b/libraries/evas/src/lib/file/evas_module.h new file mode 100644 index 0000000..8699b6b --- /dev/null +++ b/libraries/evas/src/lib/file/evas_module.h @@ -0,0 +1,94 @@ +#ifndef _EVAS_MODULE_H +#define _EVAS_MODULE_H + + +/* the module api version */ +#define EVAS_MODULE_API_VERSION 2 + + +/* the module types */ +typedef enum _Evas_Module_Type +{ + EVAS_MODULE_TYPE_ENGINE = 0, + EVAS_MODULE_TYPE_IMAGE_LOADER = 1, + EVAS_MODULE_TYPE_IMAGE_SAVER = 2, + EVAS_MODULE_TYPE_OBJECT = 3 +} Evas_Module_Type; + + +typedef struct _Evas_Module_Api Evas_Module_Api; +typedef struct _Evas_Module Evas_Module; +typedef struct _Evas_Module_Path Evas_Module_Path; +typedef struct _Evas_Module_Engine Evas_Module_Engine; +typedef struct _Evas_Module_Public Evas_Module_Public; + +/* the module api structure, all modules should define this struct */ +struct _Evas_Module_Api +{ + int version; + const char *name; + const char *author; + + struct + { + int (*open)(Evas_Module *); + void (*close)(Evas_Module *); + } func; +}; + +/* the module structure */ +struct _Evas_Module +{ + const Evas_Module_Api *definition; + + void *functions; /* this are the functions exported by the module */ + int id_engine; /* some internal data for the module i.e the id for engines */ + + int ref; /* how many refs */ + int last_used; /* the cycle count when it was last used */ + + LK(lock); + + unsigned char loaded : 1; +}; + + +/* the internals of the module api use this struct to reference a path with a module type + * instead of deduce the type from the path. + * */ +struct _Evas_Module_Path +{ + Evas_Module_Type type; + char *path; +}; + +void evas_module_paths_init (void); +void evas_module_init (void); +Evas_Module *evas_module_find_type (Evas_Module_Type type, const char *name); +Evas_Module *evas_module_engine_get(int render_method); +void evas_module_foreach_image_loader(Eina_Hash_Foreach cb, const void *fdata); +int evas_module_load (Evas_Module *em); +void evas_module_unload (Evas_Module *em); +void evas_module_ref (Evas_Module *em); +void evas_module_unref (Evas_Module *em); +void evas_module_use (Evas_Module *em); +void evas_module_clean (void); +void evas_module_shutdown (void); +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); + +#define EVAS_MODULE_DEFINE(Type, Tn, Name) \ + Eina_Bool evas_##Tn##_##Name##_init(void) \ + { \ + return evas_module_register(&evas_modapi, Type); \ + } \ + void evas_##Tn##_##Name##_shutdown(void) \ + { \ + evas_module_unregister(&evas_modapi, Type); \ + } + +#define EVAS_EINA_MODULE_DEFINE(Tn, Name) \ + EINA_MODULE_INIT(evas_##Tn##_##Name##_init); \ + EINA_MODULE_SHUTDOWN(evas_##Tn##_##Name##_shutdown); + +#endif /* _EVAS_MODULE_H */ -- cgit v1.1