wasm, ui, dpi and text baseline

This commit is contained in:
Krzosa Karol
2025-01-22 13:11:04 +01:00
parent e54265fcac
commit 223038c9cd
7 changed files with 46 additions and 38 deletions

View File

@@ -5,7 +5,7 @@ fn_wasm_import f32 wasm_measure_text(isize str, i32 len, isize font_str, i32 fo
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("consolas");
gb_read_only s8_t font_face = s8_const_lit("main_font");
typedef struct rn_font_t rn_font_t;
struct rn_font_t {
@@ -19,29 +19,37 @@ struct rn_state_t {
};
rn_state_t rn_state;
// fn f64 get_font_height(void) {
// return wasm_get_font_height((isize) font_face.str, font_face.len, m*wasm_dpr) / wasm_dpr;
// }
fn void rn_reload_font(f32 font_size, f32 dpr) {
rn_state.main_font->size = font_size * dpr;
}
fn void rn_init(ma_arena_t *perm, f32 font_size) {
fn void rn_init(ma_arena_t *perm, f32 font_size, f32 dpr) {
rn_state.main_font = ma_push_type(perm, rn_font_t);
rn_state.main_font->size = font_size;
rn_reload_font(font_size, dpr);
}
fn void rn_draw_rect(r2f32_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);
wasm_draw_rect(rect.min.x, rect.min.y, (rect.max.x - rect.min.x), (rect.max.y - rect.min.y), color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
}
fn void rn_draw_rect_border(r2f32_t rect, v4f32_t color, f32 border_thickness) {
r2f32_t left = r2f32_cut_left(&rect, border_thickness);
r2f32_t right = r2f32_cut_right(&rect, border_thickness);
r2f32_t top = r2f32_cut_top(&rect, border_thickness);
r2f32_t bottom = r2f32_cut_bottom(&rect, border_thickness);
rn_draw_rect(left, color);
rn_draw_rect(right, color);
rn_draw_rect(top, color);
rn_draw_rect(bottom, color);
}
fn v2f32_t rn_measure_string(rn_font_t *font, s8_t string) {
f32 x = wasm_measure_text((isize)string.str, string.len, (isize) font_face.str, font_face.len, rn_state.main_font->size) / wasm_dpr;
f32 x = wasm_measure_text((isize)string.str, string.len, (isize) font_face.str, font_face.len, rn_state.main_font->size);
return (v2f32_t){x, rn_state.main_font->size};
}
fn v2f32_t rn_draw_string(rn_font_t *font, v2f32_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, rn_state.main_font->size, color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
wasm_draw_text((isize)string.str, string.len, pos.x, pos.y, (isize) font_face.str, font_face.len, rn_state.main_font->size, color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
v2f32_t size = rn_measure_string(font, string);
return size;
}
@@ -52,7 +60,7 @@ fn v2f32_t rn_draw_stringf(rn_font_t *font, v2f32_t pos, v4f32_t color, char *st
}
fn void rn_set_clip(r2f32_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));
wasm_set_clip(rect.min.x, rect.min.y, (rect.max.x - rect.min.x), (rect.max.y - rect.min.y));
}
fn void rn_begin(app_frame_t *frame) {