Tocant coses d'Screen, pero no acaba de funcionar be res

This commit is contained in:
2025-03-11 14:16:02 +01:00
parent be857cc8c8
commit 059a9c863a
7 changed files with 187 additions and 184 deletions

View File

@@ -8,6 +8,7 @@
#include <string> // Para string
#include "param.h" // Para Param, ParamGame, param
#include "utils.h" // Para Color
#include "options.h"
enum class ScreenFilter : int
{
@@ -15,15 +16,18 @@ enum class ScreenFilter : int
LINEAL = 1,
};
enum class ScreenVideoMode : int
enum class ScreenVideoMode : Uint32
{
WINDOW = 0,
FULLSCREEN = 1,
FULLSCREEN = SDL_WINDOW_FULLSCREEN_DESKTOP,
};
class Screen
{
private:
// Constantes
static constexpr int WINDOWS_DECORATIONS_ = 35;
// [SINGLETON] Objeto privado
static Screen *screen_;
@@ -35,7 +39,6 @@ private:
// Variables
SDL_Rect src_rect_; // Coordenadas de donde va a pillar la textura del juego para dibujarla
SDL_Rect dst_rect_; // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana
Color border_color_ = Color(); // Color del borde añadido a la textura de juego para rellenar la pantalla
bool attenuate_effect_ = false; // Indica si la pantalla ha de estar atenuada
Uint32 fps_ticks_ = 0; // Ticks para contar los frames por segundo
int fps_counter_ = 0; // Contador de frames por segundo
@@ -44,7 +47,7 @@ private:
#ifdef DEBUG
bool show_info_ = false; // Indica si ha de mostrar/ocultar la información de la pantalla
#else
bool show_info_ = false; // Indica si ha de mostrar/ocultar la información de la pantalla
bool show_debug_info_ = false; // Indica si ha de mostrar/ocultar la información de la pantalla
#endif
struct FlashEffect
@@ -107,12 +110,24 @@ private:
// Muestra información por pantalla
void renderInfo();
// Calcula la nueva posición de la ventana a partir de la antigua al cambiarla de tamaño
SDL_Point getNewPosition();
// Selecciona y ejecuta el método de renderizado adecuado basado en la configuración de shaders
void renderScreen();
// Reinicia los shaders
void initShaders();
// Calcula el tamaño de la ventana
void adjustWindowSize();
// Ajusta el tamaño lógico del renderizador
void adjustRenderLogicalSize();
// Obtiene el tamaño máximo de zoom posible para la ventana
int getMaxZoom();
// Renderiza todos los overlays y efectos
void renderOverlays();
// Constructor
Screen(SDL_Window *window, SDL_Renderer *renderer);
@@ -142,22 +157,19 @@ public:
void render();
// Establece el modo de video
void setVideoMode(ScreenVideoMode video_mode);
void setVideoMode(ScreenVideoMode video_mode = options.video.mode);
// Cambia entre pantalla completa y ventana
void toggleVideoMode();
// Cambia el tamaño de la ventana
void setWindowSize(int size);
void setWindowZoom(int size);
// Reduce el tamaño de la ventana
void decWindowSize();
bool decWindowZoom();
// Aumenta el tamaño de la ventana
void incWindowSize();
// Cambia el color del borde
void setBorderColor(Color color);
bool incWindowZoom();
// Cambia el tipo de mezcla
void setBlendMode(SDL_BlendMode blend_mode);
@@ -179,4 +191,10 @@ public:
// Getters
SDL_Renderer *getRenderer() { return renderer_; }
// Muestra la ventana
void show() { SDL_ShowWindow(window_); }
// Oculta la ventana
void hide() { SDL_HideWindow(window_); }
};