From 4d25eadd4055ab757719ee72713bdf6ddbd55131 Mon Sep 17 00:00:00 2001 From: jacob Date: Mon, 29 Dec 2025 03:37:56 -0600 Subject: [PATCH] round glyph advance & bounds during run generation --- src/base/base_math.c | 18 ++++++++++++++++++ src/base/base_math.h | 2 ++ src/glyph_cache/glyph_cache.c | 2 ++ src/pp/pp_vis/pp_vis_core.c | 16 +++++++++++----- src/pp/pp_vis/pp_vis_core.h | 22 +++++++++++----------- 5 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/base/base_math.c b/src/base/base_math.c index 087c2f7d..7366e71b 100644 --- a/src/base/base_math.c +++ b/src/base/base_math.c @@ -1183,6 +1183,15 @@ Vec2 DimsFromRng2(Rng2 r) return result; } +Vec2 CenterFromRng2(Rng2 r) +{ + Vec2 result = Zi; + Vec2 dims = DimsFromRng2(r); + result.x = r.p0.x + dims.x * 0.5; + result.y = r.p0.y + dims.y * 0.5; + return result; +} + Rng2 UnionRng2(Rng2 a, Rng2 b) { Rng2 result = Zi; @@ -1227,6 +1236,15 @@ Vec2I32 DimsFromRng2I32(Rng2I32 r) return result; } +Vec2I32 CenterFromRng2I32(Rng2I32 r) +{ + Vec2I32 result = Zi; + Vec2I32 dims = DimsFromRng2I32(r); + result.x = r.p0.x + dims.x * 0.5; + result.y = r.p0.y + dims.y * 0.5; + return result; +} + Rng2I32 UnionRng2I32(Rng2I32 a, Rng2I32 b) { Rng2I32 result = Zi; diff --git a/src/base/base_math.h b/src/base/base_math.h index 4df85b88..f1d655fe 100644 --- a/src/base/base_math.h +++ b/src/base/base_math.h @@ -392,6 +392,7 @@ u32 U32FromVec4(Vec4 v); //- Rng2 Vec2 DimsFromRng2(Rng2 r); +Vec2 CenterFromRng2(Rng2 r); Rng2 UnionRng2(Rng2 a, Rng2 b); Rng2 AddRng2Vec2(Rng2 r, Vec2 v); Rng2 MulRng2Vec2(Rng2 a, Vec2 v); @@ -399,6 +400,7 @@ Rng2 DivRng2Vec2(Rng2 a, Vec2 v); //- Rng2I32 Vec2I32 DimsFromRng2I32(Rng2I32 r); +Vec2I32 CenterFromRng2I32(Rng2I32 r); Rng2I32 UnionRng2I32(Rng2I32 a, Rng2I32 b); Rng2I32 AddRng2I32Vec2I32(Rng2I32 r, Vec2I32 v); Rng2I32 MulRng2I32Vec2I32(Rng2I32 a, Vec2I32 v); diff --git a/src/glyph_cache/glyph_cache.c b/src/glyph_cache/glyph_cache.c index 16682c8f..fe0ebaa9 100644 --- a/src/glyph_cache/glyph_cache.c +++ b/src/glyph_cache/glyph_cache.c @@ -184,6 +184,8 @@ GC_Run GC_RunFromString(Arena *arena, String str, GC_FontKey font, f32 font_size Rng2 bounds = Zi; bounds.p0 = MulVec2(glyph->bounds.p0, scale); bounds.p1 = MulVec2(glyph->bounds.p1, scale); + bounds.p0 = RoundVec2(bounds.p0); + bounds.p1 = RoundVec2(bounds.p1); rect->tex = glyph->atlas->tex_ref; rect->tex_slice = glyph->tex_slice; diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 58e8ecea..d8d8cc3f 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -134,14 +134,13 @@ V_CommandsWidgetItemReport V_PushCommandsWidgetItem(V_CommandsWidget *widget, V_ void V_EndCommandsWidget(V_CommandsWidget *widget) { + V_Frame *frame = V_CurrentFrame(); V_WidgetTheme theme = V_GetWidgetTheme(); Vec2 cursor_pos = UI_CursorPos(); UI_Key titlebar_key = UI_KeyF("title bar"); UI_Report titlebar_rep = UI_ReportFromKey(titlebar_key); - - UI_Push(Scale, titlebar_rep.exists); - UI_Push(Tint, VEC4(1, 1, 1, titlebar_rep.exists)); + Vec2 titlebar_half_dims = MulVec2(DimsFromRng2(titlebar_rep.screen_rect), 0.5); Vec4 window_background_color = theme.window_background_color; // Vec4 window_background_color = VEC4(0, 0, 0, 0); @@ -151,11 +150,18 @@ void V_EndCommandsWidget(V_CommandsWidget *widget) Vec4 divider_color = theme.divider_color; if (titlebar_rep.m1.held) { - widget->pos = SubVec2(cursor_pos, titlebar_rep.last_down_mouse_offset); + widget->pos = AddVec2(SubVec2(cursor_pos, titlebar_rep.last_down_mouse_offset), titlebar_half_dims); } // window_border_color = BlendSrgb(window_border_color, Rgb(0.5, 0.5, 0.5), titlebar_rep.hot); window_border_color = BlendSrgb(window_border_color, Rgb32(0x0078a6), titlebar_rep.hot); + + UI_Push(Scale, titlebar_rep.exists); + UI_Push(Tint, VEC4(1, 1, 1, titlebar_rep.exists)); + + // Vec2 pos = LerpVec2(MulVec2(Vec2FromVec(frame->ui_dims), 0.5), widget->pos, titlebar_rep.exists); + Vec2 pos = SubVec2(widget->pos, titlebar_half_dims); + UI_Push(BackgroundColor, window_background_color); UI_Push(BorderColor, window_border_color); UI_Push(Border, theme.window_border); @@ -163,7 +169,7 @@ void V_EndCommandsWidget(V_CommandsWidget *widget) UI_Push(Width, UI_PIX(theme.window_width, 0)); UI_Push(Height, UI_SHRINK(0, 0)); UI_Push(ChildLayoutAxis, Axis_Y); - UI_Push(FloatingPos, widget->pos); + UI_Push(FloatingPos, pos); UI_SetNext(Flags, UI_BoxFlag_Floating); UI_PushCP(UI_BuildBoxEx(widget->key)); { diff --git a/src/pp/pp_vis/pp_vis_core.h b/src/pp/pp_vis/pp_vis_core.h index 1398aa16..550dd94f 100644 --- a/src/pp/pp_vis/pp_vis_core.h +++ b/src/pp/pp_vis/pp_vis_core.h @@ -2,17 +2,17 @@ //~ Command table #define V_CmdsTableXMacro(X) \ - X(nop, NOP, V_CmdDescFlag_HideFromPalette, V_HOTKEY(0), ) \ - X(exit_program, Exit Program, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_Escape ) ) \ - X(toggle_command_palette, Toggle Command Palette, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_P, .ctrl = 1, .shift = 1 ), ) \ - X(zoom_in, Zoom In, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_MWheelUp ), ) \ - X(zoom_out, Zoom Out, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_MWheelDown ), ) \ - X(toggle_editor, Toggle Editor, V_CmdDescFlag_None, V_HOTKEY( Button_F1 ), ) \ - X(toggle_ui_debug, Toggle UI Debug, V_CmdDescFlag_None, V_HOTKEY( Button_F5 ), ) \ - X(toggle_console, Toggle Developer Console, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent ), ) \ - X(toggle_fullscreen, Toggle Fullscreen Mode, V_CmdDescFlag_None, V_HOTKEY( Button_Enter, .alt = 1 ) ) \ - X(toggle_window_topmost, Toggle Window Topmost, V_CmdDescFlag_None, V_HOTKEY( Button_F4 ), ) \ - X(spawn, Spawn/Teleport Player, V_CmdDescFlag_None, V_HOTKEY( Button_T ), ) \ + X(nop, NOP, V_CmdDescFlag_HideFromPalette, V_HOTKEY(0), ) \ + X(exit_program, Exit Program, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_Escape ) ) \ + X(toggle_command_palette, Toggle Command Palette, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_P, .ctrl = 1, .shift = 1 ), ) \ + X(zoom_in, Zoom In, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_MWheelUp ), ) \ + X(zoom_out, Zoom Out, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_MWheelDown ), ) \ + X(toggle_editor, Toggle Editor, V_CmdDescFlag_None, V_HOTKEY( Button_F1 ), ) \ + X(toggle_ui_debug, Toggle UI Debug, V_CmdDescFlag_None, V_HOTKEY( Button_F5 ), ) \ + X(toggle_console, Toggle Developer Console, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent ), ) \ + X(toggle_fullscreen, Toggle Fullscreen Mode, V_CmdDescFlag_None, V_HOTKEY( Button_Enter, .alt = 1 ) ) \ + X(toggle_window_topmost, Toggle Window Topmost, V_CmdDescFlag_None, V_HOTKEY( Button_F4 ), ) \ + X(spawn, Spawn/Teleport Player to Cursor, V_CmdDescFlag_None, V_HOTKEY( Button_T ), ) \ // -------------------------------------------------------------------------------------------------------------------- ////////////////////////////////////////////////////////////