GS: Manage draw rectangle in GS instead of wx

This commit is contained in:
Connor McLaughlin 2021-07-24 22:19:50 +10:00 committed by Kojin
parent 8bc01eb375
commit 34e779a654
8 changed files with 107 additions and 133 deletions

View File

@ -419,9 +419,6 @@ int GSopen2(void** dsp, uint32 flags)
int retval = _GSopen(dsp, "", current_renderer); int retval = _GSopen(dsp, "", current_renderer);
if (s_gs != NULL)
s_gs->SetAspectRatio(0); // PCSX2 manages the aspect ratios
gsopen_done = true; gsopen_done = true;
return retval; return retval;
@ -866,6 +863,19 @@ void GSsetExclusive(int enabled)
} }
} }
bool GSGetFMVSwitch()
{
return s_gs ? s_gs->GetFMVSwitch() : false;
}
void GSSetFMVSwitch(bool enabled)
{
if (s_gs)
{
s_gs->SetFMVSwitch(enabled);
}
}
#if defined(__unix__) || defined(__APPLE__) #if defined(__unix__) || defined(__APPLE__)
inline unsigned long timeGetTime() inline unsigned long timeGetTime()
@ -1511,10 +1521,6 @@ void GSApp::Init()
m_gs_interlace.push_back(GSSetting(6, "Blend bff", "slight blur, 1/2 fps")); m_gs_interlace.push_back(GSSetting(6, "Blend bff", "slight blur, 1/2 fps"));
m_gs_interlace.push_back(GSSetting(7, "Automatic", "Default")); m_gs_interlace.push_back(GSSetting(7, "Automatic", "Default"));
m_gs_aspectratio.push_back(GSSetting(0, "Stretch", ""));
m_gs_aspectratio.push_back(GSSetting(1, "4:3", ""));
m_gs_aspectratio.push_back(GSSetting(2, "16:9", ""));
m_gs_upscale_multiplier.push_back(GSSetting(1, "Native", "PS2")); m_gs_upscale_multiplier.push_back(GSSetting(1, "Native", "PS2"));
m_gs_upscale_multiplier.push_back(GSSetting(2, "2x Native", "~720p")); m_gs_upscale_multiplier.push_back(GSSetting(2, "2x Native", "~720p"));
m_gs_upscale_multiplier.push_back(GSSetting(3, "3x Native", "~1080p")); m_gs_upscale_multiplier.push_back(GSSetting(3, "3x Native", "~1080p"));

View File

@ -1817,6 +1817,8 @@ void GSgetTitleInfo2(char* dest, size_t length);
void GSsetFrameSkip(int frameskip); void GSsetFrameSkip(int frameskip);
void GSsetVsync(int vsync); void GSsetVsync(int vsync);
void GSsetExclusive(int enabled); void GSsetExclusive(int enabled);
bool GSGetFMVSwitch();
void GSSetFMVSwitch(bool enabled);
class GSApp class GSApp
{ {
@ -1871,7 +1873,6 @@ public:
std::vector<GSSetting> m_gs_renderers; std::vector<GSSetting> m_gs_renderers;
std::vector<GSSetting> m_gs_interlace; std::vector<GSSetting> m_gs_interlace;
std::vector<GSSetting> m_gs_aspectratio;
std::vector<GSSetting> m_gs_upscale_multiplier; std::vector<GSSetting> m_gs_upscale_multiplier;
std::vector<GSSetting> m_gs_max_anisotropy; std::vector<GSSetting> m_gs_max_anisotropy;
std::vector<GSSetting> m_gs_dithering; std::vector<GSSetting> m_gs_dithering;

View File

@ -15,13 +15,13 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "GSRenderer.h" #include "GSRenderer.h"
#include "gui/AppConfig.h"
#if defined(__unix__) #if defined(__unix__)
#include <X11/keysym.h> #include <X11/keysym.h>
#endif #endif
const unsigned int s_interlace_nb = 8; const unsigned int s_interlace_nb = 8;
const unsigned int s_post_shader_nb = 5; const unsigned int s_post_shader_nb = 5;
const unsigned int s_aspect_ratio_nb = 3;
const unsigned int s_mipmap_nb = 3; const unsigned int s_mipmap_nb = 3;
GSRenderer::GSRenderer() GSRenderer::GSRenderer()
@ -29,6 +29,7 @@ GSRenderer::GSRenderer()
, m_shift_key(false) , m_shift_key(false)
, m_control_key(false) , m_control_key(false)
, m_texture_shuffle(false) , m_texture_shuffle(false)
, m_fmv_switch(false)
, m_real_size(0, 0) , m_real_size(0, 0)
, m_wnd() , m_wnd()
, m_dev(NULL) , m_dev(NULL)
@ -36,7 +37,6 @@ GSRenderer::GSRenderer()
m_GStitleInfoBuffer[0] = 0; m_GStitleInfoBuffer[0] = 0;
m_interlace = theApp.GetConfigI("interlace") % s_interlace_nb; m_interlace = theApp.GetConfigI("interlace") % s_interlace_nb;
m_aspectratio = theApp.GetConfigI("AspectRatio") % s_aspect_ratio_nb;
m_shader = theApp.GetConfigI("TVShader") % s_post_shader_nb; m_shader = theApp.GetConfigI("TVShader") % s_post_shader_nb;
m_vsync = theApp.GetConfigI("vsync"); m_vsync = theApp.GetConfigI("vsync");
m_aa1 = theApp.GetConfigB("aa1"); m_aa1 = theApp.GetConfigB("aa1");
@ -304,6 +304,73 @@ GSVector2i GSRenderer::GetInternalResolution()
return m_real_size; return m_real_size;
} }
GSVector4i GSRenderer::ComputeDrawRectangle(int width, int height) const
{
const double f_width = static_cast<double>(width);
const double f_height = static_cast<double>(height);
const double clientAr = f_width / f_height;
double targetAr = clientAr;
if (m_fmv_switch)
{
if (g_Conf->GSWindow.FMVAspectRatioSwitch == FMV_AspectRatio_Switch_4_3)
{
targetAr = 4.0 / 3.0;
}
else if (g_Conf->GSWindow.FMVAspectRatioSwitch == FMV_AspectRatio_Switch_16_9)
{
targetAr = 16.0 / 9.0;
}
}
else
{
if (g_Conf->GSWindow.AspectRatio == AspectRatio_4_3)
{
targetAr = 4.0 / 3.0;
}
else if (g_Conf->GSWindow.AspectRatio == AspectRatio_16_9)
{
targetAr = 16.0 / 9.0;
}
}
const double arr = targetAr / clientAr;
double target_width = f_width;
double target_height = f_height;
if (arr < 1)
target_width = std::floor(f_width * arr + 0.5);
else if (arr > 1)
target_height = std::floor(f_height / arr + 0.5);
float zoom = g_Conf->GSWindow.Zoom.ToFloat() / 100.0;
if (zoom == 0) //auto zoom in untill black-bars are gone (while keeping the aspect ratio).
zoom = std::max((float)arr, (float)(1.0 / arr));
target_width *= zoom;
target_height *= zoom * g_Conf->GSWindow.StretchY.ToFloat() / 100.0;
double target_x, target_y;
if (target_width > f_width)
target_x = -((target_width - f_width) * 0.5);
else
target_x = (f_width - target_width) * 0.5;
if (target_height > f_height)
target_y = -((target_height - f_height) * 0.5);
else
target_y = (f_height - target_height) * 0.5;
const double unit = .01 * std::min(target_x, target_y);
target_x += unit * g_Conf->GSWindow.OffsetX.ToFloat();
target_y += unit * g_Conf->GSWindow.OffsetY.ToFloat();
return GSVector4i(
static_cast<int>(std::floor(target_x)),
static_cast<int>(std::floor(target_y)),
static_cast<int>(std::round(target_x + target_width)),
static_cast<int>(std::round(target_y + target_height)));
}
void GSRenderer::SetVSync(int vsync) void GSRenderer::SetVSync(int vsync)
{ {
m_vsync = vsync; m_vsync = vsync;
@ -356,6 +423,7 @@ void GSRenderer::VSync(int field)
#endif #endif
{ {
//GS owns the window's title, be verbose. //GS owns the window's title, be verbose.
static const char* aspect_ratio_names[AspectRatio_MaxCount] = { "Stretch", "4:3", "16:9" };
std::string s2 = m_regs->SMODE2.INT ? (std::string("Interlaced ") + (m_regs->SMODE2.FFMD ? "(frame)" : "(field)")) : "Progressive"; std::string s2 = m_regs->SMODE2.INT ? (std::string("Interlaced ") + (m_regs->SMODE2.FFMD ? "(frame)" : "(field)")) : "Progressive";
@ -364,7 +432,7 @@ void GSRenderer::VSync(int field)
m_perfmon.GetFrame(), GetInternalResolution().x, GetInternalResolution().y, fps, (int)(100.0 * fps / GetTvRefreshRate()), m_perfmon.GetFrame(), GetInternalResolution().x, GetInternalResolution().y, fps, (int)(100.0 * fps / GetTvRefreshRate()),
s2.c_str(), s2.c_str(),
theApp.m_gs_interlace[m_interlace].name.c_str(), theApp.m_gs_interlace[m_interlace].name.c_str(),
theApp.m_gs_aspectratio[m_aspectratio].name.c_str(), aspect_ratio_names[g_Conf->GSWindow.AspectRatio],
(int)m_perfmon.Get(GSPerfMon::SyncPoint), (int)m_perfmon.Get(GSPerfMon::SyncPoint),
(int)m_perfmon.Get(GSPerfMon::Prim), (int)m_perfmon.Get(GSPerfMon::Prim),
(int)m_perfmon.Get(GSPerfMon::Draw), (int)m_perfmon.Get(GSPerfMon::Draw),
@ -438,7 +506,7 @@ void GSRenderer::VSync(int field)
m_dev->m_osd.m_real_size.x = window_size.v[2]; m_dev->m_osd.m_real_size.x = window_size.v[2];
m_dev->m_osd.m_real_size.y = window_size.v[3]; m_dev->m_osd.m_real_size.y = window_size.v[3];
m_dev->Present(m_wnd->GetClientRect().fit(m_aspectratio), m_shader); m_dev->Present(ComputeDrawRectangle(window_size.z, window_size.w), m_shader);
// snapshot // snapshot
@ -534,7 +602,8 @@ bool GSRenderer::MakeSnapshot(const std::string& path)
bool GSRenderer::BeginCapture(std::string& filename) bool GSRenderer::BeginCapture(std::string& filename)
{ {
GSVector4i disp = m_wnd->GetClientRect().fit(m_aspectratio); const GSVector4i crect(m_wnd->GetClientRect());
GSVector4i disp = ComputeDrawRectangle(crect.z, crect.w);
float aspect = (float)disp.width() / std::max(1, disp.height()); float aspect = (float)disp.width() / std::max(1, disp.height());
return m_capture.BeginCapture(GetTvRefreshRate(), GetInternalResolution(), aspect, filename); return m_capture.BeginCapture(GetTvRefreshRate(), GetInternalResolution(), aspect, filename);
@ -587,10 +656,6 @@ void GSRenderer::KeyEvent(GSKeyEventData* e)
theApp.SetConfig("interlace", m_interlace); theApp.SetConfig("interlace", m_interlace);
printf("GS: Set deinterlace mode to %d (%s).\n", m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str()); printf("GS: Set deinterlace mode to %d (%s).\n", m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str());
return; return;
case VK_F6:
if (m_wnd->IsManaged())
m_aspectratio = (m_aspectratio + s_aspect_ratio_nb + step) % s_aspect_ratio_nb;
return;
case VK_DELETE: case VK_DELETE:
m_aa1 = !m_aa1; m_aa1 = !m_aa1;
theApp.SetConfig("aa1", m_aa1); theApp.SetConfig("aa1", m_aa1);

View File

@ -34,13 +34,13 @@ class GSRenderer : public GSState
protected: protected:
int m_dithering; int m_dithering;
int m_interlace; int m_interlace;
int m_aspectratio;
int m_vsync; int m_vsync;
bool m_aa1; bool m_aa1;
bool m_shaderfx; bool m_shaderfx;
bool m_fxaa; bool m_fxaa;
bool m_shadeboost; bool m_shadeboost;
bool m_texture_shuffle; bool m_texture_shuffle;
bool m_fmv_switch;
GSVector2i m_real_size; GSVector2i m_real_size;
virtual GSTexture* GetOutput(int i, int& y_offset) = 0; virtual GSTexture* GetOutput(int i, int& y_offset) = 0;
@ -63,14 +63,18 @@ public:
virtual int GetUpscaleMultiplier() { return 1; } virtual int GetUpscaleMultiplier() { return 1; }
virtual GSVector2i GetCustomResolution() { return GSVector2i(0, 0); } virtual GSVector2i GetCustomResolution() { return GSVector2i(0, 0); }
GSVector2i GetInternalResolution(); GSVector2i GetInternalResolution();
void SetAspectRatio(int aspect) { m_aspectratio = aspect; }
void SetVSync(int vsync); void SetVSync(int vsync);
__fi bool GetFMVSwitch() const { return m_fmv_switch; }
__fi void SetFMVSwitch(bool enabled) { m_fmv_switch = enabled; }
virtual bool BeginCapture(std::string& filename); virtual bool BeginCapture(std::string& filename);
virtual void EndCapture(); virtual void EndCapture();
void PurgePool(); void PurgePool();
GSVector4i ComputeDrawRectangle(int width, int height) const;
public: public:
std::mutex m_pGSsetTitle_Crit; std::mutex m_pGSsetTitle_Crit;

View File

@ -71,9 +71,6 @@ wxIMPLEMENT_APP(Pcsx2App);
std::unique_ptr<AppConfig> g_Conf; std::unique_ptr<AppConfig> g_Conf;
AspectRatioType iniAR;
bool switchAR;
uptr pDsp[2]; uptr pDsp[2];
// Returns a string message telling the user to consult guides for obtaining a legal BIOS. // Returns a string message telling the user to consult guides for obtaining a legal BIOS.
@ -451,21 +448,6 @@ extern bool FMVstarted;
extern bool EnableFMV; extern bool EnableFMV;
extern bool renderswitch; extern bool renderswitch;
void DoFmvSwitch(bool on)
{
if (g_Conf->GSWindow.FMVAspectRatioSwitch != FMV_AspectRatio_Switch_Off) {
if (on) {
switchAR = true;
iniAR = g_Conf->GSWindow.AspectRatio;
} else {
switchAR = false;
}
if (GSFrame* gsFrame = wxGetApp().GetGsFramePtr())
if (GSPanel* viewport = gsFrame->GetViewport())
viewport->DoResize();
}
}
void Pcsx2App::LogicalVsync() void Pcsx2App::LogicalVsync()
{ {
if( AppRpc_TryInvokeAsync( &Pcsx2App::LogicalVsync ) ) return; if( AppRpc_TryInvokeAsync( &Pcsx2App::LogicalVsync ) ) return;
@ -479,7 +461,7 @@ void Pcsx2App::LogicalVsync()
if (g_Conf->GSWindow.FMVAspectRatioSwitch != FMV_AspectRatio_Switch_Off) { if (g_Conf->GSWindow.FMVAspectRatioSwitch != FMV_AspectRatio_Switch_Off) {
if (EnableFMV) { if (EnableFMV) {
DevCon.Warning("FMV on"); DevCon.Warning("FMV on");
DoFmvSwitch(true); GSSetFMVSwitch(true);
EnableFMV = false; EnableFMV = false;
} }
@ -487,7 +469,7 @@ void Pcsx2App::LogicalVsync()
int diff = cpuRegs.cycle - eecount_on_last_vdec; int diff = cpuRegs.cycle - eecount_on_last_vdec;
if (diff > 60000000 ) { if (diff > 60000000 ) {
DevCon.Warning("FMV off"); DevCon.Warning("FMV off");
DoFmvSwitch(false); GSSetFMVSwitch(false);
FMVstarted = false; FMVstarted = false;
} }
} }

View File

@ -243,72 +243,11 @@ void GSPanel::DoShowMouse()
m_HideMouseTimer.Start( 1750, true ); m_HideMouseTimer.Start( 1750, true );
} }
void GSPanel::DoResize()
{
if( GetParent() == NULL ) return;
wxSize client = GetParent()->GetClientSize();
wxSize viewport = client;
if ( !client.GetHeight() || !client.GetWidth() )
return;
double clientAr = (double)client.GetWidth()/(double)client.GetHeight();
extern AspectRatioType iniAR;
extern bool switchAR;
double targetAr = clientAr;
if (g_Conf->GSWindow.AspectRatio != iniAR) {
switchAR = false;
}
if (switchAR) {
if (g_Conf->GSWindow.FMVAspectRatioSwitch == FMV_AspectRatio_Switch_4_3) {
targetAr = 4.0 / 3.0;
} else if (g_Conf->GSWindow.FMVAspectRatioSwitch == FMV_AspectRatio_Switch_16_9) {
targetAr = 16.0 / 9.0;
} else {
// Allows for better real time toggling, returns to the non fmv override aspect ratio.
switchAR = false;
}
} else {
if (g_Conf->GSWindow.AspectRatio == AspectRatio_4_3) {
targetAr = 4.0 / 3.0;
} else if (g_Conf->GSWindow.AspectRatio == AspectRatio_16_9) {
targetAr = 16.0 / 9.0;
}
}
double arr = targetAr / clientAr;
if( arr < 1 )
viewport.x = (int)( (double)viewport.x*arr + 0.5);
else if( arr > 1 )
viewport.y = (int)( (double)viewport.y/arr + 0.5);
float zoom = g_Conf->GSWindow.Zoom.ToFloat()/100.0;
if( zoom == 0 )//auto zoom in untill black-bars are gone (while keeping the aspect ratio).
zoom = std::max( (float)arr, (float)(1.0/arr) );
viewport.Scale(zoom, zoom*g_Conf->GSWindow.StretchY.ToFloat()/100.0 );
SetSize( viewport );
CenterOnParent();
int cx, cy;
GetPosition(&cx, &cy);
float unit = .01*(float)std::min(viewport.x, viewport.y);
SetPosition( wxPoint( cx + unit*g_Conf->GSWindow.OffsetX.ToFloat(), cy + unit*g_Conf->GSWindow.OffsetY.ToFloat() ) );
#ifdef GSWindowScaleDebug
Console.WriteLn(Color_Yellow, "GSWindowScaleDebug: zoom %f, viewport.x %d, viewport.y %d", zoom, viewport.GetX(), viewport.GetY());
#endif
}
void GSPanel::OnResize(wxSizeEvent& event) void GSPanel::OnResize(wxSizeEvent& event)
{ {
if( IsBeingDeleted() ) return; if( IsBeingDeleted() ) return;
DoResize(); event.Skip();
//Console.Error( "Size? %d x %d", GetSize().x, GetSize().y );
//event.
} }
void GSPanel::OnCloseWindow(wxCloseEvent& evt) void GSPanel::OnCloseWindow(wxCloseEvent& evt)
@ -524,7 +463,6 @@ void GSPanel::CoreThread_OnSuspended()
void GSPanel::AppStatusEvent_OnSettingsApplied() void GSPanel::AppStatusEvent_OnSettingsApplied()
{ {
if( IsBeingDeleted() ) return; if( IsBeingDeleted() ) return;
DoResize();
DoShowMouse(); DoShowMouse();
} }
@ -557,6 +495,8 @@ GSFrame::GSFrame( const wxString& title)
GSPanel* gsPanel = new GSPanel( this ); GSPanel* gsPanel = new GSPanel( this );
m_id_gspanel = gsPanel->GetId(); m_id_gspanel = gsPanel->GetId();
gsPanel->SetPosition(wxPoint(0, 0));
gsPanel->SetSize(GetClientSize());
// TODO -- Implement this GS window status window! Whee. // TODO -- Implement this GS window status window! Whee.
// (main concern is retaining proper client window sizes when closing/re-opening the window). // (main concern is retaining proper client window sizes when closing/re-opening the window).
@ -653,7 +593,6 @@ bool GSFrame::Show( bool shown )
m_id_gspanel = gsPanel->GetId(); m_id_gspanel = gsPanel->GetId();
} }
gsPanel->DoResize();
gsPanel->SetFocus(); gsPanel->SetFocus();
if (!m_timer_UpdateTitle.IsRunning()) if (!m_timer_UpdateTitle.IsRunning())
@ -844,15 +783,9 @@ void GSFrame::OnResize( wxSizeEvent& evt )
g_Conf->GSWindow.WindowSize = GetClientSize(); g_Conf->GSWindow.WindowSize = GetClientSize();
} }
// Ensure we're always in sync with the parent size.
if( GSPanel* gsPanel = GetViewport() ) if( GSPanel* gsPanel = GetViewport() )
{ gsPanel->SetSize(evt.GetSize());
gsPanel->DoResize();
gsPanel->SetFocus();
}
//wxPoint hudpos = wxPoint(-10,-10) + (GetClientSize() - m_hud->GetSize()); evt.Skip();
//m_hud->SetPosition( hudpos ); //+ GetScreenPosition() + GetClientAreaOrigin() );
// if we skip, the panel is auto-sized to fit our window anyway, which we do not want!
//evt.Skip();
} }

View File

@ -51,7 +51,6 @@ public:
GSPanel( wxWindow* parent ); GSPanel( wxWindow* parent );
virtual ~GSPanel(); virtual ~GSPanel();
void DoResize();
void DoShowMouse(); void DoShowMouse();
void DirectKeyCommand( wxKeyEvent& evt ); void DirectKeyCommand( wxKeyEvent& evt );
void DirectKeyCommand( const KeyAcceleratorCode& kac ); void DirectKeyCommand( const KeyAcceleratorCode& kac );

View File

@ -38,8 +38,6 @@
// renderswitch - tells GS to go into dx9 sw if "renderswitch" is set. // renderswitch - tells GS to go into dx9 sw if "renderswitch" is set.
bool renderswitch = false; bool renderswitch = false;
extern bool switchAR;
static bool g_Pcsx2Recording = false; // true if recording video and sound static bool g_Pcsx2Recording = false; // true if recording video and sound
@ -174,21 +172,11 @@ namespace Implementations
pauser.AllowResume(); pauser.AllowResume();
} }
void UpdateImagePosition()
{
//AppApplySettings() would have been nicer, since it also immidiately affects the GUI (if open).
//However, the events sequence it generates also "depresses" Shift/CTRL/etc, so consecutive zoom with CTRL down breaks.
//Since zoom only affects the window viewport anyway, we can live with directly calling it.
if (GSFrame* gsFrame = wxGetApp().GetGsFramePtr())
if (GSPanel* woot = gsFrame->GetViewport())
woot->DoResize();
}
void GSwindow_CycleAspectRatio() void GSwindow_CycleAspectRatio()
{ {
AspectRatioType& art = g_Conf->GSWindow.AspectRatio; AspectRatioType& art = g_Conf->GSWindow.AspectRatio;
const char* arts = "Not modified"; const char* arts = "Not modified";
if (art == AspectRatio_Stretch && switchAR) //avoids a double 4:3 when coming from FMV aspect ratio switch if (art == AspectRatio_Stretch && GSGetFMVSwitch()) //avoids a double 4:3 when coming from FMV aspect ratio switch
art = AspectRatio_4_3; art = AspectRatio_4_3;
switch (art) switch (art)
{ {
@ -209,7 +197,9 @@ namespace Implementations
} }
OSDlog(Color_StrongBlue, true, "(GSwindow) Aspect ratio: %s", arts); OSDlog(Color_StrongBlue, true, "(GSwindow) Aspect ratio: %s", arts);
UpdateImagePosition();
// Disable FMV mode if we were previously in it, so the user can override the AR.
GSSetFMVSwitch(false);
} }
void SetOffset(float x, float y) void SetOffset(float x, float y)
@ -217,8 +207,6 @@ namespace Implementations
g_Conf->GSWindow.OffsetX = x; g_Conf->GSWindow.OffsetX = x;
g_Conf->GSWindow.OffsetY = y; g_Conf->GSWindow.OffsetY = y;
OSDlog(Color_StrongBlue, true, "(GSwindow) Offset: x=%f, y=%f", x, y); OSDlog(Color_StrongBlue, true, "(GSwindow) Offset: x=%f, y=%f", x, y);
UpdateImagePosition();
} }
void GSwindow_OffsetYplus() void GSwindow_OffsetYplus()
@ -252,8 +240,6 @@ namespace Implementations
return; return;
g_Conf->GSWindow.StretchY = zoom; g_Conf->GSWindow.StretchY = zoom;
OSDlog(Color_StrongBlue, true, "(GSwindow) Vertical stretch: %f", zoom); OSDlog(Color_StrongBlue, true, "(GSwindow) Vertical stretch: %f", zoom);
UpdateImagePosition();
} }
void GSwindow_ZoomInY() void GSwindow_ZoomInY()
@ -279,8 +265,6 @@ namespace Implementations
OSDlog(Color_StrongBlue, true, "(GSwindow) Zoom: 0 (auto, no black bars)"); OSDlog(Color_StrongBlue, true, "(GSwindow) Zoom: 0 (auto, no black bars)");
else else
OSDlog(Color_StrongBlue, true, "(GSwindow) Zoom: %f", zoom); OSDlog(Color_StrongBlue, true, "(GSwindow) Zoom: %f", zoom);
UpdateImagePosition();
} }