Añadidas nuevas funciones a la calse screen para mostrar el borde

This commit is contained in:
2022-09-12 11:46:41 +02:00
parent f9eb36f529
commit 561f957bca
5 changed files with 59 additions and 11 deletions

View File

@@ -13,17 +13,20 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options, i
gameCanvasWidth = gameInternalResX;
gameCanvasHeight = gameInternalResY;
// Establece el modo de video
setVideoMode(options->fullScreenMode);
// Define el color del borde para el modo de pantalla completa
borderColor = {0x00, 0x00, 0x00};
borderEnabled = true;
borderWidth = 0.1f;
borderHeight = 0.1f;
// Crea la textura donde se dibujan los graficos del juego
gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight);
if (gameCanvas == NULL)
printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError());
// Establece el modo de video
setVideoMode(options->fullScreenMode);
// Calcula los anclajes
anchor.left = 0;
anchor.right = gameCanvasWidth;
@@ -78,9 +81,21 @@ void Screen::setVideoMode(int fullScreenMode)
// Si está activo el modo ventana quita el borde
if (fullScreenMode == 0)
{
screenWidth = gameCanvasWidth;
screenHeight = gameCanvasHeight;
dest = {0, 0, gameCanvasWidth, gameCanvasHeight};
if (borderEnabled)
{
const int incWidth = gameCanvasWidth * borderWidth;
const int incHeight = gameCanvasHeight * borderHeight;
screenWidth = gameCanvasWidth + incWidth;
screenHeight = gameCanvasHeight + incHeight;
dest = {0 + (incWidth / 2), 0 + (incHeight / 2), gameCanvasWidth, gameCanvasHeight};
}
else
{
screenWidth = gameCanvasWidth;
screenHeight = gameCanvasHeight;
dest = {0, 0, gameCanvasWidth, gameCanvasHeight};
}
// Modifica el tamaño del renderizador y de la ventana
SDL_RenderSetLogicalSize(renderer, screenWidth, screenHeight);
@@ -171,4 +186,24 @@ void Screen::setBorderColor(color_t color)
void Screen::setBlendMode(SDL_BlendMode blendMode)
{
SDL_SetRenderDrawBlendMode(renderer, blendMode);
}
// Establece el tamaño del borde
void Screen::setBorderSize(float w, float h)
{
borderWidth = w;
borderHeight = h;
}
// Establece si se ha de ver el borde en el modo ventana
void Screen::setBorderEnabled(bool value)
{
borderEnabled = value;
}
// Cambia entre borde visible y no visible
void Screen::switchBorder()
{
borderEnabled = !borderEnabled;
setVideoMode(0);
}