aboutsummaryrefslogtreecommitdiff
path: root/include/mgl/graphics/font_char_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/mgl/graphics/font_char_map.h')
-rw-r--r--include/mgl/graphics/font_char_map.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/mgl/graphics/font_char_map.h b/include/mgl/graphics/font_char_map.h
new file mode 100644
index 0000000..1daf4a2
--- /dev/null
+++ b/include/mgl/graphics/font_char_map.h
@@ -0,0 +1,50 @@
+#ifndef MGL_FONT_CHAR_MAP_H
+#define MGL_FONT_CHAR_MAP_H
+
+#include "font_glyph.h"
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+typedef struct mgl_font_char_entry mgl_font_char_entry;
+typedef struct mgl_font_char_map mgl_font_char_map;
+
+struct mgl_font_char_entry {
+ uint32_t key;
+ mgl_font_glyph value;
+ mgl_font_char_entry *next;
+ /* TODO: Remove when fonts copy textures */
+ mgl_vec2i render_offset;
+ /* TODO: Remove when fonts copy textures */
+ bool rendered;
+};
+
+typedef struct {
+ mgl_font_char_map *char_map;
+ size_t index;
+ mgl_font_char_entry *value;
+} mgl_font_char_iterator;
+
+struct mgl_font_char_map {
+ mgl_font_char_entry **entries;
+ size_t size;
+ size_t capacity;
+};
+
+void mgl_font_char_map_init(mgl_font_char_map *self);
+void mgl_font_char_map_deinit(mgl_font_char_map *self);
+
+/*
+ |value| is copied.
+ |inserted_entry| is the newly allocated and inserted entry. the entry wont ever reallocate. may be set to NULL to ignore it.
+*/
+int mgl_font_char_map_insert(mgl_font_char_map *self, uint32_t key, const mgl_font_glyph *value, mgl_font_char_entry **inserted_entry);
+/* The returned value is only valid until the next insert */
+mgl_font_char_entry* mgl_font_char_map_get(const mgl_font_char_map *self, uint32_t key);
+void mgl_font_char_map_clear_rendered(mgl_font_char_map *self);
+
+/* Iterator value is NULL when the end has been reached */
+mgl_font_char_iterator mgl_font_char_map_begin(mgl_font_char_map *self);
+void mgl_font_char_iterator_next(mgl_font_char_iterator *self);
+
+#endif /* MGL_FONT_CHAR_MAP_H */