yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
theme_manager.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_THEME_MANAGER_H
2#define YAZE_APP_GUI_THEME_MANAGER_H
3
4#include <map>
5#include <string>
6#include <vector>
7
8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
10#include "app/gui/core/color.h"
11#include "imgui/imgui.h"
12
13namespace yaze {
14namespace gui {
15
21 std::string name;
22 std::string description;
23 std::string author;
24
25 // Primary colors
35
36 // Text colors
40
41 // Window colors
46
47 // Interactive elements
54
55 // Navigation and selection
66
67 // Borders and separators
73
74 // Scrollbars and controls
79
80 // Special elements
86
87 // Complete ImGui color support
109
110 // Additional ImGui colors for complete coverage
117
118 // Enhanced theme system - semantic colors
119 Color text_highlight; // For selected text, highlighted items
120 Color link_hover; // For hover state of links
121 Color code_background; // For code blocks, monospace text backgrounds
122 Color success_light; // Lighter variant of success color
123 Color warning_light; // Lighter variant of warning color
124 Color error_light; // Lighter variant of error color
125 Color info_light; // Lighter variant of info color
126
127 // UI state colors
128 Color active_selection; // For active/selected UI elements
129 Color hover_highlight; // General hover state
130 Color focus_border; // For focused input elements
131 Color disabled_overlay; // Semi-transparent overlay for disabled elements
132
133 // Editor-specific colors
134 Color editor_background; // Main editor canvas background
135 Color editor_grid; // Grid lines in editors
136 Color editor_cursor; // Cursor/selection in editors
137 Color editor_selection; // Selected area in editors
138
144
145 // Style parameters
146 float window_rounding = 0.0f;
147 float frame_rounding = 5.0f;
148 float scrollbar_rounding = 5.0f;
149 float grab_rounding = 3.0f;
150 float tab_rounding = 0.0f;
151 float window_border_size = 0.0f;
152 float frame_border_size = 0.0f;
153
154 // Animation and effects
155 bool enable_animations = true;
156 float animation_speed = 1.0f;
158
159 // Theme-aware sizing system (relative to font size)
160 // compact_factor: 0.8 = very compact, 1.0 = normal, 1.2 = spacious
161 float compact_factor = 1.0f;
162
163 // Semantic sizing multipliers (applied on top of compact_factor)
164 float widget_height_multiplier = 1.0f; // Standard widget height
165 float spacing_multiplier = 1.0f; // Padding/margins between elements
166 float toolbar_height_multiplier = 0.8f; // Compact toolbars
167 float panel_padding_multiplier = 1.0f; // Panel interior padding
168 float input_width_multiplier = 1.0f; // Standard input field width
169 float button_padding_multiplier = 1.0f; // Button interior padding
170 float table_row_height_multiplier = 1.0f; // Table row height
171 float canvas_toolbar_multiplier = 0.75f; // Canvas overlay toolbars
172
173 // Helper methods
174 void ApplyToImGui() const;
175};
176
182public:
183 static ThemeManager& Get();
184
185 // Theme management
186 absl::Status LoadTheme(const std::string& theme_name);
187 absl::Status SaveTheme(const EnhancedTheme& theme, const std::string& filename);
188 absl::Status LoadThemeFromFile(const std::string& filepath);
189 absl::Status SaveThemeToFile(const EnhancedTheme& theme, const std::string& filepath) const;
190
191 // Dynamic theme discovery - replaces hardcoded theme lists with automatic discovery
192 // This works across development builds, macOS app bundles, and other deployment scenarios
193 std::vector<std::string> DiscoverAvailableThemeFiles() const;
194 absl::Status LoadAllAvailableThemes();
195 absl::Status RefreshAvailableThemes(); // Public method to refresh at runtime
196
197 // Built-in themes
199 std::vector<std::string> GetAvailableThemes() const;
200 const EnhancedTheme* GetTheme(const std::string& name) const;
202 const std::string& GetCurrentThemeName() const { return current_theme_name_; }
203
204 // Theme application
205 void ApplyTheme(const std::string& theme_name);
206 void ApplyTheme(const EnhancedTheme& theme);
207 void ApplyClassicYazeTheme(); // Apply original ColorsYaze() function
208
209 // Theme creation and editing
210 EnhancedTheme CreateCustomTheme(const std::string& name);
211 void ShowThemeEditor(bool* p_open);
212 void ShowThemeSelector(bool* p_open);
213 void ShowSimpleThemeEditor(bool* p_open);
214
215 // Integration with welcome screen
219
220 // Convenient theme color access interface
221 Color GetThemeColor(const std::string& color_name) const;
222 ImVec4 GetThemeColorVec4(const std::string& color_name) const;
223
224 // Material Design color accessors
241
242private:
244
245 std::map<std::string, EnhancedTheme> themes_;
247 std::string current_theme_name_ = "Classic YAZE";
248
250 absl::Status ParseThemeFile(const std::string& content, EnhancedTheme& theme);
251 Color ParseColorFromString(const std::string& color_str) const;
252 std::string SerializeTheme(const EnhancedTheme& theme) const;
253
254 // Helper methods for path resolution
255 std::vector<std::string> GetThemeSearchPaths() const;
256 std::string GetThemesDirectory() const;
257 std::string GetCurrentThemeFilePath() const;
258};
259
260// Global convenience functions for easy theme color access
261 // Material Design color accessors - global convenience functions
262 inline Color GetThemeColor(const std::string& color_name) {
263 return ThemeManager::Get().GetThemeColor(color_name);
264 }
265
266 inline ImVec4 GetThemeColorVec4(const std::string& color_name) {
267 return ThemeManager::Get().GetThemeColorVec4(color_name);
268 }
269
270 // Material Design color accessors
287
288 // ImVec4 versions for direct ImGui usage
289 inline ImVec4 GetPrimaryVec4() { return ConvertColorToImVec4(GetPrimary()); }
292 inline ImVec4 GetSurfaceVec4() { return ConvertColorToImVec4(GetSurface()); }
300 inline ImVec4 GetOutlineVec4() { return ConvertColorToImVec4(GetOutline()); }
303 inline ImVec4 GetShadowVec4() { return ConvertColorToImVec4(GetShadow()); }
304} // namespace gui
305
306} // namespace yaze
307
308#endif // YAZE_APP_GUI_THEME_MANAGER_H
Manages themes, loading, saving, and switching.
Color GetSurfaceContainerHigh() const
Color ParseColorFromString(const std::string &color_str) const
Color GetSurfaceVariant() const
Color GetTextSecondary() const
absl::Status ParseThemeFile(const std::string &content, EnhancedTheme &theme)
void ShowThemeEditor(bool *p_open)
Color GetWelcomeScreenBackground() const
ImVec4 GetThemeColorVec4(const std::string &color_name) const
std::string GetCurrentThemeFilePath() const
EnhancedTheme current_theme_
absl::Status LoadTheme(const std::string &theme_name)
Color GetPrimaryHover() const
absl::Status LoadThemeFromFile(const std::string &filepath)
void ApplyTheme(const std::string &theme_name)
std::string GetThemesDirectory() const
std::string current_theme_name_
Color GetWelcomeScreenAccent() const
absl::Status SaveTheme(const EnhancedTheme &theme, const std::string &filename)
std::vector< std::string > DiscoverAvailableThemeFiles() const
absl::Status LoadAllAvailableThemes()
Color GetSurfaceContainer() const
Color GetOnSurfaceVariant() const
EnhancedTheme CreateCustomTheme(const std::string &name)
std::vector< std::string > GetThemeSearchPaths() const
std::string SerializeTheme(const EnhancedTheme &theme) const
static ThemeManager & Get()
Color GetThemeColor(const std::string &color_name) const
absl::Status SaveThemeToFile(const EnhancedTheme &theme, const std::string &filepath) const
const std::string & GetCurrentThemeName() const
void ShowThemeSelector(bool *p_open)
absl::Status RefreshAvailableThemes()
Color GetTextDisabled() const
const EnhancedTheme & GetCurrentTheme() const
Color GetSurfaceContainerHighest() const
Color GetWelcomeScreenBorder() const
void ShowSimpleThemeEditor(bool *p_open)
Color GetPrimaryActive() const
std::vector< std::string > GetAvailableThemes() const
std::map< std::string, EnhancedTheme > themes_
ImVec4 ConvertColorToImVec4(const Color &color)
Definition color.h:21
ImVec4 GetSurfaceContainerHighestVec4()
Color GetPrimaryHover()
Color GetOnPrimary()
ImVec4 GetThemeColorVec4(const std::string &color_name)
Color GetOnSurfaceVariant()
ImVec4 GetOnPrimaryVec4()
Color GetTextDisabled()
ImVec4 GetPrimaryActiveVec4()
Color GetSurfaceContainerHighest()
const EnhancedTheme & GetTheme()
Get current theme (shortcut)
Color GetOnSurface()
ImVec4 GetPrimaryVec4()
Color GetSecondary()
Color GetSurfaceContainer()
ImVec4 GetSurfaceVariantVec4()
ImVec4 GetSurfaceVec4()
ImVec4 GetTextDisabledVec4()
Color GetTextSecondary()
Color GetOutline()
Color GetShadow()
ImVec4 GetTextSecondaryVec4()
ImVec4 GetShadowVec4()
ImVec4 GetSurfaceContainerHighVec4()
ImVec4 GetPrimaryHoverVec4()
Color GetPrimaryActive()
Color GetPrimary()
Color GetSurface()
ImVec4 GetOutlineVec4()
Color GetThemeColor(const std::string &color_name)
Color GetSurfaceContainerHigh()
ImVec4 GetOnSurfaceVariantVec4()
ImVec4 GetOnSurfaceVec4()
ImVec4 GetSurfaceContainerVec4()
Color GetSurfaceVariant()
Main namespace for the application.
Definition controller.cc:20
Comprehensive theme structure for YAZE.