- Moved background rendering functionality from the editor to a dedicated GUI module, enhancing modularity and separation of concerns. - Introduced layout helpers for consistent theme-aware sizing across the GUI, improving UI consistency and maintainability. - Updated CMake configuration to reflect the new structure, ensuring proper linkage of the background renderer and layout helpers. Benefits: - Improved organization of GUI components, facilitating easier updates and enhancements. - Enhanced user interface consistency through theme-aware layout management.
97 lines
3.6 KiB
C++
97 lines
3.6 KiB
C++
#ifndef YAZE_APP_EDITOR_UI_BACKGROUND_RENDERER_H
|
|
#define YAZE_APP_EDITOR_UI_BACKGROUND_RENDERER_H
|
|
|
|
#include "imgui/imgui.h"
|
|
#include "app/gui/color.h"
|
|
|
|
namespace yaze {
|
|
namespace gui {
|
|
|
|
/**
|
|
* @class BackgroundRenderer
|
|
* @brief Renders themed background effects for docking windows
|
|
*/
|
|
class BackgroundRenderer {
|
|
public:
|
|
struct GridSettings {
|
|
float grid_size = 32.0f; // Size of grid cells
|
|
float line_thickness = 1.0f; // Thickness of grid lines
|
|
float opacity = 0.12f; // Subtle but visible opacity
|
|
float fade_distance = 400.0f; // Distance over which grid fades
|
|
bool enable_animation = false; // Animation toggle (default off)
|
|
bool enable_breathing = false; // Color breathing effect toggle (default off)
|
|
bool radial_fade = true; // Re-enable subtle radial fade
|
|
bool enable_dots = false; // Use dots instead of lines
|
|
float dot_size = 2.0f; // Size of grid dots
|
|
float animation_speed = 1.0f; // Animation speed multiplier
|
|
float breathing_speed = 1.5f; // Breathing effect speed
|
|
float breathing_intensity = 0.3f; // How much color changes during breathing
|
|
};
|
|
|
|
static BackgroundRenderer& Get();
|
|
|
|
// Main rendering functions
|
|
void RenderDockingBackground(ImDrawList* draw_list, const ImVec2& window_pos,
|
|
const ImVec2& window_size, const Color& theme_color);
|
|
void RenderGridBackground(ImDrawList* draw_list, const ImVec2& window_pos,
|
|
const ImVec2& window_size, const Color& grid_color);
|
|
void RenderRadialGradient(ImDrawList* draw_list, const ImVec2& center,
|
|
float radius, const Color& inner_color, const Color& outer_color);
|
|
|
|
// Configuration
|
|
void SetGridSettings(const GridSettings& settings) { grid_settings_ = settings; }
|
|
const GridSettings& GetGridSettings() const { return grid_settings_; }
|
|
|
|
// Animation
|
|
void UpdateAnimation(float delta_time);
|
|
void SetAnimationEnabled(bool enabled) { grid_settings_.enable_animation = enabled; }
|
|
|
|
// Theme integration
|
|
void UpdateForTheme(const Color& primary_color, const Color& background_color);
|
|
|
|
// UI for settings
|
|
void DrawSettingsUI();
|
|
|
|
private:
|
|
BackgroundRenderer() = default;
|
|
|
|
GridSettings grid_settings_;
|
|
float animation_time_ = 0.0f;
|
|
Color cached_grid_color_{0.5f, 0.5f, 0.5f, 0.1f};
|
|
|
|
// Helper functions
|
|
float CalculateRadialFade(const ImVec2& pos, const ImVec2& center, float max_distance) const;
|
|
ImU32 BlendColorWithFade(const Color& base_color, float fade_factor) const;
|
|
void DrawGridLine(ImDrawList* draw_list, const ImVec2& start, const ImVec2& end,
|
|
ImU32 color, float thickness) const;
|
|
void DrawGridDot(ImDrawList* draw_list, const ImVec2& pos, ImU32 color, float size) const;
|
|
};
|
|
|
|
/**
|
|
* @class DockSpaceRenderer
|
|
* @brief Enhanced docking space with themed background effects
|
|
*/
|
|
class DockSpaceRenderer {
|
|
public:
|
|
static void BeginEnhancedDockSpace(ImGuiID dockspace_id, const ImVec2& size = ImVec2(0, 0),
|
|
ImGuiDockNodeFlags flags = 0);
|
|
static void EndEnhancedDockSpace();
|
|
|
|
// Configuration
|
|
static void SetBackgroundEnabled(bool enabled) { background_enabled_ = enabled; }
|
|
static void SetGridEnabled(bool enabled) { grid_enabled_ = enabled; }
|
|
static void SetEffectsEnabled(bool enabled) { effects_enabled_ = enabled; }
|
|
|
|
private:
|
|
static bool background_enabled_;
|
|
static bool grid_enabled_;
|
|
static bool effects_enabled_;
|
|
static ImVec2 last_dockspace_pos_;
|
|
static ImVec2 last_dockspace_size_;
|
|
};
|
|
|
|
} // namespace gui
|
|
} // namespace yaze
|
|
|
|
#endif // YAZE_APP_EDITOR_UI_BACKGROUND_RENDERER_H
|