diff --git a/module.c b/module.c index 7f0a8e6..af66538 100644 --- a/module.c +++ b/module.c @@ -1,6 +1,29 @@ #include "module.h" #include +struct module * +module_common_new(void) +{ + struct module *mod = malloc(sizeof(*mod)); + mod->bar = NULL; + mtx_init(&mod->lock, mtx_plain); + mod->private = NULL; + mod->run = NULL; + mod->destroy = &module_default_destroy; + mod->content = NULL; + mod->begin_expose = &module_default_begin_expose; + mod->expose = &module_default_expose; + mod->end_expose = &module_default_end_expose; + return mod; +} + +void +module_default_destroy(struct module *mod) +{ + mtx_destroy(&mod->lock); + free(mod); +} + struct module_expose_context module_default_begin_expose(const struct module *mod, cairo_t *cr) { diff --git a/module.h b/module.h index 55e4db4..b7a9620 100644 --- a/module.h +++ b/module.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include "particle.h" @@ -21,6 +22,7 @@ struct module_expose_context { struct module { const struct bar *bar; + mtx_t lock; void *private; @@ -35,6 +37,10 @@ struct module { void (*end_expose)(const struct module *mod, struct module_expose_context *ctx); }; +struct module *module_common_new(void); + +void module_default_destroy(struct module *mod); + struct module_expose_context module_default_begin_expose( const struct module *mod, cairo_t *cr);