Adjusted screen coordinates so menu doesn't overlap (#66)

* Optimized final blit to the screen render target.

When bumping the table, instead of offseting the table pixels by CPU, just memcpy all the pixels to vScreenTex once, and then render two separate quads from that texture: one for the board and the other for the sidebar. Then change the coordinates of the board quad when bumping.

* Main menu bar doesn't cover game area

* Forgot to also take into account changing UI scale.
This commit is contained in:
MaikelChan 2021-10-24 17:38:23 +02:00 committed by GitHub
parent 38cf08e298
commit 5789492021
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 1 deletions

View File

@ -110,6 +110,8 @@ void fullscrn::window_size_changed()
{ {
int width, height; int width, height;
SDL_GetRendererOutputSize(winmain::Renderer, &width, &height); SDL_GetRendererOutputSize(winmain::Renderer, &width, &height);
int menuHeight = options::Options.ShowMenu ? winmain::MainMenuHeight : 0;
height -= menuHeight;
auto res = &resolution_array[resolution]; auto res = &resolution_array[resolution];
ScaleX = static_cast<float>(width) / res->TableWidth; ScaleX = static_cast<float>(width) / res->TableWidth;
ScaleY = static_cast<float>(height) / res->TableHeight; ScaleY = static_cast<float>(height) / res->TableHeight;
@ -124,7 +126,7 @@ void fullscrn::window_size_changed()
render::DestinationRect = SDL_Rect render::DestinationRect = SDL_Rect
{ {
OffsetX, OffsetY, OffsetX, OffsetY + menuHeight,
width - OffsetX * 2, height - OffsetY * 2 width - OffsetX * 2, height - OffsetY * 2
}; };
} }

View File

@ -204,6 +204,7 @@ void options::toggle(Menu1 uIDCheckItem)
return; return;
case Menu1::Show_Menu: case Menu1::Show_Menu:
Options.ShowMenu = Options.ShowMenu == 0; Options.ShowMenu = Options.ShowMenu == 0;
fullscrn::window_size_changed();
return; return;
case Menu1::Full_Screen: case Menu1::Full_Screen:
Options.FullScreen ^= true; Options.FullScreen ^= true;

View File

@ -37,6 +37,7 @@ bool winmain::LaunchBallEnabled = true;
bool winmain::HighScoresEnabled = true; bool winmain::HighScoresEnabled = true;
bool winmain::DemoActive = false; bool winmain::DemoActive = false;
char* winmain::BasePath; char* winmain::BasePath;
int winmain::MainMenuHeight = 0;
std::string winmain::FpsDetails; std::string winmain::FpsDetails;
double winmain::UpdateToFrameRatio; double winmain::UpdateToFrameRatio;
winmain::DurationMs winmain::TargetFrameTime; winmain::DurationMs winmain::TargetFrameTime;
@ -341,6 +342,14 @@ void winmain::RenderUi()
if (ImGui::BeginMainMenuBar()) if (ImGui::BeginMainMenuBar())
{ {
int currentMenuHeight = static_cast<int>(ImGui::GetWindowSize().y);
if (MainMenuHeight != currentMenuHeight)
{
// Get the height of the main menu bar and update screen coordinates
MainMenuHeight = currentMenuHeight;
fullscrn::window_size_changed();
}
if (ImGui::BeginMenu("Game")) if (ImGui::BeginMenu("Game"))
{ {
if (ImGui::MenuItem("New Game", "F2")) if (ImGui::MenuItem("New Game", "F2"))

View File

@ -49,6 +49,7 @@ public:
static bool HighScoresEnabled; static bool HighScoresEnabled;
static bool DemoActive; static bool DemoActive;
static char* BasePath; static char* BasePath;
static int MainMenuHeight;
static int WinMain(LPCSTR lpCmdLine); static int WinMain(LPCSTR lpCmdLine);
static int event_handler(const SDL_Event* event); static int event_handler(const SDL_Event* event);