[core] completely nuke the event api
This commit is contained in:
parent
fe4b533f72
commit
6b939e44ee
19
src/ax.h
19
src/ax.h
|
@ -40,25 +40,6 @@ int ax_select_theme(struct ax_ctxt* ax, struct ax_theme* thm);
|
||||||
#define AX_ERR_THEME_LOADING 1
|
#define AX_ERR_THEME_LOADING 1
|
||||||
#define AX_ERR_THEME_INVALID 2
|
#define AX_ERR_THEME_INVALID 2
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
|
||||||
* Events
|
|
||||||
* -------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
enum ax_evt_type {
|
|
||||||
AX_EVT_THEME_LOADED = 0,
|
|
||||||
AX_EVT__COUNT,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ax_evt {
|
|
||||||
enum ax_evt_type ty;
|
|
||||||
union {
|
|
||||||
struct ax_theme* theme;
|
|
||||||
} arg;
|
|
||||||
};
|
|
||||||
|
|
||||||
void ax_wait_evt_avail(struct ax_ctxt* ax);
|
|
||||||
bool ax_poll_evt(struct ax_ctxt* ax, struct ax_evt* out_evt);
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Windows
|
* Windows
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
|
@ -21,11 +21,6 @@ struct ax_ctxt {
|
||||||
struct rgn err_rgn;
|
struct rgn err_rgn;
|
||||||
const char* err;
|
const char* err;
|
||||||
|
|
||||||
// events
|
|
||||||
struct rgn evts_rgn;
|
|
||||||
struct ax_evt_list* evts;
|
|
||||||
struct msgq* inbox;
|
|
||||||
|
|
||||||
// backend
|
// backend
|
||||||
pthread_t bac_thid;
|
pthread_t bac_thid;
|
||||||
struct ax_backend* bac;
|
struct ax_backend* bac;
|
||||||
|
|
|
@ -58,11 +58,6 @@ void ax__ctxt_init(struct ax_ctxt* ax, struct rgn* init_rgn)
|
||||||
rgn_pin(init_rgn, &ax->err_rgn, (void*) rgn_cleanup);
|
rgn_pin(init_rgn, &ax->err_rgn, (void*) rgn_cleanup);
|
||||||
ax->err = "";
|
ax->err = "";
|
||||||
|
|
||||||
rgn_init(&ax->evts_rgn, SMALL);
|
|
||||||
rgn_pin(init_rgn, &ax->evts_rgn, (void*) rgn_cleanup);
|
|
||||||
ax->evts = NULL;
|
|
||||||
ax->inbox = msgq_new(init_rgn);
|
|
||||||
|
|
||||||
rgn_init(&ax->thmb_rgn, THEME_BUILDER_DESIRED_REGION_SIZE);
|
rgn_init(&ax->thmb_rgn, THEME_BUILDER_DESIRED_REGION_SIZE);
|
||||||
rgn_pin(init_rgn, &ax->thmb_rgn, (void*) rgn_cleanup);
|
rgn_pin(init_rgn, &ax->thmb_rgn, (void*) rgn_cleanup);
|
||||||
ax->thmb = NULL;
|
ax->thmb = NULL;
|
||||||
|
@ -117,15 +112,20 @@ void ax_begin_theme(struct ax_ctxt* ax)
|
||||||
void ax_end_theme(struct ax_ctxt* ax, struct ax_theme** out_thm)
|
void ax_end_theme(struct ax_ctxt* ax, struct ax_theme** out_thm)
|
||||||
{
|
{
|
||||||
ASSERT(ax->thmb != NULL, "`ax_end_theme' called while not building a theme");
|
ASSERT(ax->thmb != NULL, "`ax_end_theme' called while not building a theme");
|
||||||
struct ax_theme* thm;
|
|
||||||
ax__theme_builder_finish(ax->thmb, ax->init_rgn, &thm);
|
struct ax_theme* thm = ax__theme_builder_finish(ax->thmb, ax->init_rgn);
|
||||||
ax__theme_request_load(thm,
|
|
||||||
ax__backend_msgq(ax->bac),
|
|
||||||
ax->inbox);
|
|
||||||
rgn_clear(&ax->thmb_rgn);
|
rgn_clear(&ax->thmb_rgn);
|
||||||
|
|
||||||
if (out_thm != NULL) {
|
if (out_thm != NULL) {
|
||||||
*out_thm = thm;
|
*out_thm = thm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct msgq* callback;
|
||||||
|
UNIMPLEMENTED();
|
||||||
|
|
||||||
|
ax__theme_request_load(thm,
|
||||||
|
ax__backend_msgq(ax->bac),
|
||||||
|
callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ax_set_theme_color(
|
void ax_set_theme_color(
|
||||||
|
@ -177,69 +177,6 @@ int ax_select_theme(struct ax_ctxt* ax, struct ax_theme* thm)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
|
||||||
* API functions :: events
|
|
||||||
* -------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
struct ax_evt_list {
|
|
||||||
struct ax_evt_list* next;
|
|
||||||
struct ax_evt e;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct ax_evt* push_evt(struct ax_ctxt* ax)
|
|
||||||
{
|
|
||||||
struct ax_evt_list* l =
|
|
||||||
ralloc_typed(&ax->evts_rgn, struct ax_evt_list, 1);
|
|
||||||
l->next = ax->evts;
|
|
||||||
ax->evts = l;
|
|
||||||
return &l->e;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct ax_evt* pop_evt(struct ax_ctxt* ax)
|
|
||||||
{
|
|
||||||
struct ax_evt_list* l = ax->evts;
|
|
||||||
if (l == NULL) {
|
|
||||||
rgn_clear(&ax->evts_rgn);
|
|
||||||
return NULL;
|
|
||||||
} else {
|
|
||||||
ax->evts = l->next;
|
|
||||||
return &l->e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ax_wait_evt_avail(struct ax_ctxt* ax)
|
|
||||||
{
|
|
||||||
msgq_begin_recv_and_wait(ax->inbox);
|
|
||||||
MSGQ_RECV_ALL(ax->inbox) {
|
|
||||||
ON(ax_msg_theme_loaded,
|
|
||||||
{
|
|
||||||
struct ax_evt* e = push_evt(ax);
|
|
||||||
e->ty = AX_EVT_THEME_LOADED;
|
|
||||||
e->arg.theme = m.theme;
|
|
||||||
break;
|
|
||||||
});
|
|
||||||
|
|
||||||
default:
|
|
||||||
ax_log(ax, "Got some weird message");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
msgq_end_recv(ax->inbox);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ax_poll_evt(struct ax_ctxt* ax, struct ax_evt* out_evt)
|
|
||||||
{
|
|
||||||
struct ax_evt* e = pop_evt(ax);
|
|
||||||
if (e == NULL) {
|
|
||||||
ax_log(ax, "event queue now empty");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_evt != NULL) {
|
|
||||||
*out_evt = *e;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Backend worker thread
|
* Backend worker thread
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
|
@ -73,26 +73,17 @@ void ax__theme_set_font(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ax__theme_builder_finish(
|
struct ax_theme* ax__theme_builder_finish(
|
||||||
struct ax_theme_builder* thmb,
|
struct ax_theme_builder* thmb,
|
||||||
struct rgn* dst_rgn,
|
struct rgn* dst_rgn)
|
||||||
struct ax_theme** out_thm)
|
|
||||||
{
|
{
|
||||||
if (out_thm == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ax_theme* thm = ralloc_typed(dst_rgn, struct ax_theme, 1);
|
struct ax_theme* thm = ralloc_typed(dst_rgn, struct ax_theme, 1);
|
||||||
*out_thm = thm;
|
|
||||||
|
|
||||||
if (thmb->err != NULL) {
|
if (thmb->err != NULL) {
|
||||||
thm->err = rstrdup(dst_rgn, thmb->err);
|
thm->err = rstrdup(dst_rgn, thmb->err);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* dflt_font_path = (thmb->dflt_font_path == NULL) ?
|
const char* dflt_font_path = (thmb->dflt_font_path == NULL) ?
|
||||||
default_font_path(dst_rgn) :
|
default_font_path(dst_rgn) :
|
||||||
rstrdup(dst_rgn, thmb->dflt_font_path);
|
rstrdup(dst_rgn, thmb->dflt_font_path);
|
||||||
|
|
||||||
for (size_t i = 0; i < AX_FONT__COUNT; i++) {
|
for (size_t i = 0; i < AX_FONT__COUNT; i++) {
|
||||||
thm->color[i] = thmb->color[i];
|
thm->color[i] = thmb->color[i];
|
||||||
thm->font_size[i] = thmb->font_size[i];
|
thm->font_size[i] = thmb->font_size[i];
|
||||||
|
@ -100,9 +91,9 @@ void ax__theme_builder_finish(
|
||||||
dflt_font_path :
|
dflt_font_path :
|
||||||
rstrdup(dst_rgn, thm->font_path[i]);
|
rstrdup(dst_rgn, thm->font_path[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_init(&thm->handles_mx, NULL);
|
pthread_mutex_init(&thm->handles_mx, NULL);
|
||||||
rgn_pin(dst_rgn, thm, (void*) pthread_mutex_destroy);
|
rgn_pin(dst_rgn, thm, (void*) pthread_mutex_destroy);
|
||||||
|
return thm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
|
|
|
@ -71,10 +71,9 @@ void ax__theme_set_font(
|
||||||
enum ax_font_cat cat,
|
enum ax_font_cat cat,
|
||||||
const char* path, size_t size);
|
const char* path, size_t size);
|
||||||
|
|
||||||
void ax__theme_builder_finish(
|
struct ax_theme* ax__theme_builder_finish(
|
||||||
struct ax_theme_builder* thmb,
|
struct ax_theme_builder* thmb,
|
||||||
struct rgn* dst_rgn,
|
struct rgn* dst_rgn);
|
||||||
struct ax_theme** out_thm);
|
|
||||||
|
|
||||||
static inline int64_t ax__theme_color(
|
static inline int64_t ax__theme_color(
|
||||||
struct ax_theme* thm,
|
struct ax_theme* thm,
|
||||||
|
|
|
@ -40,6 +40,9 @@ int main(void)
|
||||||
ax_set_logger(ax, 0, false);
|
ax_set_logger(ax, 0, false);
|
||||||
|
|
||||||
struct ax_theme* thm = make_example_theme();
|
struct ax_theme* thm = make_example_theme();
|
||||||
|
(void) thm;
|
||||||
|
|
||||||
|
/*
|
||||||
struct ax_evt evt;
|
struct ax_evt evt;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -50,6 +53,7 @@ int main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue