group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
MenuTheme.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include "sfx/SfxTypes.hpp"
10
11#include <imgui.h>
12
13struct SDL_GPUDevice;
14class SfxSystem;
15
16namespace menu_theme
17{
18inline constexpr float k_frontendPanelBaseWidth = 900.0f;
19inline constexpr float k_frontendPanelBaseHeight = 660.0f;
20
22{
23 ImVec4 accent{0.96f, 0.96f, 0.92f, 1.00f};
24 ImVec4 accentHover{1.00f, 1.00f, 1.00f, 1.00f};
25 ImVec4 accentActive{0.72f, 0.72f, 0.68f, 1.00f};
26 ImVec4 accentText{0.02f, 0.02f, 0.02f, 1.00f};
27 ImVec4 text{0.96f, 0.96f, 0.92f, 1.00f};
28 ImVec4 textDim{0.58f, 0.60f, 0.58f, 1.00f};
29 ImVec4 windowBg{0.01f, 0.01f, 0.01f, 1.0f};
30 ImVec4 childBg{0.02f, 0.02f, 0.02f, 0.72f};
31 ImVec4 popupBg{0.01f, 0.01f, 0.01f, 0.98f};
32 ImVec4 frameBg{0.02f, 0.02f, 0.02f, 0.96f};
33 ImVec4 frameHover{0.10f, 0.10f, 0.10f, 1.00f};
34 ImVec4 frameActive{0.18f, 0.18f, 0.17f, 1.00f};
35 ImVec4 button{0.02f, 0.02f, 0.02f, 0.96f};
36 ImVec4 buttonHover{0.13f, 0.13f, 0.12f, 1.00f};
37 ImVec4 buttonActive{0.22f, 0.22f, 0.20f, 1.00f};
38 ImVec4 header{0.13f, 0.13f, 0.12f, 1.00f};
39 ImVec4 border{0.88f, 0.88f, 0.82f, 0.72f};
40 ImVec4 danger{0.36f, 0.04f, 0.04f, 1.00f};
41 ImVec4 dangerHover{0.58f, 0.08f, 0.08f, 1.00f};
42 ImVec4 dangerActive{0.86f, 0.18f, 0.16f, 1.00f};
43 ImVec4 titleBg{0.01f, 0.01f, 0.01f, 1.00f};
44 ImVec4 titleBgActive{0.03f, 0.03f, 0.03f, 1.00f};
45 ImVec4 titleBgCollapsed{0.01f, 0.01f, 0.01f, 0.86f};
46 ImVec4 menuBarBg{0.02f, 0.02f, 0.02f, 1.00f};
47 ImVec4 scrollbarBg{0.01f, 0.01f, 0.01f, 0.70f};
48 ImVec4 tableHeaderBg{0.04f, 0.04f, 0.04f, 1.00f};
49 ImVec4 tableBorderLight{0.72f, 0.72f, 0.68f, 0.42f};
50 ImVec4 tableRowBg{0.00f, 0.00f, 0.00f, 0.00f};
51 ImVec4 tableRowBgAlt{1.00f, 1.00f, 1.00f, 0.045f};
52 float textSelectedAlpha = 0.28f;
53
54 float windowRounding = 0.0f;
55 float childRounding = 0.0f;
56 float frameRounding = 0.0f;
57 float popupRounding = 0.0f;
58 float grabRounding = 0.0f;
59 float scrollbarRounding = 0.0f;
60 float windowBorderSize = 1.0f;
61 float frameBorderSize = 1.0f;
62 float popupBorderSize = 1.0f;
63 ImVec2 windowPadding{24.0f, 20.0f};
64 ImVec2 framePadding{12.0f, 8.0f};
65 ImVec2 itemSpacing{10.0f, 10.0f};
66 ImVec2 itemInnerSpacing{8.0f, 6.0f};
67 ImVec2 cellPadding{8.0f, 6.0f};
68 float scrollbarSize = 12.0f;
69 float grabMinSize = 12.0f;
70 ImVec2 windowTitleAlign{0.5f, 0.5f};
71
72 float scaleBaseWidth = 1280.0f;
73 float scaleBaseHeight = 720.0f;
74 float minScale = 0.85f;
75 float maxScale = 2.0f;
76 float panelViewportMargin = 0.94f;
77 float panelTitleScale = 1.9f;
82 float headingTopSpacing = 4.0f;
83 float headingRuleOffsetY = 1.0f;
86
87 ImVec4 backgroundTop{0.03f, 0.03f, 0.03f, 1.0f};
88 ImVec4 backgroundBottom{0.0f, 0.0f, 0.0f, 1.0f};
89 float backgroundImageAlpha = 0.35f;
90 ImVec4 backgroundImageOverlay{0.0f, 0.0f, 0.0f, 0.78f};
91 ImVec4 backgroundGlow{0.96f, 0.96f, 0.92f, 0.0f};
93};
94
97
100
103
106void applyStyle();
107
109void setSfxSystem(SfxSystem* system);
110
112void playUiSound(UiSoundAction action, float gain = 1.0f);
113
116{
118
119 explicit ScopedTheme(const ThemeSettings& theme);
120 ~ScopedTheme();
121 ScopedTheme(const ScopedTheme&) = delete;
123};
124
127void loadFonts();
128
130ImFont* terminalFont();
131
141
143float scaleFor(const ImVec2& display);
144
152bool beginPanel(
153 const char* idAndTitle, float baseWidth, float baseHeight, bool showTitle, ImGuiWindowFlags extraFlags = 0);
154
156void endPanel();
157
164bool beginScrollBody(const char* id, float footerHeight);
165
167void endScrollBody();
168
170void heading(const char* text);
171
173void terminalSection(const char* text);
174
176bool terminalActionRow(const char* command,
177 const char* description = nullptr,
178 const ImVec2& size = ImVec2(0, 0),
179 bool danger = false);
180
182void terminalStatusLine(const char* left, const char* right = nullptr);
183
185bool accentButton(const char* label, const ImVec2& size = ImVec2(0, 0));
186
188bool dangerButton(const char* label, const ImVec2& size = ImVec2(0, 0));
189
193void drawBackground(SDL_GPUDevice* device);
194
196void releaseBackground(SDL_GPUDevice* device);
197
199void buildTweaker(bool* open);
200} // namespace menu_theme
Sound effect identifiers, categories, and the SoundClip data type.
UiSoundAction
Semantic menu/UI sound actions.
Definition SfxTypes.hpp:121
Client-side sound effects system.
Definition SfxSystem.hpp:50
Definition MenuTheme.cpp:184
void endPanel()
End a panel opened with beginPanel().
Definition MenuTheme.cpp:403
const ThemeSettings & terminalSettings()
Front-end white terminal menu defaults.
Definition MenuTheme.cpp:190
bool terminalActionRow(const char *command, const char *description, const ImVec2 &size, bool danger)
Selectable command row for keyboard/gamepad/mouse-driven terminal menus.
Definition MenuTheme.cpp:449
void endScrollBody()
End a scroll body opened with beginScrollBody().
Definition MenuTheme.cpp:413
void terminalStatusLine(const char *left, const char *right)
Draw a dim one-line terminal status strip.
Definition MenuTheme.cpp:519
void heading(const char *text)
Accent section header with an underline rule (styled replacement for ImGui::SeparatorText).
Definition MenuTheme.cpp:418
void releaseBackground(SDL_GPUDevice *device)
Release GPU resources held for the background. Call before the GPU device is destroyed.
Definition MenuTheme.cpp:811
void playUiSound(UiSoundAction action, float gain)
Play a semantic UI sound when an SFX system is attached and initialized.
Definition MenuTheme.cpp:279
void loadFonts()
Load the UI font (terminal font if present, otherwise SpaceGrotesk) and set it as the default.
Definition MenuTheme.cpp:300
void buildTweaker(bool *open)
Live ImGui editor for every shared menu-theme parameter.
Definition MenuTheme.cpp:680
bool accentButton(const char *label, const ImVec2 &size)
Bright accent call-to-action button.
Definition MenuTheme.cpp:540
constexpr float k_frontendPanelBaseHeight
Definition MenuTheme.hpp:19
constexpr float k_frontendPanelBaseWidth
Definition MenuTheme.hpp:18
ImFont * terminalFont()
Pointer to the loaded terminal/CRT font, or nullptr if none was found by loadFonts().
Definition MenuTheme.cpp:331
void setSfxSystem(SfxSystem *system)
Attach the shared SFX system used by menu widgets. Passing nullptr disables UI sounds.
Definition MenuTheme.cpp:274
bool beginPanel(const char *idAndTitle, float baseWidth, float baseHeight, bool showTitle, ImGuiWindowFlags extraFlags)
Begin a centered, responsive, chromeless panel.
Definition MenuTheme.cpp:359
bool beginScrollBody(const char *id, float footerHeight)
Begin a scrollable body region inside a panel that reserves footerHeight pixels at the bottom for sti...
Definition MenuTheme.cpp:408
void terminalSection(const char *text)
Terminal-style section prompt/header.
Definition MenuTheme.cpp:434
void drawBackground(SDL_GPUDevice *device)
Draw the gradient + optional bg.webp background behind the current frame.
Definition MenuTheme.cpp:577
float scaleFor(const ImVec2 &display)
Responsive UI scale derived from the current display size (1.0 at 1280x720).
Definition MenuTheme.cpp:350
ThemeSettings & settings()
Mutable live menu theme settings used by applyStyle() and helpers.
Definition MenuTheme.cpp:185
void applyStyle()
Apply the cohesive white terminal style (colors + rounding + spacing).
Definition MenuTheme.cpp:200
const ThemeSettings & gameplaySettings()
In-game bluish menu defaults that match the current HUD palette.
Definition MenuTheme.cpp:195
bool dangerButton(const char *label, const ImVec2 &size)
Red destructive-action button.
Definition MenuTheme.cpp:559
~ScopedTerminalFont()
Definition MenuTheme.cpp:344
bool pushed
Definition MenuTheme.hpp:135
ScopedTerminalFont & operator=(const ScopedTerminalFont &)=delete
ScopedTerminalFont()
Definition MenuTheme.cpp:336
ScopedTerminalFont(const ScopedTerminalFont &)=delete
ScopedTheme(const ScopedTheme &)=delete
ScopedTheme(const ThemeSettings &theme)
Definition MenuTheme.cpp:288
~ScopedTheme()
Definition MenuTheme.cpp:294
ThemeSettings previous
Definition MenuTheme.hpp:117
ScopedTheme & operator=(const ScopedTheme &)=delete
Definition MenuTheme.hpp:22
float popupRounding
Definition MenuTheme.hpp:57
ImVec4 accentActive
Definition MenuTheme.hpp:25
float childRounding
Definition MenuTheme.hpp:55
ImVec4 backgroundBottom
Definition MenuTheme.hpp:88
ImVec2 itemSpacing
Definition MenuTheme.hpp:65
float grabMinSize
Definition MenuTheme.hpp:69
ImVec4 popupBg
Definition MenuTheme.hpp:31
float headingRuleThickness
Definition MenuTheme.hpp:84
ImVec4 dangerHover
Definition MenuTheme.hpp:41
ImVec4 textDim
Definition MenuTheme.hpp:28
float panelTitleScale
Definition MenuTheme.hpp:77
float headingRuleOffsetY
Definition MenuTheme.hpp:83
float headingBottomSpacing
Definition MenuTheme.hpp:85
ImVec4 titleBgActive
Definition MenuTheme.hpp:44
ImVec4 menuBarBg
Definition MenuTheme.hpp:46
ImVec4 border
Definition MenuTheme.hpp:39
ImVec4 accentHover
Definition MenuTheme.hpp:24
float scrollbarRounding
Definition MenuTheme.hpp:59
ImVec4 button
Definition MenuTheme.hpp:35
float backgroundGlowHeight
Definition MenuTheme.hpp:92
float scaleBaseWidth
Definition MenuTheme.hpp:72
ImVec4 titleBgCollapsed
Definition MenuTheme.hpp:45
float panelTitleRuleRounding
Definition MenuTheme.hpp:80
ImVec4 backgroundGlow
Definition MenuTheme.hpp:91
ImVec4 tableRowBg
Definition MenuTheme.hpp:50
ImVec4 text
Definition MenuTheme.hpp:27
ImVec2 itemInnerSpacing
Definition MenuTheme.hpp:66
float maxScale
Definition MenuTheme.hpp:75
ImVec4 scrollbarBg
Definition MenuTheme.hpp:47
ImVec4 tableRowBgAlt
Definition MenuTheme.hpp:51
float panelViewportMargin
Definition MenuTheme.hpp:76
float frameBorderSize
Definition MenuTheme.hpp:61
float windowRounding
Definition MenuTheme.hpp:54
float panelTitleBottomSpacing
Definition MenuTheme.hpp:81
ImVec4 accent
Definition MenuTheme.hpp:23
ImVec4 accentText
Definition MenuTheme.hpp:26
ImVec4 backgroundImageOverlay
Definition MenuTheme.hpp:90
ImVec4 frameHover
Definition MenuTheme.hpp:33
float backgroundImageAlpha
Definition MenuTheme.hpp:89
float frameRounding
Definition MenuTheme.hpp:56
float scrollbarSize
Definition MenuTheme.hpp:68
ImVec4 backgroundTop
Definition MenuTheme.hpp:87
ImVec4 tableHeaderBg
Definition MenuTheme.hpp:48
ImVec4 frameActive
Definition MenuTheme.hpp:34
ImVec4 tableBorderLight
Definition MenuTheme.hpp:49
ImVec2 framePadding
Definition MenuTheme.hpp:64
ImVec4 titleBg
Definition MenuTheme.hpp:43
float minScale
Definition MenuTheme.hpp:74
ImVec4 frameBg
Definition MenuTheme.hpp:32
ImVec4 windowBg
Definition MenuTheme.hpp:29
float popupBorderSize
Definition MenuTheme.hpp:62
float textSelectedAlpha
Definition MenuTheme.hpp:52
float grabRounding
Definition MenuTheme.hpp:58
float headingTopSpacing
Definition MenuTheme.hpp:82
float windowBorderSize
Definition MenuTheme.hpp:60
ImVec2 windowPadding
Definition MenuTheme.hpp:63
ImVec4 danger
Definition MenuTheme.hpp:40
ImVec4 childBg
Definition MenuTheme.hpp:30
ImVec4 buttonHover
Definition MenuTheme.hpp:36
ImVec4 header
Definition MenuTheme.hpp:38
float panelTitleRuleThickness
Definition MenuTheme.hpp:79
ImVec2 cellPadding
Definition MenuTheme.hpp:67
ImVec4 dangerActive
Definition MenuTheme.hpp:42
ImVec4 buttonActive
Definition MenuTheme.hpp:37
ImVec2 windowTitleAlign
Definition MenuTheme.hpp:70
float panelTitleRuleOffsetY
Definition MenuTheme.hpp:78
float scaleBaseHeight
Definition MenuTheme.hpp:73