#include #include "WindowManager.h" WindowManager::WindowManager( char* title, float screen_width, float screen_height ) { _title = title; _screenWidth = screen_width; _screenHeight = screen_height; _aspectRatio = (double)screen_width / screen_height; InitWindow(_screenWidth, _screenHeight, _title); Screen = LoadRenderTexture(_screenWidth, _screenHeight); ScaledScreen = LoadRenderTexture(_screenWidth, _screenHeight); _scaledHeight = screen_height; _scaledWidth = screen_width; } void WindowManager::UpdateScale() { // Changed bool hasChanged = (_screenWidth != GetScreenWidth()) || (_screenHeight != GetScreenHeight()); if ( hasChanged ) { // Update Scaled Size int width = GetScreenWidth(); int height = GetScreenHeight(); double aspectRatio = (double)width / height; int newWidth = 0; int newHeight = 0; if (aspectRatio > _aspectRatio) { _scaledWidth = height * _aspectRatio; _scaledHeight = height; } else { _scaledWidth = width; _scaledHeight = width / _aspectRatio; } // Update Texture Size ScaledScreen = LoadRenderTexture(_scaledWidth, _scaledHeight); } } void WindowManager::Display () { BeginTextureMode(ScaledScreen); DrawTexturePro(Screen.texture, { 0, 0, static_cast(_screenWidth), -static_cast(_screenHeight) }, { 0, 0, static_cast(ScaledScreen.texture.width), static_cast(ScaledScreen.texture.height) }, { 0, 0 }, 0.0f, WHITE); EndTextureMode(); float xStart = -(GetScreenWidth() - _scaledWidth) / 2; float yStart = -(GetScreenHeight() - _scaledHeight) / 2; BeginDrawing(); ClearBackground(BLACK); DrawTexturePro(Screen.texture, { 0, 0, static_cast(_screenWidth), -static_cast(_screenHeight) }, { 0, 0, static_cast(ScaledScreen.texture.width), static_cast(ScaledScreen.texture.height) }, { xStart, yStart }, 0.0f, WHITE); EndDrawing(); }