round glyph advances

This commit is contained in:
jacob 2025-12-18 22:16:35 -06:00
parent 4982d60647
commit ad56fafeff
9 changed files with 74 additions and 48 deletions

View File

@ -65,6 +65,22 @@ S_Key S_RandKey(void)
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
//~ Tile helpers //~ Tile helpers
String S_NameFromTileKind(S_TileKind kind)
{
/* Tile names array */
#define X(name, ...) [S_TileKind_##name] = CompLit(#name),
PERSIST Readonly String tile_names[] = {
S_TilesXMacro(X)
};
#undef X
String result = Lit("Unknown");
if (kind >= 0 && kind < countof(tile_names))
{
result = tile_names[kind];
}
return result;
}
Rng2I32 S_UpdateTilesInPlaceFromPlacement(u8 *tiles, S_TilePlacement placement) Rng2I32 S_UpdateTilesInPlaceFromPlacement(u8 *tiles, S_TilePlacement placement)
{ {
Rng2I32 dirty_rect = Zi; Rng2I32 dirty_rect = Zi;

View File

@ -238,6 +238,7 @@ S_Key S_RandKey(void);
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
//~ Tile helpers //~ Tile helpers
String S_NameFromTileKind(S_TileKind kind);
Rng2I32 S_UpdateTilesInPlaceFromPlacement(u8 *tiles, S_TilePlacement placement); Rng2I32 S_UpdateTilesInPlaceFromPlacement(u8 *tiles, S_TilePlacement placement);
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////

View File

@ -3,12 +3,20 @@
#define S_WorldSize 128 #define S_WorldSize 128
#define S_TilesXMacro(X) \
X(Empty) \
X(Floor) \
X(Wall) \
/* -------------------- */
/* Tiles enum */
#define X(name, ...) S_TileKind_##name,
Enum(S_TileKind) Enum(S_TileKind)
{ {
S_TileKind_None, S_TilesXMacro(X)
S_TileKind_Floor, S_TileKind_Count
S_TileKind_Wall,
}; };
#undef X
Enum(S_TilePlacementKind) Enum(S_TilePlacementKind)
{ {

View File

@ -63,21 +63,8 @@ V_WidgetTheme V_GetWidgetTheme(void)
// theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/fixedsys.ttf"))); // theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/fixedsys.ttf")));
// theme.font_size = 16; // theme.font_size = 16;
// theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/fixedsys.ttf"))); theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/seguisb.ttf")));
// theme.font_size = 64; theme.font_size = 16;
// theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/OpenSans-Regular.ttf")));
// theme.font_size = 18;
// theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/roboto-med.ttf")));
// theme.font_size = 18;
// theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/SegoeUI.ttf")));
// theme.font_size = 18;
theme.font = GC_FontKeyFromResource(ResourceKeyFromStore(&V_Resources, Lit("font/roboto-med.ttf")));
theme.font_size = 100;
theme.window_background_color = Rgb32(0xff1a1d1e); theme.window_background_color = Rgb32(0xff1a1d1e);
theme.window_border_color = Rgb32(0xff343a3b); theme.window_border_color = Rgb32(0xff343a3b);
@ -87,8 +74,8 @@ V_WidgetTheme V_GetWidgetTheme(void)
theme.divider_color = theme.window_border_color; theme.divider_color = theme.window_border_color;
theme.window_title_font_size = 16; theme.window_title_font_size = 16;
theme.text_padding_x = 3; theme.text_padding_x = 5;
theme.text_padding_y = 3; theme.text_padding_y = 5;
return theme; return theme;
} }
@ -756,7 +743,7 @@ void V_TickForever(WaveLaneCtx *lane)
else if (m2_held) else if (m2_held)
{ {
frame->is_selecting = 1; frame->is_selecting = 1;
frame->equipped_tile = S_TileKind_None; frame->equipped_tile = S_TileKind_Empty;
} }
if (frame->is_selecting && last_frame->is_selecting) if (frame->is_selecting && last_frame->is_selecting)
@ -809,6 +796,9 @@ void V_TickForever(WaveLaneCtx *lane)
space->axis = Axis_X; space->axis = Axis_X;
V.root_space = space; V.root_space = space;
space->pref_size[Axis_X] = UI_GROW(1, 0);
space->pref_size[Axis_Y] = UI_GROW(1, 0);
{ {
V_Panel *panel = PushStruct(perm, V_Panel); V_Panel *panel = PushStruct(perm, V_Panel);
panel->space = space; panel->space = space;
@ -847,20 +837,20 @@ void V_TickForever(WaveLaneCtx *lane)
} }
} }
{ // {
V_Panel *panel = PushStruct(perm, V_Panel); // V_Panel *panel = PushStruct(perm, V_Panel);
panel->space = space; // panel->space = space;
DllQueuePushNP(space->first_panel, space->last_panel, panel, next_in_space, prev_in_space); // DllQueuePushNP(space->first_panel, space->last_panel, panel, next_in_space, prev_in_space);
++space->panels_count; // ++space->panels_count;
{ // {
V_Window *window = PushStruct(perm, V_Window); // V_Window *window = PushStruct(perm, V_Window);
window->panel = panel; // window->panel = panel;
// window->is_tile_window = 1; // // window->is_tile_window = 1;
DllQueuePushNP(panel->first_window, panel->last_window, window, next_in_panel, prev_in_panel); // DllQueuePushNP(panel->first_window, panel->last_window, window, next_in_panel, prev_in_panel);
++panel->windows_count; // ++panel->windows_count;
} // }
} // }
} }
if (frame->is_editing) if (frame->is_editing)
@ -885,6 +875,8 @@ void V_TickForever(WaveLaneCtx *lane)
} }
UI_Key space_key = UI_TransKey(); UI_Key space_key = UI_TransKey();
UI_SetNext(Width, space->pref_size[Axis_X]);
UI_SetNext(Width, space->pref_size[Axis_Y]);
if (space->axis == Axis_X) if (space->axis == Axis_X)
{ {
UI_BuildRowEx(space_key); UI_BuildRowEx(space_key);
@ -899,20 +891,24 @@ void V_TickForever(WaveLaneCtx *lane)
for (V_Panel *panel = space->first_panel; panel; panel = panel->next_in_space) for (V_Panel *panel = space->first_panel; panel; panel = panel->next_in_space)
{ {
// UI_SetNext(Width, UI_SHRINK(0, 1)); // UI_SetNext(Width, UI_SHRINK(0, 1));
UI_SetNext(Width, UI_GROW(1, 0));
UI_SetNext(Height, UI_GROW(1, 0));
UI_PushCP(UI_BuildColumn()); UI_PushCP(UI_BuildColumn());
{ {
i64 active_window_idx = ClampI64(panel->active_window_idx, 0, MaxI64(panel->windows_count - 1, 0)); i64 active_window_idx = ClampI64(panel->active_window_idx, 0, MaxI64(panel->windows_count - 1, 0));
//- Build panel window tabs //- Build panel window tabs
f32 tab_spacing = 10;
V_Window *active_window = 0; V_Window *active_window = 0;
{ {
UI_SetNext(Width, UI_SHRINK(0, 1)); UI_SetNext(Width, UI_SHRINK(0, 0));
UI_SetNext(Height, UI_SHRINK(0, 1)); UI_SetNext(Height, UI_SHRINK(0, 0));
UI_PushCP(UI_BuildRow()); UI_PushCP(UI_BuildRow());
i64 window_idx = 0; i64 window_idx = 0;
for (V_Window *window = panel->first_window; window; window = window->next_in_panel) for (V_Window *window = panel->first_window; window; window = window->next_in_panel)
{ {
if (!window->is_viewport_window) if (!window->is_viewport_window)
{ {
UI_BuildSpacer(UI_PIX(tab_spacing, 0), Axis_X);
if (window_idx == active_window_idx) if (window_idx == active_window_idx)
{ {
active_window = window; active_window = window;
@ -924,8 +920,9 @@ void V_TickForever(WaveLaneCtx *lane)
} }
UI_SetNext(BackgroundColor, VEC4(0.2, 0.2, 0.2, 1)); UI_SetNext(BackgroundColor, VEC4(0.2, 0.2, 0.2, 1));
UI_SetNext(Border, 1); UI_SetNext(Border, 1);
UI_SetNext(Width, UI_SHRINK(0, 1)); UI_SetNext(Width, UI_SHRINK(theme.text_padding_x, 0));
UI_SetNext(Height, UI_SHRINK(0, 1)); UI_SetNext(Height, UI_SHRINK(theme.text_padding_y, 0));
UI_SetNext(ChildAlignment, UI_Alignment_Center);
UI_PushCP(UI_BuildRow()); UI_PushCP(UI_BuildRow());
{ {
if (window->is_tile_window) if (window->is_tile_window)
@ -960,7 +957,11 @@ void V_TickForever(WaveLaneCtx *lane)
{ {
if (window->is_tile_window) if (window->is_tile_window)
{ {
UI_BuildLabelF("Raaah"); for (S_TileKind tile_kind = 0; tile_kind < S_TileKind_Count; ++tile_kind)
{
String name = S_NameFromTileKind(tile_kind);
UI_BuildLabel(name);
}
} }
} }
UI_PopCP(UI_TopCP()); UI_PopCP(UI_TopCP());

View File

@ -161,6 +161,8 @@ Struct(V_Space)
struct V_Panel *first_panel; struct V_Panel *first_panel;
struct V_Panel *last_panel; struct V_Panel *last_panel;
UI_Size pref_size[Axis_CountXY];
Axis axis; Axis axis;
}; };

Binary file not shown.

Binary file not shown.

BIN
src/pp/pp_vis/pp_vis_res/font/seguisb.ttf (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -243,6 +243,7 @@ TTF_GlyphResult TTF_RasterizeGlyphFromCodepoint(Arena *arena, u32 codepoint, Res
hr = IDWriteFontFace_GetDesignGlyphMetrics(font->face, &glyph_idx, 1, &m, 0); hr = IDWriteFontFace_GetDesignGlyphMetrics(font->face, &glyph_idx, 1, &m, 0);
} }
f32 advance = (f32)m.advanceWidth * pixels_per_design_unit; f32 advance = (f32)m.advanceWidth * pixels_per_design_unit;
advance = RoundF32(advance);
/* Best-guess a position in the middle of the render target based on metrics */ /* Best-guess a position in the middle of the render target based on metrics */
Vec2I32 rt_baseline = Zi; Vec2I32 rt_baseline = Zi;