yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
ui_config.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_CORE_UI_CONFIG_H_
2#define YAZE_APP_GUI_CORE_UI_CONFIG_H_
3
4#include <algorithm>
5
6#include "imgui/imgui.h"
7
8namespace yaze::gui {
9
16struct UIConfig {
17 // Activity bar
18 static constexpr float kActivityBarWidth = 48.0f;
19
20 // Status bar
21 static constexpr float kStatusBarHeight = 28.0f;
22
23 // Right panel defaults
24 static constexpr float kPanelWidthNarrow = 300.0f;
25 static constexpr float kPanelWidthMedium = 360.0f;
26 static constexpr float kPanelWidthWide = 400.0f;
27
28 // Specific panel defaults
29 static constexpr float kPanelWidthAgentChat = kPanelWidthWide;
30 static constexpr float kPanelWidthProposals = kPanelWidthWide;
31 static constexpr float kPanelWidthSettings = kPanelWidthMedium;
32 static constexpr float kPanelWidthHelp = 340.0f;
34 static constexpr float kPanelWidthProperties = 340.0f;
35 static constexpr float kPanelWidthProject = kPanelWidthMedium;
36
37 // Panel layout
38 static constexpr float kPanelHeaderHeight = 44.0f;
39 static constexpr float kMaxPanelWidthRatio = 0.35f;
40
41 // Minimum panel widths (for right panel and similar; used with SetPanelWidth /
42 // clamp)
43 static constexpr float kPanelMinWidthAbsolute = 180.0f;
44 static constexpr float kPanelMinWidthAgentChat = 360.0f;
45 static constexpr float kPanelMinWidthProposals = 360.0f;
46 static constexpr float kPanelMinWidthSettings = 340.0f;
47 static constexpr float kPanelMinWidthHelp = 340.0f;
48 static constexpr float kPanelMinWidthNotifications = 300.0f;
49 static constexpr float kPanelMinWidthProperties = 340.0f;
50 static constexpr float kPanelMinWidthProject = 320.0f;
51
52 // Content region minimums (for child windows so they never collapse to zero)
53 static constexpr float kContentMinHeightChat = 120.0f; // Agent chat body
54 static constexpr float kContentMinHeightList =
55 80.0f; // Lists, notification list
56 static constexpr float kContentMinHeightCanvas =
57 200.0f; // Canvas areas (dungeon, overworld)
58 static constexpr float kContentMinWidthSidebar = 160.0f; // Sidebar content
59
60 // Icon button size presets
61 static constexpr float kIconButtonSmall = 24.0f;
62 static constexpr float kIconButtonMedium = 32.0f;
63 static constexpr float kIconButtonLarge = 48.0f;
64 static constexpr float kIconButtonToolbar = 32.0f;
65
66 // Activity bar icon dimensions
67 static constexpr float kActivityBarIconWidth = 48.0f;
68 static constexpr float kActivityBarIconHeight = 40.0f;
69
70 // Padding presets
71 static constexpr float kPanelPaddingSmall = 4.0f;
72 static constexpr float kPanelPaddingMedium = 8.0f;
73 static constexpr float kPanelPaddingLarge = 12.0f;
74
75 // Splitter / header button spacing
76 static constexpr float kSplitterWidth = 6.0f;
77 static constexpr float kHeaderButtonSpacing = 6.0f;
78 static constexpr float kHeaderButtonGap = 2.0f;
79
80 // Animation
81 static constexpr float kAnimationSpeed = 8.0f; // Lerp speed multiplier
82 static constexpr float kAnimationSnapThreshold = 0.01f;
83};
84
85// ---------------------------------------------------------------------------
86// Viewport-relative sizing helpers
87//
88// Use these instead of hardcoded ImVec2 sizes for dialogs and windows so that
89// the UI adapts to different display resolutions and viewport dimensions.
90// All helpers read from ImGui::GetMainViewport()->WorkSize at call time.
91// ---------------------------------------------------------------------------
92
99inline ImVec2 ViewportRelativeSize(float width_factor, float height_factor) {
100 const ImVec2 work = ImGui::GetMainViewport()->WorkSize;
101 return ImVec2(work.x * width_factor, work.y * height_factor);
102}
103
110inline ImVec2 DialogSize(float width_factor = 0.6f,
111 float height_factor = 0.65f) {
112 return ViewportRelativeSize(width_factor, height_factor);
113}
114
126 ImVec2 min_size;
127 ImVec2 max_size;
128};
129
131 float max_factor = 0.95f) {
132 const ImVec2 work = ImGui::GetMainViewport()->WorkSize;
133 ImVec2 max_size(work.x * max_factor, work.y * max_factor);
134 // Ensure min never exceeds max.
135 max_size.x = std::max(max_size.x, min_size.x);
136 max_size.y = std::max(max_size.y, min_size.y);
137 return {min_size, max_size};
138}
139
148inline ImVec2 ScaledSize(float base_width, float base_height) {
149 const float scale = ImGui::GetIO().FontGlobalScale;
150 return ImVec2(base_width * scale, base_height * scale);
151}
152
153// ---------------------------------------------------------------------------
154// Content region sizing (for BeginChild and panel content areas)
155// ---------------------------------------------------------------------------
156
168inline ImVec2 GetContentRegionAvailClamped(const ImVec2& min_size) {
169 const ImVec2 avail = ImGui::GetContentRegionAvail();
170 return ImVec2(std::max(avail.x, min_size.x), std::max(avail.y, min_size.y));
171}
172
173} // namespace yaze::gui
174
175#endif // YAZE_APP_GUI_CORE_UI_CONFIG_H_
Graphical User Interface (GUI) components for the application.
SizeConstraints ConstrainToViewport(ImVec2 min_size, float max_factor=0.95f)
Definition ui_config.h:130
ImVec2 ViewportRelativeSize(float width_factor, float height_factor)
Returns an ImVec2 sized as a fraction of the main viewport WorkSize.
Definition ui_config.h:99
ImVec2 ScaledSize(float base_width, float base_height)
Returns a DPI-scaled version of a fixed pixel size.
Definition ui_config.h:148
ImVec2 DialogSize(float width_factor=0.6f, float height_factor=0.65f)
Returns a standard dialog size as a fraction of the viewport.
Definition ui_config.h:110
ImVec2 GetContentRegionAvailClamped(const ImVec2 &min_size)
Returns content region available size clamped to a minimum.
Definition ui_config.h:168
Returns min/max size pair suitable for ImGui::SetNextWindowSizeConstraints.
Definition ui_config.h:125
Centralized UI dimension constants.
Definition ui_config.h:16
static constexpr float kPanelWidthSettings
Definition ui_config.h:31
static constexpr float kPanelWidthHelp
Definition ui_config.h:32
static constexpr float kPanelMinWidthProject
Definition ui_config.h:50
static constexpr float kHeaderButtonSpacing
Definition ui_config.h:77
static constexpr float kStatusBarHeight
Definition ui_config.h:21
static constexpr float kPanelMinWidthHelp
Definition ui_config.h:47
static constexpr float kIconButtonLarge
Definition ui_config.h:63
static constexpr float kContentMinHeightCanvas
Definition ui_config.h:56
static constexpr float kIconButtonSmall
Definition ui_config.h:61
static constexpr float kPanelWidthNotifications
Definition ui_config.h:33
static constexpr float kActivityBarIconWidth
Definition ui_config.h:67
static constexpr float kPanelWidthMedium
Definition ui_config.h:25
static constexpr float kAnimationSnapThreshold
Definition ui_config.h:82
static constexpr float kPanelMinWidthNotifications
Definition ui_config.h:48
static constexpr float kPanelMinWidthAgentChat
Definition ui_config.h:44
static constexpr float kContentMinHeightChat
Definition ui_config.h:53
static constexpr float kPanelPaddingSmall
Definition ui_config.h:71
static constexpr float kPanelPaddingLarge
Definition ui_config.h:73
static constexpr float kPanelWidthNarrow
Definition ui_config.h:24
static constexpr float kHeaderButtonGap
Definition ui_config.h:78
static constexpr float kMaxPanelWidthRatio
Definition ui_config.h:39
static constexpr float kActivityBarWidth
Definition ui_config.h:18
static constexpr float kAnimationSpeed
Definition ui_config.h:81
static constexpr float kPanelMinWidthSettings
Definition ui_config.h:46
static constexpr float kPanelPaddingMedium
Definition ui_config.h:72
static constexpr float kPanelWidthProject
Definition ui_config.h:35
static constexpr float kSplitterWidth
Definition ui_config.h:76
static constexpr float kIconButtonMedium
Definition ui_config.h:62
static constexpr float kPanelMinWidthProposals
Definition ui_config.h:45
static constexpr float kContentMinWidthSidebar
Definition ui_config.h:58
static constexpr float kPanelHeaderHeight
Definition ui_config.h:38
static constexpr float kPanelMinWidthAbsolute
Definition ui_config.h:43
static constexpr float kIconButtonToolbar
Definition ui_config.h:64
static constexpr float kPanelWidthWide
Definition ui_config.h:26
static constexpr float kContentMinHeightList
Definition ui_config.h:54
static constexpr float kPanelMinWidthProperties
Definition ui_config.h:49
static constexpr float kPanelWidthProposals
Definition ui_config.h:30
static constexpr float kActivityBarIconHeight
Definition ui_config.h:68
static constexpr float kPanelWidthProperties
Definition ui_config.h:34
static constexpr float kPanelWidthAgentChat
Definition ui_config.h:29