diff --git a/package/index.html b/package/index.html
index e9e0d69..1a558a7 100644
--- a/package/index.html
+++ b/package/index.html
@@ -150,20 +150,21 @@ const ctx2d = canvas.getContext('2d');
wasm_draw_text: (str, len, x, y, font_str, font_len, font_size, r, g, b, a) => {
ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
ctx2d.fillStyle = `rgba(${r}, ${g}, ${b}, ${a})`;
- ctx2d.textBaseline = "hanging";
+ ctx2d.textBaseline = "top";
ctx2d.fillText(mem.read_cstr(str, len), x, y);
},
wasm_measure_text: (str, len, font_str, font_len, font_size) => {
ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
- ctx2d.textBaseline = "hanging";
+ ctx2d.textBaseline = "top";
const metrics = ctx2d.measureText(mem.read_cstr(str, len));
return metrics.width;
},
- wasm_get_font_height: (font_str, font_len, font_size) => {
- ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
- ctx2d.textBaseline = "hanging";
- return ctx2d.measureText('NothinBelowTheBaseline').actualBoundingBoxDescent;
- },
+ // wasm_get_font_height: (font_str, font_len, font_size) => {
+ // ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
+ // ctx2d.textBaseline = "top";
+ // const v = ctx2d.measureText('NothinBelowTheBaseline');
+ // return v.fontBoundingBoxDescent;
+ // },
wasm_draw_rect: (x, y, w, h, r, g, b, a) => {
ctx2d.beginPath();
ctx2d.rect(x, y, w, h);
diff --git a/src/app/app_wasm.html b/src/app/app_wasm.html
index e9e0d69..1a558a7 100644
--- a/src/app/app_wasm.html
+++ b/src/app/app_wasm.html
@@ -150,20 +150,21 @@ const ctx2d = canvas.getContext('2d');
wasm_draw_text: (str, len, x, y, font_str, font_len, font_size, r, g, b, a) => {
ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
ctx2d.fillStyle = `rgba(${r}, ${g}, ${b}, ${a})`;
- ctx2d.textBaseline = "hanging";
+ ctx2d.textBaseline = "top";
ctx2d.fillText(mem.read_cstr(str, len), x, y);
},
wasm_measure_text: (str, len, font_str, font_len, font_size) => {
ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
- ctx2d.textBaseline = "hanging";
+ ctx2d.textBaseline = "top";
const metrics = ctx2d.measureText(mem.read_cstr(str, len));
return metrics.width;
},
- wasm_get_font_height: (font_str, font_len, font_size) => {
- ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
- ctx2d.textBaseline = "hanging";
- return ctx2d.measureText('NothinBelowTheBaseline').actualBoundingBoxDescent;
- },
+ // wasm_get_font_height: (font_str, font_len, font_size) => {
+ // ctx2d.font = `${font_size}px ${mem.read_cstr(font_str, font_len)}`;
+ // ctx2d.textBaseline = "top";
+ // const v = ctx2d.measureText('NothinBelowTheBaseline');
+ // return v.fontBoundingBoxDescent;
+ // },
wasm_draw_rect: (x, y, w, h, r, g, b, a) => {
ctx2d.beginPath();
ctx2d.rect(x, y, w, h);
diff --git a/src/draw/gfx2d.c b/src/draw/gfx2d.c
deleted file mode 100644
index 263c7a4..0000000
--- a/src/draw/gfx2d.c
+++ /dev/null
@@ -1,146 +0,0 @@
-fn_wasm_import void wasm_clear(void);
-fn_wasm_import void wasm_draw_text(isize str, i32 len, f64 x, f64 y, isize font_str, i32 font_len, i32 font_size, f32 r, f32 g, f32 b, f32 a);
-fn_wasm_import void wasm_draw_rect(f64 x, f64 y, f64 w, f64 h, f32 r, f32 g, f32 b, f32 a);
-fn_wasm_import f64 wasm_measure_text(isize str, i32 len, isize font_str, i32 font_len, i32 font_size);
-fn_wasm_import f64 wasm_get_font_height(isize font_str, i32 font_len, i32 font_size);
-fn_wasm_import void wasm_set_clip(f64 x, f64 y, f64 w, f64 h);
-
-
-// gb_read_only s8_t font_face = s8_const_lit("open_sans_regular");
-gb_read_only s8_t font_face = s8_const_lit("consolas");
-
-fn void set_clip(r2f64_t rect) {
- wasm_set_clip(wasm_dpr * rect.min.x, wasm_dpr * rect.min.y, wasm_dpr * (rect.max.x - rect.min.x), wasm_dpr * (rect.max.y - rect.min.y));
-}
-
-fn f64 get_font_height(void) {
- return wasm_get_font_height((isize) font_face.str, font_face.len, 20*wasm_dpr) / wasm_dpr;
-}
-
-fn f64 measure_text_ex(s8_t string) {
- return wasm_measure_text((isize)string.str, string.len, (isize) font_face.str, font_face.len, 20*wasm_dpr) / wasm_dpr;
-}
-
-fn f64 measure_text(char *str) {
- return measure_text_ex(s8_from_char(str));
-}
-
-fn void draw_text(v2f64_t pos, v4f32_t color, s8_t string) {
- wasm_draw_text((isize)string.str, string.len, wasm_dpr * pos.x, wasm_dpr * pos.y, (isize) font_face.str, font_face.len, 20*wasm_dpr, color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
-}
-
-fn void draw_textf(v2f64_t pos, char *str, ...) {
- char buff[1024];
- va_list args;
- va_start(args, str);
- i32 len = stbsp_vsnprintf(buff, sizeof(buff), str, args);
- va_end(args);
-
- wasm_draw_text((isize)buff, len, wasm_dpr * pos.x, wasm_dpr * pos.y, (isize) font_face.str, font_face.len, 20*wasm_dpr, 0, 0, 0, 1);
-}
-
-fn void draw_rect(r2f64_t rect, v4f32_t color) {
- wasm_draw_rect(wasm_dpr * rect.min.x, wasm_dpr * rect.min.y, wasm_dpr * (rect.max.x - rect.min.x), wasm_dpr * (rect.max.y - rect.min.y), color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
-}
-
-typedef enum {
- gfx_kind_null,
- gfx_kind_clear,
- gfx_kind_draw_rect,
- gfx_kind_draw_text,
- gfx_kind_set_clip,
-} gfx_kind_t;
-
-typedef struct gfx_cmd_t gfx_cmd_t;
-struct gfx_cmd_t {
- gfx_cmd_t *next;
- gfx_kind_t kind;
- r2f64_t rect;
- v4f32_t color;
- s8_t text;
-};
-
-typedef struct gfx_t gfx_t;
-struct gfx_t {
- gfx_cmd_t *first;
- gfx_cmd_t *last;
- app_event_t *ev;
-};
-
-// @todo:
-typedef struct gfx_group_t gfx_group_t;
-struct gfx_group_t {
- gfx_cmd_t *first;
- gfx_cmd_t *last;
-};
-
-void gfx_begin(gfx_t *gfx, app_event_t *ev) {
- gfx->ev = ev;
-}
-
-void gfx_end(gfx_t *gfx) {
- app_event_t *ev = gfx->ev;
- r2f64_t window = (r2f64_t){0, 0, ev->window_size.x, ev->window_size.y};
- for (gfx_cmd_t *cmd = gfx->first; cmd; cmd = cmd->next) {
- if (cmd->kind == gfx_kind_clear) {
- wasm_clear();
- draw_rect(window, cmd->color);
- } else if (cmd->kind == gfx_kind_draw_rect) {
- draw_rect(cmd->rect, cmd->color);
- } else if (cmd->kind == gfx_kind_draw_text) {
- draw_text(cmd->rect.min, cmd->color, cmd->text);
- } else if (cmd->kind == gfx_kind_set_clip) {
- set_clip(cmd->rect);
- } else {
- invalid_codepath;
- }
- }
-
- gfx->first = gfx->last = NULL;
-}
-
-void gfx_add_cmd(gfx_t *gfx, gfx_cmd_t cmd) {
- gfx_cmd_t *c = ma_push_type(tcx.temp, gfx_cmd_t);
- *c = cmd;
- SLLQ_APPEND(gfx->first, gfx->last, c);
-}
-
-void gfx_clear(gfx_t *gfx, v4f32_t color) {
- gfx_add_cmd(gfx, (gfx_cmd_t){
- .kind = gfx_kind_clear,
- .color = color,
- });
-}
-
-void gfx_rect(gfx_t *gfx, r2f64_t rect, v4f32_t color) {
- gfx_add_cmd(gfx, (gfx_cmd_t){
- .kind = gfx_kind_draw_rect,
- .color = color,
- .rect = rect,
- });
-}
-
-void gfx_set_clip(gfx_t *gfx, r2f64_t rect) {
- gfx_add_cmd(gfx, (gfx_cmd_t){
- .kind = gfx_kind_set_clip,
- .rect = rect,
- });
-}
-
-void gfx_text(gfx_t *gfx, v2f64_t pos, v4f32_t color, s8_t string) {
- gfx_add_cmd(gfx, (gfx_cmd_t){
- .kind = gfx_kind_draw_text,
- .text = s8_copy(tcx.temp, string),
- .color = color,
- .rect.min = pos,
- });
-}
-void gfx_textf(gfx_t *gfx, v2f64_t pos, v4f32_t color, char *str, ...) {
- S8_FMT(tcx.temp, str, text);
- gfx_add_cmd(gfx, (gfx_cmd_t){
- .kind = gfx_kind_draw_text,
- .text = text,
- .color = color,
- .rect.min = pos,
- });
-}
\ No newline at end of file
diff --git a/src/render/render.c b/src/render/render.c
index 97911d1..98df36c 100644
--- a/src/render/render.c
+++ b/src/render/render.c
@@ -89,7 +89,8 @@ fn i64 rn_get_line_spacing(rn_font_t *font) {
}
fn v2f32_t rn_base_draw_string(rn_font_t *font, s8_t string, v2f32_t pos, v4f32_t color, b32 draw) {
- pos.y += rn_get_line_spacing(font) + font->descent;
+ // old formula :: pos.y += rn_get_line_spacing(font) + font->descent;
+ pos.y += font->ascent;
v2f32_t original_pos = pos;
for (utf8_iter_t iter = utf8_iterate_ex(string.str, (int)string.len); iter.item; utf8_advance(&iter)) {
diff --git a/src/render/render.meta.c b/src/render/render.meta.c
index 720d1ce..d61000a 100644
--- a/src/render/render.meta.c
+++ b/src/render/render.meta.c
@@ -4,6 +4,7 @@ void mt_render(ma_arena_t *arena) {
sb8_printf(sb, "gb_read_only ");
s8_t content = OS_ReadFile(&Perm, s8_lit("../package/FiraCode-Regular.ttf"));
+ // s8_t content = OS_ReadFile(&Perm, s8_lit("C:/Windows/Fonts/arial.ttf"));
mt_serial_to_cbyte_array_ex(sb, content, s8_printf(arena, "main_font_data"));
sb8_printf(sb, "gb_read_only s8_t main_font = s8_array_lit(main_font_data);\n");
os_write_file(mt_cpath(arena), sb8_serial_end(arena, sb));
diff --git a/src/render/render_wasm_canvas.c b/src/render/render_wasm_canvas.c
index b8680fa..7f10e12 100644
--- a/src/render/render_wasm_canvas.c
+++ b/src/render/render_wasm_canvas.c
@@ -2,7 +2,7 @@ fn_wasm_import void wasm_clear(void);
fn_wasm_import void wasm_draw_text(isize str, i32 len, f32 x, f32 y, isize font_str, i32 font_len, i32 font_size, f32 r, f32 g, f32 b, f32 a);
fn_wasm_import void wasm_draw_rect(f32 x, f32 y, f32 w, f32 h, f32 r, f32 g, f32 b, f32 a);
fn_wasm_import f32 wasm_measure_text(isize str, i32 len, isize font_str, i32 font_len, i32 font_size);
-fn_wasm_import f32 wasm_get_font_height(isize font_str, i32 font_len, i32 font_size);
+// fn_wasm_import f32 wasm_get_font_height(isize font_str, i32 font_len, i32 font_size);
fn_wasm_import void wasm_set_clip(f32 x, f32 y, f32 w, f32 h);
gb_read_only s8_t font_face = s8_const_lit("main_font");
diff --git a/src/wasm_app/main.c b/src/wasm_app/main.c
index ef7bdb1..6891a9f 100644
--- a/src/wasm_app/main.c
+++ b/src/wasm_app/main.c
@@ -13,7 +13,6 @@
fn void app_init(f32 dpr) {
ma_arena_t *perm = &tcx._perm;
- unused(perm);
mt_tweak_f32(font_size, 50, 4, 200);
mt_tweak_f32(_font_size, 50, 50, 50);
@@ -27,8 +26,5 @@ fn b32 app_update(app_frame_t *frame) {
rn_reload_font(font_size, frame->dpr);
}
ui_demo_update(frame);
- // v2f32_t size = rn_measure_string(rn_state.main_font, s8_lit("Memes and other things"));
- // debugf("font size = %f %f", size.x, size.y);
-
return true;
}
diff --git a/todo.txt b/todo.txt
index 6d72f28..39d6649 100644
--- a/todo.txt
+++ b/todo.txt
@@ -15,8 +15,10 @@
[ ] linux
[ ] render
- [ ] fix opengl warnings on win32
- [ ] wasm (maybe try first without opengl and then opengl) <<<<<<<<<<<
+ [x] fix opengl warnings on win32 -> no need
+ [ ] wasm (maybe try first without opengl and then opengl)
+ [x] canvas
+ [ ] opengl
[ ] maybe copy package stuff to build?
[ ] ui