diff options
| -rw-r--r-- | src/text.cc | 37 | ||||
| -rw-r--r-- | src/text.h | 4 | ||||
| -rw-r--r-- | src/wayclock.cc | 15 |
3 files changed, 51 insertions, 5 deletions
diff --git a/src/text.cc b/src/text.cc index 0cd81d6..6753061 100644 --- a/src/text.cc +++ b/src/text.cc @@ -109,4 +109,39 @@ void wayc_font_context_deinit(struct font_context_s* context) { sg_destroy_pipeline(context->pipeline); sg_destroy_sampler(context->sampler); FT_Done_FreeType(context->ft); -}
\ No newline at end of file +} + +enum font_error_e wayc_font_init(struct font_s* font, + struct font_context_s* context, + const char* path, u32 font_size, + u32 atlas_width, u32 atlas_height) { + wayc_notnull(font); + wayc_notnull(context); + memset(font, 0, sizeof(*font)); + bool success = false; + + FT_Face face; + FT_Error fterr = FT_New_Face(context->ft, path, 0, &face); + if (fterr) return FONT_ERROR_LOAD_FACE; + + wayc_defer_cond(FT_Done_Face(face), success, true); + + struct atlas_s atlas; + enum atlas_error_e aterr = + wayc_atlas_init(&atlas, atlas_width, atlas_height, SG_PIXELFORMAT_R8); + if (aterr) return FONT_ERROR_LOAD_FACE; + + font->face = face; + font->font_size = font_size; + font->atlas = atlas; + + success = true; + return FONT_ERROR_NONE; +} + +void wayc_font_deinit(struct font_s* font) { + wayc_notnull(font); + + wayc_atlas_deinit(&font->atlas); + FT_Done_Face(font->face); +} @@ -45,4 +45,6 @@ struct font_s { enum font_error_e wayc_font_init(struct font_s* font, struct font_context_s* context, - const char* path, u32 font_size);
\ No newline at end of file + const char* path, u32 font_size, + u32 atlas_width, u32 atlas_height); +void wayc_font_deinit(struct font_s* font); diff --git a/src/wayclock.cc b/src/wayclock.cc index edc8c2f..bd8491e 100644 --- a/src/wayclock.cc +++ b/src/wayclock.cc @@ -2,6 +2,7 @@ #include "events.h" #include "graphics.h" +#include "text.h" #include "utils.h" #include "window.h" @@ -60,13 +61,11 @@ int main() { struct eventloop_s loop; if (wayc_eventloop_init(&loop, wayc_handle) != EVENTLOOP_ERROR_NONE) wayc_panic("Failed to initialize event loop"); - wayc_defer(wayc_eventloop_deinit(&loop)); struct graphics_s graphics; if (wayc_graphics_init(&graphics, &loop.state) != GRAPHICS_ERROR_NONE) wayc_panic("Failed to initialize graphics"); - wayc_defer(wayc_graphics_deinit(&graphics)); struct window_s window; @@ -86,12 +85,22 @@ int main() { WAYC_APP_HEIGHT, WAYC_CLEAR_COLOR) != RENDERER_ERROR_NONE) wayc_panic("Failed to initialize renderer"); - wayc_defer(wayc_renderer_deinit(&renderer)); wayc_renderer_use(&renderer); wayc_window_redraw(&window, &loop); + struct font_context_s font_context; + if (wayc_font_context_init(&font_context) != FONT_CONTEXT_ERROR_NONE) + wayc_panic("Failed to initialize font context"); + wayc_defer(wayc_font_context_deinit(&font_context)); + + struct font_s font; + if (wayc_font_init(&font, &font_context, WAYC_FONT, WAYC_FONT_SIZE, + WAYC_ATLAS_WIDTH, WAYC_ATLAS_HEIGHT) != FONT_ERROR_NONE) + wayc_panic("Failed to initialize font"); + wayc_defer(wayc_font_deinit(&font)); + struct app_s app = {&renderer}; while (wayc_eventloop_running(&loop)) { |
