gitadora: prevent window resize (#529)

## Link to GitHub Issue, if one exists
n/a

## Description of change
Gitadora (pre-Delta) tends to soft lock, have graphical issues (menu bg
render as black), or take a long time (minutes) between scene
transitions when window is resized.
This commit is contained in:
bicarus
2026-01-22 00:51:12 -08:00
committed by GitHub
parent 9fd9290cd3
commit cb59fe14e9
3 changed files with 41 additions and 0 deletions
+1
View File
@@ -102,4 +102,5 @@ void graphics_update_window_style(HWND hWnd);
void graphics_update_z_order(HWND hWnd, bool always_on_top); void graphics_update_z_order(HWND hWnd, bool always_on_top);
void graphics_move_resize_window(HWND hWnd); void graphics_move_resize_window(HWND hWnd);
bool graphics_window_change_crashes_game(); bool graphics_window_change_crashes_game();
bool graphics_window_resize_breaks_game();
void graphics_load_windowed_subscreen_parameters(); void graphics_load_windowed_subscreen_parameters();
@@ -1,6 +1,7 @@
#include "graphics.h" #include "graphics.h"
#include "avs/game.h" #include "avs/game.h"
#include "games/gitadora/gitadora.h"
#include "cfg/screen_resize.h" #include "cfg/screen_resize.h"
#include "overlay/overlay.h" #include "overlay/overlay.h"
#include "util/logging.h" #include "util/logging.h"
@@ -85,6 +86,12 @@ void graphics_capture_initial_window(HWND hWnd) {
// ensure frame size is captured // ensure frame size is captured
graphics_wm_style_changed(hWnd, false); graphics_wm_style_changed(hWnd, false);
// if the game is not compatible, ignore user-supplied values and keep the current size
if (graphics_window_resize_breaks_game()) {
cfg::SCREENRESIZE->client_width = client_w;
cfg::SCREENRESIZE->client_height = client_h;
}
// if there was no user-supplied dimension, seed it with the current size // if there was no user-supplied dimension, seed it with the current size
// so that the next resize operation will work // so that the next resize operation will work
if (cfg::SCREENRESIZE->client_width == 0) { if (cfg::SCREENRESIZE->client_width == 0) {
@@ -392,6 +399,9 @@ void graphics_update_window_style(HWND hWnd) {
break; break;
case cfg::WindowDecorationMode::ResizableFrame: case cfg::WindowDecorationMode::ResizableFrame:
style |= WS_OVERLAPPEDWINDOW; style |= WS_OVERLAPPEDWINDOW;
if (graphics_window_resize_breaks_game()) {
style &= ~WS_SIZEBOX;
}
break; break;
case cfg::WindowDecorationMode::Default: case cfg::WindowDecorationMode::Default:
default: default:
@@ -493,3 +503,24 @@ bool graphics_window_change_crashes_game() {
}); });
return result; return result;
} }
bool graphics_window_resize_breaks_game() {
bool is_gitadora = avs::game::is_model({ "J32", "J33", "K32", "K33", "L32", "L33", "M32" });
bool is_arena = games::gitadora::is_arena_model();
// for whatever reason, gitadora games on dx/sd/sd2 cabs behave poorly when window is resized
// (eihter at launch or while it's running)
// usually results in: soft lock during scene transtions or really long transitions,
// backgrounds of menus not rendering, etc.
bool result = is_gitadora && !is_arena;
static std::once_flag flag;
std::call_once(flag, [&result]() {
if (result) {
log_warning(
"graphics-windowed",
"ignoring changes to window size due to incompatibility with this game");
}
});
return result;
}
@@ -233,6 +233,14 @@ namespace overlay::windows {
bool changed = false; bool changed = false;
const uint32_t step = 1; const uint32_t step = 1;
const uint32_t step_fast = 10; const uint32_t step_fast = 10;
if (graphics_window_resize_breaks_game()) {
ImGui::TextColored(ImVec4(1, 0.5f, 0.5f, 1.f),
"GITADORA tends to hang or have graphical\n"
"glitches when window is resized; resize\n"
"controls are disabled.");
}
ImGui::BeginDisabled(graphics_window_resize_breaks_game());
ImGui::BeginDisabled(cfg::SCREENRESIZE->client_keep_aspect_ratio); ImGui::BeginDisabled(cfg::SCREENRESIZE->client_keep_aspect_ratio);
ImGui::InputScalar( ImGui::InputScalar(
"Width", "Width",
@@ -248,6 +256,7 @@ namespace overlay::windows {
&cfg::SCREENRESIZE->client_height, &cfg::SCREENRESIZE->client_height,
&step, &step_fast, nullptr); &step, &step_fast, nullptr);
changed |= ImGui::IsItemDeactivatedAfterEdit(); changed |= ImGui::IsItemDeactivatedAfterEdit();
ImGui::EndDisabled();
ImGui::InputScalar( ImGui::InputScalar(
"X Offset", "X Offset",