95 lines
2.8 KiB
C
95 lines
2.8 KiB
C
#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 */
|