// sdl_manager.hpp - Gestor de inicialización de SDL3 // © 2025 Port a C++20 con SDL3 #pragma once #include #include #include #include "core/rendering/color_oscillator.hpp" class SDLManager { public: SDLManager(); // Constructor per defecte (usa Defaults::) SDLManager(int width, int height, bool fullscreen); // Constructor con configuración ~SDLManager(); // No permetre còpia ni assignació SDLManager(const SDLManager&) = delete; SDLManager& operator=(const SDLManager&) = delete; // [NUEVO] Gestió de finestra dinàmica void increaseWindowSize(); // F2: +100px void decreaseWindowSize(); // F1: -100px void toggleFullscreen(); // F3 void toggleVSync(); // F4 bool handleWindowEvent(const SDL_Event& event); // Per a SDL_EVENT_WINDOW_RESIZED // Funciones principals (renderizado) void clear(uint8_t r = 0, uint8_t g = 0, uint8_t b = 0); void present(); // [NUEVO] Actualització de colors (oscil·lació) void updateColors(float delta_time); // [NUEVO] Actualitzar counter de FPS void updateFPS(float delta_time); // Getters SDL_Renderer* getRenderer() { return renderer_; } [[nodiscard]] float getScaleFactor() const { return zoom_factor_; } // [NUEVO] Actualitzar título de la finestra void setWindowTitle(const std::string& title); // [NUEVO] Actualitzar context de renderizado (factor de scale global) void updateRenderingContext() const; private: SDL_Window* finestra_; SDL_Renderer* renderer_; // [NUEVO] Variables FPS float fps_accumulator_; int fps_frame_count_; int fps_display_; // [NUEVO] Estat de la finestra int current_width_; // Mida física actual int current_height_; bool is_fullscreen_; int max_width_; // Calculat des del display int max_height_; // [ZOOM SYSTEM] float zoom_factor_; // Current zoom (0.5x to max_zoom_) int windowed_width_; // Saved size before fullscreen int windowed_height_; // Saved size before fullscreen float max_zoom_; // Maximum zoom (calculated from display) // [NUEVO] Funciones internes void calculateMaxWindowSize(); // Llegir resolució del display void calculateMaxZoom(); // Calculate max zoom from display void applyZoom(float new_zoom); // Apply zoom and resize window void applyWindowSize(int width, int height); // Canviar mida + centrar void updateLogicalPresentation(); // Actualitzar viewport void updateViewport(); // Configurar viewport con letterbox // [NUEVO] Oscil·lador de colors Rendering::ColorOscillator color_oscillator_; };