#pragma once #include #include #include #include #include "color.h" #include "text.h" class WindowMessage { public: WindowMessage( std::shared_ptr text_renderer, const std::string& title = "", const Color& bg_color = Color{40, 40, 60, 220}, const Color& border_color = Color{100, 100, 120, 255}, const Color& title_color = Color{255, 255, 255, 255}, const Color& text_color = Color{200, 200, 200, 255} ); // Métodos principales void render(); void update(); // Control de visibilidad void show(); void hide(); [[nodiscard]] auto isVisible() const -> bool { return visible_; } // Configuración de contenido void setTitle(const std::string& title); void setText(const std::string& text); void setTexts(const std::vector& texts); void addText(const std::string& text); void clearTexts(); // Configuración de posición y tamaño void setPosition(float x, float y); void setSize(float width, float height); void centerOnScreen(); void autoSize(); // Ajusta automáticamente al contenido // Configuración de colores void setBackgroundColor(const Color& color) { bg_color_ = color; } void setBorderColor(const Color& color) { border_color_ = color; } void setTitleColor(const Color& color) { title_color_ = color; } void setTextColor(const Color& color) { text_color_ = color; } // Configuración de espaciado void setPadding(float padding) { padding_ = padding; } void setLineSpacing(float spacing) { line_spacing_ = spacing; } // Getters [[nodiscard]] auto getRect() const -> const SDL_FRect& { return rect_; } private: std::shared_ptr text_renderer_; // Estado de visibilidad bool visible_ = false; // Contenido std::string title_; std::vector texts_; // Posición y tamaño SDL_FRect rect_{0, 0, 300, 200}; float padding_ = 15.0f; float line_spacing_ = 5.0f; // Colores Color bg_color_; Color border_color_; Color title_color_; Color text_color_; // Estilos Text::Style title_style_; Text::Style text_style_; // Métodos privados void calculateAutoSize(); [[nodiscard]] auto calculateContentHeight() const -> float; [[nodiscard]] auto calculateContentWidth() const -> float; };