From 4f00af60449ef27be4d7793b1d5d489be652cc9b Mon Sep 17 00:00:00 2001 From: jacob Date: Mon, 29 Dec 2025 21:13:34 -0600 Subject: [PATCH] begin adding tweak vars --- src/base/base_inc.h | 3 ++ src/base/base_state.h | 5 +-- src/base/base_tweak.c | 39 +++++++++++++++++++++ src/base/base_tweak.h | 43 +++++++++++++++++++++++ src/config.h | 10 +++++- src/glyph_cache/glyph_cache.c | 11 +++++- src/pp/pp_vis/pp_vis_core.c | 66 +++++++++++++++++------------------ src/pp/pp_vis/pp_vis_core.h | 34 +++++++++--------- 8 files changed, 157 insertions(+), 54 deletions(-) create mode 100644 src/base/base_tweak.c create mode 100644 src/base/base_tweak.h diff --git a/src/base/base_inc.h b/src/base/base_inc.h index 471272ce..01634877 100644 --- a/src/base/base_inc.h +++ b/src/base/base_inc.h @@ -5,6 +5,7 @@ //- Api #include "base.cgh" #if IsLanguageC + #include "base_tweak.h" #include "base_intrinsics.h" #include "base_memory.h" #include "base_arena.h" @@ -33,6 +34,7 @@ //- Impl #if IsLanguageC + #include "base_tweak.c" #include "base_memory.c" #include "base_arena.c" #include "base_sync.c" @@ -49,6 +51,7 @@ #include "base_controller.c" #include "base_async.c" #include "base_state.c" +#else #endif //- Include base_win32 diff --git a/src/base/base_state.h b/src/base/base_state.h index 268dc491..da676b05 100644 --- a/src/base/base_state.h +++ b/src/base/base_state.h @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////// -//~ Global context +//~ Global state Struct(BaseCtx) { @@ -7,12 +7,13 @@ Struct(BaseCtx) ResourceCtx resource; GstatCtx gstat; AsyncCtx async; + TweakVarsCtx tweak; }; extern BaseCtx Base; //////////////////////////////////////////////////////////// -//~ Thread-local context +//~ Thread-local state Struct(BaseThreadLocalCtx) { diff --git a/src/base/base_tweak.c b/src/base/base_tweak.c new file mode 100644 index 00000000..21210484 --- /dev/null +++ b/src/base/base_tweak.c @@ -0,0 +1,39 @@ +//////////////////////////////////////////////////////////// +//~ Tweak var get/set + +//- Auto-generated functions + +#define X(name, type, default_value) \ + type GetTweak_##name(void) \ + { \ + type result = Zi; \ + LockTicketMutex(&Base.tweak.mutex); \ + { \ + result = Base.tweak.shared_vars.##name; \ + } \ + UnlockTicketMutex(&Base.tweak.mutex); \ + return result; \ + } \ + void SetTweak_##name(type v) \ + { \ + LockTicketMutex(&Base.tweak.mutex); \ + { \ + Base.tweak.shared_vars.name = v; \ + } \ + UnlockTicketMutex(&Base.tweak.mutex); \ + } + TweakVarsXMacro(X); +#undef X + +//- Helpers + +TweakVars GetAllTweakVars(void) +{ + TweakVars result; + LockTicketMutex(&Base.tweak.mutex); + { + result = Base.tweak.shared_vars; + } + UnlockTicketMutex(&Base.tweak.mutex); + return result; +} diff --git a/src/base/base_tweak.h b/src/base/base_tweak.h new file mode 100644 index 00000000..682c923c --- /dev/null +++ b/src/base/base_tweak.h @@ -0,0 +1,43 @@ +//////////////////////////////////////////////////////////// +//~ Tweak var types + +Enum(TweakVarType) +{ + TweakVarType_b32, +}; + +Enum(TweakVarKind) +{ +#define X(name, ...) TweakVarKind_##name, + TweakVarsXMacro(X) +#undef X + TweakVarKind_COUNT +}; + +Struct(TweakVars) +{ +#define X(name, type, ...) type name; + TweakVarsXMacro(X) +#undef X + i32 __; // Prevent empty struct +}; + +Struct(TweakVarsCtx) +{ + TicketMutex mutex; + TweakVars shared_vars; +}; + +//////////////////////////////////////////////////////////// +//~ Tweak var operations + +//- Auto-generated functions +#define X(name, type, ...) \ + type GetTweak_##name(void); \ + void SetTweak_##name(type v); +#undef X + +//- Helpers +TweakVars GetAllTweakVars(void); +#define GetTweak(name) GetTweak_##name() +#define SetTweak(name, v) SetTweak_##name((v)) diff --git a/src/config.h b/src/config.h index 65090c47..b9f87b49 100644 --- a/src/config.h +++ b/src/config.h @@ -1,4 +1,12 @@ -// Project-wide configurable constants +//////////////////////////////////////////////////////////// +//~ Debug tweak vars + +#define TweakVarsXMacro(X) \ + X(CeilGlyphAdvances, b32, 1) \ +/* --------------------------------- */ + +//////////////////////////////////////////////////////////// +//~ Project-wide configurable constants #define WRITE_DIR "power_play" diff --git a/src/glyph_cache/glyph_cache.c b/src/glyph_cache/glyph_cache.c index dc43867f..5cdba8f0 100644 --- a/src/glyph_cache/glyph_cache.c +++ b/src/glyph_cache/glyph_cache.c @@ -178,7 +178,16 @@ GC_Run GC_RunFromString(Arena *arena, String str, GC_FontKey font, f32 font_size { GC_Glyph *glyph = ready_glyphs[glyph_idx]; GC_RunRect *rect = &result.rects[glyph_idx]; - f32 advance = glyph->advance * scale; + + f32 advance = 0; + if (GetTweak(CeilGlyphAdvances)) + { + advance = CeilF32(glyph->advance * scale); + } + else + { + advance = FloorF32(glyph->advance * scale); + } Rng2 bounds = Zi; bounds.p0 = glyph->bounds.p0; diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 0ed26197..10fc612d 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -101,30 +101,30 @@ void V_PushWidgetThemeStyles(V_WidgetTheme theme) } //////////////////////////////////////////////////////////// -//~ Commands widget +//~ Palette -void V_BeginCommandsWidget(V_CommandsWidget *widget) +void V_BeginPalette(V_Palette *widget) { ZeroStruct(&widget->build); widget->build.cp = UI_PushCP(UI_NilKey); - widget->key = UI_KeyF("commands widget"); + widget->key = UI_KeyF("commands palette"); UI_Push(Tag, widget->key.hash); } -V_CommandsWidgetItemReport V_PushCommandsWidgetItem(V_CommandsWidget *widget, V_CommandsWidgetItemDesc desc) +V_PaletteItemReport V_PushPaletteItem(V_Palette *widget, V_PaletteItemDesc desc) { Arena *frame_arena = UI_FrameArena(); UI_Key key = UI_KeyF("btn%F", FmtSint(widget->build.num_items)); { - V_CommandsWidgetItem *item = PushStruct(frame_arena, V_CommandsWidgetItem); + V_PaletteItem *item = PushStruct(frame_arena, V_PaletteItem); item->key = key; item->desc = desc; SllQueuePush(widget->build.first_item, widget->build.last_item, item); ++widget->build.num_items; } - V_CommandsWidgetItemReport result = Zi; + V_PaletteItemReport result = Zi; UI_Report rep = UI_ReportFromKey(key); result.ui_report = rep; result.pressed = rep.m1.presses > 0; @@ -132,7 +132,7 @@ V_CommandsWidgetItemReport V_PushCommandsWidgetItem(V_CommandsWidget *widget, V_ return result; } -void V_EndCommandsWidget(V_CommandsWidget *widget) +void V_EndPalette(V_Palette *widget) { V_Frame *frame = V_CurrentFrame(); V_WidgetTheme theme = V_GetWidgetTheme(); @@ -170,7 +170,7 @@ void V_EndCommandsWidget(V_CommandsWidget *widget) UI_Push(Height, UI_SHRINK(0, 0)); UI_Push(ChildLayoutAxis, Axis_Y); UI_Push(FloatingPos, SubVec2(widget->pos, widget_half_dims)); - UI_SetNext(Flags, UI_BoxFlag_Floating | (UI_BoxFlag_Selected * frame->show_command_palette)); + UI_SetNext(Flags, UI_BoxFlag_Floating | (UI_BoxFlag_Selected * frame->show_palette)); UI_PushCP(UI_BuildBoxEx(widget->key)); { // Title bar @@ -195,7 +195,7 @@ void V_EndCommandsWidget(V_CommandsWidget *widget) UI_SetNext(FontSize, theme.window_title_font_size); UI_SetNext(ChildAlignment, UI_Alignment_Center); UI_SetNext(Width, UI_SHRINK(0, 1)); - UI_SetNext(Text, Lit("Commands")); + UI_SetNext(Text, Lit("Command Palette")); UI_SetNext(Flags, UI_BoxFlag_DrawText); UI_BuildBox(); @@ -219,7 +219,7 @@ void V_EndCommandsWidget(V_CommandsWidget *widget) UI_SetNext(Width, UI_GROW(1, 0)); UI_PushCP(UI_BuildColumn()); { - for (V_CommandsWidgetItem *item = widget->build.first_item; item; item = item->next) + for (V_PaletteItem *item = widget->build.first_item; item; item = item->next) { UI_BuildDivider(UI_PIX(1, 1), theme.divider_color, Axis_Y); @@ -441,10 +441,10 @@ void V_TickForever(WaveLaneCtx *lane) // Persist state CopyBytes(frame->held_buttons, last_frame->held_buttons, sizeof(frame->held_buttons)); - frame->commands_widget = last_frame->commands_widget; + frame->palette = last_frame->palette; frame->is_editing = last_frame->is_editing; frame->ui_debug = last_frame->ui_debug; - frame->show_command_palette = last_frame->show_command_palette; + frame->show_palette = last_frame->show_palette; frame->show_console = last_frame->show_console; frame->look = last_frame->look; frame->edit_mode = last_frame->edit_mode; @@ -1136,7 +1136,7 @@ void V_TickForever(WaveLaneCtx *lane) if (V.dragging_window && panel_rep.is_hovered) { DrawableTab *left = 0; - DrawableTab *right = 0; + DrawableTab *right = first_drawable_tab; for (DrawableTab *sibling = first_drawable_tab; sibling; sibling = sibling->next) { UI_Report sibling_rep = UI_ReportFromKey(sibling->key); @@ -1222,14 +1222,14 @@ void V_TickForever(WaveLaneCtx *lane) border_color = theme.button_active_color; } - bg_color = LerpSrgb(bg_color, theme.button_hot_color, tab_rep.hot); - bg_color = LerpSrgb(bg_color, theme.button_active_color, tab_rep.active); - border_color = LerpSrgb(border_color, theme.button_active_color, tab_rep.hot); + bg_color = LerpSrgb(bg_color, theme.button_hot_color, tab_rep.hot * (1.0 - tab_rep.selected)); + bg_color = LerpSrgb(bg_color, theme.button_active_color, tab_rep.active * is_dragging); + border_color = LerpSrgb(border_color, theme.button_active_color, tab_rep.selected); - if (is_dragging) - { - bg_color = Color_Blue; - } + // if (is_dragging) + // { + // bg_color = Color_Blue; + // } String tab_name = Zi; if (window->is_tile_window) @@ -1247,7 +1247,7 @@ void V_TickForever(WaveLaneCtx *lane) UI_SetNext(Width, UI_SHRINK(0, 0)); UI_SetNext(Height, UI_SHRINK(0, 0)); UI_SetNext(ChildAlignment, UI_Alignment_Left); - UI_SetNext(Flags, UI_BoxFlag_Interactable); + UI_SetNext(Flags, UI_BoxFlag_Interactable | (UI_BoxFlag_Selected * (active_window == window))); UI_SetNext(Text, tab_name); UI_PushCP(UI_BuildRowEx(tab->key)); { @@ -1496,30 +1496,30 @@ void V_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- Build command palette - // if (frame->show_command_palette) { - V_BeginCommandsWidget(&frame->commands_widget); + V_BeginPalette(&frame->palette); { + // Push cmd items to palette for (u64 i = 0; i < countof(V_cmd_descs); ++i) { - V_CmdDesc desc = V_cmd_descs[i]; - if (!desc.flags & V_CmdDescFlag_HideFromPalette) + V_CmdDesc cmd_desc = V_cmd_descs[i]; + if (!cmd_desc.flags & V_CmdDescFlag_HideFromPalette) { - V_CommandsWidgetItemDesc item_desc = Zi; - item_desc.display_name = desc.display_name; + V_PaletteItemDesc item_desc = Zi; + item_desc.display_name = cmd_desc.display_name; // FIXME: Attach active shortcuts instead of default hotkeys - CopyStructs(item_desc.hotkeys, desc.default_hotkeys, MinU32(countof(item_desc.hotkeys), countof(desc.default_hotkeys))); - if (V_PushCommandsWidgetItem(&frame->commands_widget, item_desc).pressed > 0) + CopyStructs(item_desc.hotkeys, cmd_desc.default_hotkeys, MinU32(countof(item_desc.hotkeys), countof(cmd_desc.default_hotkeys))); + if (V_PushPaletteItem(&frame->palette, item_desc).pressed > 0) { V_CmdNode *cmd_node = PushStruct(frame->arena, V_CmdNode); - cmd_node->cmd.name = desc.name; + cmd_node->cmd.name = cmd_desc.name; SllQueuePush(first_cmd_node, last_cmd_node, cmd_node); ++cmds_count; } } } } - V_EndCommandsWidget(&frame->commands_widget); + V_EndPalette(&frame->palette); } ////////////////////////////// @@ -1761,9 +1761,9 @@ void V_TickForever(WaveLaneCtx *lane) SignalExit(0); } break; - case V_CmdKind_toggle_command_palette: + case V_CmdKind_toggle_palette: { - frame->show_command_palette = !frame->show_command_palette; + frame->show_palette = !frame->show_palette; } break; case V_CmdKind_zoom_in: diff --git a/src/pp/pp_vis/pp_vis_core.h b/src/pp/pp_vis/pp_vis_core.h index 45f03355..dc534c37 100644 --- a/src/pp/pp_vis/pp_vis_core.h +++ b/src/pp/pp_vis/pp_vis_core.h @@ -1,10 +1,10 @@ //////////////////////////////////////////////////////////// //~ Command table -#define V_CmdsTableXMacro(X) \ +#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(toggle_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 ), ) \ @@ -110,9 +110,9 @@ Global Readonly V_CmdDesc V_cmd_descs[V_CmdKind_COUNT] = { }; //////////////////////////////////////////////////////////// -//~ Commands widget types +//~ Palette types -Struct(V_CommandsWidgetItemReport) +Struct(V_PaletteItemReport) { b32 pressed; b32 hotkey_changed; @@ -120,20 +120,20 @@ Struct(V_CommandsWidgetItemReport) V_Hotkey new_hotkeys[8]; }; -Struct(V_CommandsWidgetItemDesc) +Struct(V_PaletteItemDesc) { String display_name; V_Hotkey hotkeys[8]; }; -Struct(V_CommandsWidgetItem) +Struct(V_PaletteItem) { - V_CommandsWidgetItem *next; + V_PaletteItem *next; UI_Key key; - V_CommandsWidgetItemDesc desc; + V_PaletteItemDesc desc; }; -Struct(V_CommandsWidget) +Struct(V_Palette) { // Persistent state Vec2 pos; @@ -143,8 +143,8 @@ Struct(V_CommandsWidget) struct { UI_Checkpoint cp; - V_CommandsWidgetItem *first_item; - V_CommandsWidgetItem *last_item; + V_PaletteItem *first_item; + V_PaletteItem *last_item; u64 num_items; } build; }; @@ -213,7 +213,7 @@ Struct(V_Frame) f64 dt; Button held_buttons[Button_COUNT]; - V_CommandsWidget commands_widget; + V_Palette palette; String window_restore; i32 zooms; @@ -224,7 +224,7 @@ Struct(V_Frame) // Modes b32 is_editing; b32 ui_debug; - b32 show_command_palette; + b32 show_palette; b32 show_console; // Editor state @@ -316,11 +316,11 @@ V_WidgetTheme V_GetWidgetTheme(void); void V_PushWidgetThemeStyles(V_WidgetTheme theme); //////////////////////////////////////////////////////////// -//~ Commands widget +//~ Palette -void V_BeginCommandsWidget(V_CommandsWidget *widget); -V_CommandsWidgetItemReport V_PushCommandsWidgetItem(V_CommandsWidget *widget, V_CommandsWidgetItemDesc desc); -void V_EndCommandsWidget(V_CommandsWidget *widget); +void V_BeginPalette(V_Palette *widget); +V_PaletteItemReport V_PushPaletteItem(V_Palette *widget, V_PaletteItemDesc desc); +void V_EndPalette(V_Palette *widget); //////////////////////////////////////////////////////////// //~ Vis tick