summaryrefslogtreecommitdiff
path: root/rfont.c3l/rfont.c3
diff options
context:
space:
mode:
authorandromeda <andromeda@bsd.my.domain>2026-10-24 00:48:05 -0400
committerandromeda <andromeda@bsd.my.domain>2026-10-24 00:48:05 -0400
commiteb0f2cc6373393303c5a4cd83792dd79103b85de (patch)
tree3f4b746ec73ce745f0c65a5666da7293bd7bd907 /rfont.c3l/rfont.c3
parent2e0b6ffcd7c3ddc09daca64993bdc62fc428a175 (diff)
revitalise
Diffstat (limited to 'rfont.c3l/rfont.c3')
-rw-r--r--rfont.c3l/rfont.c3165
1 files changed, 87 insertions, 78 deletions
diff --git a/rfont.c3l/rfont.c3 b/rfont.c3l/rfont.c3
index e3fa1fb..66678fe 100644
--- a/rfont.c3l/rfont.c3
+++ b/rfont.c3l/rfont.c3
@@ -1,11 +1,18 @@
/**
-* Copyright (C) 2026 andromeda
-*
-* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
+ * Copyright (C) 2026 andromeda <andromeda@galaxious.de>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
**/
module rfont;
@@ -13,10 +20,10 @@ module rfont;
const int MAX_GLYPHS = 256;
const int INIT_VERTS = 20 * MAX_GLYPHS;
-alias Texture = usz;
+typedef Texture = usz;
alias Surface = void*;
-struct Render_data
+struct RenderData
{
float* verts;
float* tcoords;
@@ -26,56 +33,45 @@ struct Render_data
usz nelements;
}
-alias Renderer_proc_size = fn usz();
-alias Renderer_proc_initPtr = fn void(void*);
-alias Renderer_proc_create_atlas = fn Texture(void*, uint, uint);
-alias Renderer_proc_free_atlas = fn void(void*, Texture);
-alias Renderer_proc_bitmap_to_atlas = fn void(void*, Texture, uint, uint, uint, char*, float, float, float*, float*);
-alias Renderer_proc_render = fn void(void*, Render_data*);
-alias Renderer_proc_set_framebuffer = fn void(void*, uint, uint);
-alias Renderer_proc_set_color = fn void(void*, float, float, float, float);
-alias Renderer_proc_set_surface = fn void(void*, Surface);
-alias Renderer_proc_freePtr = fn void(void*);
+alias RenderProcSize = fn usz();
+alias RenderProcInitPtr = fn void(void*);
+alias RenderProcCreateAtlas = fn Texture(void*, uint, uint);
+alias RenderProcFreeAtlas = fn void(void*, Texture);
+alias RenderProcBitmapToAtlas = fn void(void*, Texture, uint, uint, uint, char*, float, float, float*, float*);
+alias RenderProcRender = fn void(void*, RenderData*);
+alias RenderProcSetFramebuffer = fn void(void*, uint, uint);
+alias RenderProcSetColor = fn void(void*, float, float, float, float);
+alias RenderProcSetSurface = fn void(void*, Surface);
+alias RenderProcFreePtr = fn void(void*);
-struct Renderer_proc
+struct RendererProc
{
- Renderer_proc_size size;
- Renderer_proc_initPtr initPtr;
- Renderer_proc_create_atlas create_atlas;
- Renderer_proc_free_atlas free_atlas;
- Renderer_proc_bitmap_to_atlas bitmap_to_atlas;
- Renderer_proc_render render;
- Renderer_proc_set_framebuffer set_framebuffer;
- Renderer_proc_set_color set_color;
- Renderer_proc_set_surface set_surface;
- Renderer_proc_freePtr freePtr;
+ RenderProcSize size;
+ RenderProcInitPtr init_ptr;
+ RenderProcCreateAtlas create_atlas;
+ RenderProcFreeAtlas free_atlas;
+ RenderProcBitmapToAtlas bitmap_to_atlas;
+ RenderProcRender render;
+ RenderProcSetFramebuffer set_framebuffer;
+ RenderProcSetColor set_color;
+ RenderProcSetSurface set_surface;
+ RenderProcFreePtr free_ptr;
}
struct Renderer
{
void* ctx;
- Renderer_proc proc;
+ RendererProc proc;
}
-struct Font
-{
- Src* src;
- float fheight;
- float descent;
- float numOfLongHorMetrics;
- float space_adv;
- uint maxHeight;
- Glyph[MAX_GLYPHS] glyphs;
- usz glyph_len;
- Texture atlas;
- usz atlasWidth;
- usz atlasHeight;
- float atlasX;
- float atlasY;
- float[INIT_VERTS * 3] verts;
- float[INIT_VERTS * 2] tcoords;
- ushort[INIT_VERTS * 6] elements;
-}
+extern fn usz Renderer.size(&self) @cname("RFont_renderer_size");
+extern fn Renderer* renderer_init(RendererProc) @cname("RFont_renderer_init");
+extern fn void renderer_initPtr(RendererProc, void*, Renderer*) @cname("RFont_renderer_initPtr");
+extern fn void Renderer.set_framebuffer(&self, uint, uint) @cname("RFont_renderer_set_framebuffer");
+extern fn void Renderer.set_surface(&self, Surface) @cname("RFont_renderer_set_surface");
+extern fn void Renderer.set_color(&self, float, float, float, float) @cname("RFont_renderer_set_color");
+extern fn void Renderer.free(&self) @cname("RFont_renderer_free");
+extern fn void Renderer.free_ptr(&self) @cname("RFont_renderer_freePtr");
struct Glyph
{
@@ -94,34 +90,47 @@ struct Glyph
float advance;
}
-alias Src = void;
+typedef Src = void;
-alias Glyph_fallback_callback = fn Glyph(Renderer*, Font*, uint, usz);
+struct Font
+{
+ Src* src;
+ float fheight;
+ float descent;
+ float num_of_long_hor_metrics;
+ float space_adv;
+ uint max_height;
+ Glyph[MAX_GLYPHS] glyphs;
+ usz glyph_len;
+ Texture atlas;
+ usz atlas_width;
+ usz atlas_height;
+ float atlas_x;
+ float atlas_y;
+ float[INIT_VERTS * 3] verts;
+ float[INIT_VERTS * 2] tcoords;
+ ushort[INIT_VERTS * 6] elements;
+}
extern fn CChar* codepoint_to_utf8(uint) @cname("RFont_codepoint_to_utf8");
-extern fn Font* font_init(Renderer*, ZString, uint, usz, usz) @cname("RFont_font_init");
-extern fn Font* font_init_ptr(Renderer*, ZString, uint, usz, usz, Font*) @cname("RFont_font_init_ptr");
-extern fn Font* font_init_data(Renderer*, char*, uint, usz, usz) @cname("RFont_font_init_data");
-extern fn Font* font_init_data_ptr(Renderer*, char*, uint, usz, usz, Font*) @cname("RFont_font_init_data_ptr");
-extern fn void font_free(Renderer*, Font*) @cname("RFont_font_free");
-extern fn void font_free_ptr(Renderer*, Font*) @cname("RFont_font_free_ptr");
-extern fn Glyph_fallback_callback set_glyph_fallback_callback(Glyph_fallback_callback) @cname("RFont_set_glyph_fallback_callback");
-extern fn Glyph font_add_char(Renderer*, Font*, CChar, usz) @cname("RFont_font_add_char");
-extern fn Glyph font_add_codepoint(Renderer*, Font*, uint, usz) @cname("RFont_font_add_codepoint");
-extern fn Glyph font_add_codepoint_ex(Renderer*, Font*, uint, usz, char) @cname("RFont_font_add_codepoint_ex");
-extern fn void font_add_string(Renderer*, Font*, ZString, usz*, usz) @cname("RFont_font_add_string");
-extern fn void font_add_string_len(Renderer*, Font*, ZString, usz, usz*, usz) @cname("RFont_font_add_string_len");
-extern fn void text_area(Renderer*, Font*, ZString, uint, uint*, uint*) @cname("RFont_text_area");
-extern fn void text_area_spacing(Renderer*, Font*, ZString, float, uint, uint*, uint*) @cname("RFont_text_area_spacing");
-extern fn void text_area_len(Renderer*, Font*, ZString, usz, uint, usz, float, uint*, uint*) @cname("RFont_text_area_len");
-extern fn void draw_text(Renderer*, Font*, ZString, float, float, uint) @cname("RFont_draw_text");
-extern fn void draw_text_spacing(Renderer*, Font*, ZString, float, float, uint, float) @cname("RFont_draw_text_spacing");
-extern fn void draw_text_len(Renderer*, Font*, ZString, usz, float, float, uint, float) @cname("RFont_draw_text_len");
-extern fn usz renderer_size(Renderer*) @cname("RFont_renderer_size");
-extern fn Renderer* renderer_init(Renderer_proc) @cname("RFont_renderer_init");
-extern fn void renderer_initPtr(Renderer_proc, void*, Renderer*) @cname("RFont_renderer_initPtr");
-extern fn void renderer_set_framebuffer(Renderer*, uint, uint) @cname("RFont_renderer_set_framebuffer");
-extern fn void renderer_set_surface(Renderer*, Surface) @cname("RFont_renderer_set_surface");
-extern fn void renderer_set_color(Renderer*, float, float, float, float) @cname("RFont_renderer_set_color");
-extern fn void renderer_free(Renderer*) @cname("RFont_renderer_free");
-extern fn void renderer_freePtr(Renderer*) @cname("RFont_renderer_freePtr");
+extern fn Font* Renderer.font_init(&self, ZString, uint, usz, usz) @cname("RFont_font_init");
+extern fn Font* Renderer.font_init_ptr(&self, ZString, uint, usz, usz, Font*) @cname("RFont_font_init_ptr");
+extern fn Font* Renderer.font_init_data(&self, char*, uint, usz, usz) @cname("RFont_font_init_data");
+extern fn Font* Renderer.font_init_data_ptr(&self, char*, uint, usz, usz, Font*) @cname("RFont_font_init_data_ptr");
+extern fn void Renderer.font_free(&self, Font*) @cname("RFont_font_free");
+extern fn void Renderer.font_free_ptr(&self, Font*) @cname("RFont_font_free_ptr");
+
+alias GlyphFallbackCallback = fn Glyph(Renderer*, Font*, uint, usz);
+
+extern fn GlyphFallbackCallback set_glyph_fallback_callback(GlyphFallbackCallback) @cname("RFont_set_glyph_fallback_callback");
+extern fn Glyph Renderer.add_char(&self, Font*, CChar, usz) @cname("RFont_font_add_char");
+extern fn Glyph Renderer.add_codepoint(&self, Font*, uint, usz) @cname("RFont_font_add_codepoint");
+extern fn Glyph Renderer.add_codepoint_ex(&self, Font*, uint, usz, char) @cname("RFont_font_add_codepoint_ex");
+extern fn void Renderer.add_string(&self, Font*, ZString, usz*, usz) @cname("RFont_font_add_string");
+extern fn void Renderer.add_string_len(&self, Font*, ZString, usz, usz*, usz) @cname("RFont_font_add_string_len");
+extern fn void Renderer.area(&self, Font*, ZString, uint, uint*, uint*) @cname("RFont_text_area");
+extern fn void Renderer.area_spacing(&self, Font*, ZString, float, uint, uint*, uint*) @cname("RFont_text_area_spacing");
+extern fn void Renderer.area_len(&self, Font*, ZString, usz, uint, usz, float, uint*, uint*) @cname("RFont_text_area_len");
+extern fn void Renderer.draw_text(&self, Font*, ZString, float, float, uint) @cname("RFont_draw_text");
+extern fn void Renderer.draw_text_spacing(&self, Font*, ZString, float, float, uint, float) @cname("RFont_draw_text_spacing");
+extern fn void Renderer.draw_text_len(&self, Font*, ZString, usz, float, float, uint, float) @cname("RFont_draw_text_len");