diff --git a/src/ctxt.h b/src/ctxt.h index 3b586b9..550bafd 100644 --- a/src/ctxt.h +++ b/src/ctxt.h @@ -13,9 +13,9 @@ struct ax_ctxt { char* err; // theme - struct ax_theme* sel_theme; - struct ax_theme_builder* thmb0; + struct rgn thmb_rgn; struct ax_theme_builder* thmb; + struct ax_theme* sel_theme; }; void ax__ctxt_init(struct ax_ctxt* ax, struct rgn* self_rgn); diff --git a/src/ctxt/ctxt.c b/src/ctxt/ctxt.c index cb73fb7..50605b1 100644 --- a/src/ctxt/ctxt.c +++ b/src/ctxt/ctxt.c @@ -41,17 +41,14 @@ void ax__ctxt_init(struct ax_ctxt* ax, struct rgn* init_rgn) rgn_init(&ax->err_rgn, SMALL); ax->err = ""; - ax->sel_theme = NULL; - ax->thmb0 = ralloc_typed(init_rgn, struct ax_theme_builder, 1); + rgn_init(&ax->thmb_rgn, THEME_BUILDER_DESIRED_REGION_SIZE); ax->thmb = NULL; + ax->sel_theme = NULL; } void ax__ctxt_cleanup(struct ax_ctxt* ax) { - if (ax->thmb != NULL) { - ax__theme_builder_cleanup(ax->thmb); - } - + rgn_cleanup(&ax->thmb_rgn); rgn_cleanup(&ax->err_rgn); } @@ -61,21 +58,15 @@ void ax__ctxt_cleanup(struct ax_ctxt* ax) void ax_begin_theme(struct ax_ctxt* ax) { - if (ax->thmb != NULL) { - ax__theme_builder_cleanup(ax->thmb); - } - - ax->thmb = ax->thmb0; - ax__theme_builder_init(ax->thmb); + rgn_clear(&ax->thmb_rgn); + ax->thmb = ralloc_typed(&ax->thmb_rgn, struct ax_theme_builder, 1); + ax__theme_builder_init(ax->thmb, &ax->thmb_rgn); } int 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"); - ax__theme_builder_finish(ax->thmb, ax->init_rgn, out_thm); - ax__theme_builder_cleanup(ax->thmb); - ax->thmb = NULL; return 0; } diff --git a/src/ctxt/theme.c b/src/ctxt/theme.c index ad1479c..0ecd288 100644 --- a/src/ctxt/theme.c +++ b/src/ctxt/theme.c @@ -1,7 +1,6 @@ #include "theme.h" #include "../util.h" - -#define THMB_RGN_SIZE MEDIUM +#include "../util/region.h" static void theme_init(struct ax_theme* thm) { @@ -28,14 +27,11 @@ static void theme_init(struct ax_theme* thm) thm->font_size[AX_FONT_BUTTON] = 14; } -void ax__theme_builder_init(struct ax_theme_builder* thmb) +void ax__theme_builder_init(struct ax_theme_builder* thmb, struct rgn* rgn) { - theme_init(&thmb->thm); + thmb->rgn = rgn; thmb->dflt_font_path = NULL; -} - -void ax__theme_builder_cleanup(struct ax_theme_builder* thmb) -{ + theme_init(&thmb->thm); } void ax__theme_set_color( diff --git a/src/ctxt/theme.h b/src/ctxt/theme.h index 15e8109..c4e9b68 100644 --- a/src/ctxt/theme.h +++ b/src/ctxt/theme.h @@ -1,7 +1,10 @@ #pragma once #include -#include "../util/region.h" +#include + +struct rgn; +#define THEME_BUILDER_DESIRED_REGION_SIZE (16*1024) enum ax_color_cat { AX_COLOR_BACKGROUND = 0, @@ -35,16 +38,17 @@ struct ax_theme { }; struct ax_theme_builder { - struct ax_theme thm; + struct rgn* rgn; const char* dflt_font_path; + struct ax_theme thm; }; int ax__string_to_color_cat(const char* str, enum ax_color_cat* out_cat); int ax__string_to_font_cat(const char* str, enum ax_font_cat* out_cat); //void ax__color_cat_to_string(enum ax_color_cat cat, const char** out_str); -void ax__theme_builder_init(struct ax_theme_builder* thmb); -void ax__theme_builder_cleanup(struct ax_theme_builder* thmb); +void ax__theme_builder_init( + struct ax_theme_builder* thmb, struct rgn* rgn); void ax__theme_set_color( struct ax_theme_builder* thmb,