summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/text.cc37
-rw-r--r--src/text.h4
-rw-r--r--src/wayclock.cc15
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);
+}
diff --git a/src/text.h b/src/text.h
index e1a8b3d..d5c8977 100644
--- a/src/text.h
+++ b/src/text.h
@@ -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)) {