Fix: Notificaciones con colores dinámicos y transiciones LERP
Problema resuelto: 1. Color del tema saliente: Notificaciones mostraban color del tema ANTIGUO 2. Sin transiciones LERP: Notificaciones no participaban en transiciones suaves Cambios implementados: - Arquitectura cambiada de estática a dinámica - Notifier ahora consulta ThemeManager cada frame en render() - Eliminados colores estáticos de struct Notification - Notifier::init() recibe puntero a ThemeManager - Notifier::show() ya no recibe parámetros de color - Simplificado showNotificationForAction() (-23 líneas) Fix crítico de inicialización: - ThemeManager ahora se inicializa ANTES de updatePhysicalWindowSize() - Previene nullptr en notifier_.init() que causaba que no se mostraran Resultado: - ✅ Notificaciones usan color del tema DESTINO (no origen) - ✅ Transiciones LERP suaves automáticas durante cambios de tema - ✅ Código más limpio y centralizado en ThemeManager - ✅ -50 líneas de código duplicado eliminadas 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -5,8 +5,9 @@
|
||||
#include <queue>
|
||||
#include <memory>
|
||||
|
||||
// Forward declaration
|
||||
// Forward declarations
|
||||
class TextRenderer;
|
||||
class ThemeManager;
|
||||
|
||||
/**
|
||||
* @brief Sistema de notificaciones estilo iOS/Android
|
||||
@@ -34,20 +35,22 @@ public:
|
||||
NotificationState state;
|
||||
float alpha; // Opacidad 0.0-1.0
|
||||
float y_offset; // Offset Y para animación slide (píxeles)
|
||||
SDL_Color color;
|
||||
SDL_Color bg_color; // Color de fondo de la notificación (RGB)
|
||||
// NOTA: Los colores se obtienen dinámicamente desde ThemeManager en render()
|
||||
};
|
||||
|
||||
Notifier();
|
||||
~Notifier();
|
||||
|
||||
/**
|
||||
* @brief Inicializa el notifier con un TextRenderer
|
||||
* @brief Inicializa el notifier con un TextRenderer y ThemeManager
|
||||
* @param renderer SDL renderer para dibujar
|
||||
* @param text_renderer TextRenderer configurado con tamaño absoluto
|
||||
* @param theme_manager ThemeManager para obtener colores dinámicos con LERP
|
||||
* @param window_width Ancho de ventana física
|
||||
* @param window_height Alto de ventana física
|
||||
* @return true si inicialización exitosa
|
||||
*/
|
||||
bool init(SDL_Renderer* renderer, TextRenderer* text_renderer, int window_width, int window_height);
|
||||
bool init(SDL_Renderer* renderer, TextRenderer* text_renderer, ThemeManager* theme_manager, int window_width, int window_height);
|
||||
|
||||
/**
|
||||
* @brief Actualiza las dimensiones de la ventana (llamar en resize)
|
||||
@@ -60,10 +63,9 @@ public:
|
||||
* @brief Muestra una nueva notificación
|
||||
* @param text Texto a mostrar
|
||||
* @param duration Duración en milisegundos (0 = usar default)
|
||||
* @param color Color del texto
|
||||
* @param bg_color Color de fondo de la notificación
|
||||
* @note Los colores se obtienen dinámicamente desde ThemeManager cada frame
|
||||
*/
|
||||
void show(const std::string& text, Uint64 duration = 0, SDL_Color color = {255, 255, 255, 255}, SDL_Color bg_color = {0, 0, 0, 255});
|
||||
void show(const std::string& text, Uint64 duration = 0);
|
||||
|
||||
/**
|
||||
* @brief Actualiza las animaciones de notificaciones
|
||||
@@ -90,6 +92,7 @@ public:
|
||||
private:
|
||||
SDL_Renderer* renderer_;
|
||||
TextRenderer* text_renderer_;
|
||||
ThemeManager* theme_manager_; // Gestor de temas para obtener colores dinámicos con LERP
|
||||
int window_width_;
|
||||
int window_height_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user