mirror of https://github.com/odrling/Aegisub
video zoom: Fix aspect ratio forcing
Do this by partially reverting the changes to UpdateSize in favor of just multiplying by videoZoomValue *after* setting all the window sizes.
This commit is contained in:
parent
c07a648270
commit
98d476102e
|
@ -323,7 +323,9 @@ void VideoDisplay::UpdateSize() {
|
||||||
if (!provider || !IsShownOnScreen()) return;
|
if (!provider || !IsShownOnScreen()) return;
|
||||||
|
|
||||||
videoSize.Set(provider->GetWidth(), provider->GetHeight());
|
videoSize.Set(provider->GetWidth(), provider->GetHeight());
|
||||||
videoSize *= videoZoomValue * windowZoomValue;
|
videoSize *= windowZoomValue;
|
||||||
|
if (con->videoController->GetAspectRatioType() != AspectRatio::Default)
|
||||||
|
videoSize.SetWidth(videoSize.GetHeight() * con->videoController->GetAspectRatioValue());
|
||||||
|
|
||||||
wxEventBlocker blocker(this);
|
wxEventBlocker blocker(this);
|
||||||
if (freeSize) {
|
if (freeSize) {
|
||||||
|
@ -338,12 +340,12 @@ void VideoDisplay::UpdateSize() {
|
||||||
SetClientSize(oldClientSize + (top->GetSize() - oldSize));
|
SetClientSize(oldClientSize + (top->GetSize() - oldSize));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wxSize newSize = wxSize(provider->GetWidth(), provider->GetHeight()) * windowZoomValue / scale_factor;
|
SetMinClientSize(videoSize / scale_factor);
|
||||||
SetMinClientSize(newSize);
|
SetMaxClientSize(videoSize / scale_factor);
|
||||||
SetMaxClientSize(newSize);
|
|
||||||
|
|
||||||
GetGrandParent()->Layout();
|
GetGrandParent()->Layout();
|
||||||
}
|
}
|
||||||
|
videoSize *= videoZoomValue;
|
||||||
|
|
||||||
PositionVideo();
|
PositionVideo();
|
||||||
}
|
}
|
||||||
|
@ -477,7 +479,10 @@ void VideoDisplay::SetVideoZoom(int step) {
|
||||||
int pixelChangeW = std::lround(videoSize.GetWidth() * (newVideoZoom / videoZoomValue - 1.0));
|
int pixelChangeW = std::lround(videoSize.GetWidth() * (newVideoZoom / videoZoomValue - 1.0));
|
||||||
int pixelChangeH = std::lround(videoSize.GetHeight() * (newVideoZoom / videoZoomValue - 1.0));
|
int pixelChangeH = std::lround(videoSize.GetHeight() * (newVideoZoom / videoZoomValue - 1.0));
|
||||||
|
|
||||||
pan_x -= pixelChangeW * (mp.X() / videoSize.GetWidth());
|
AsyncVideoProvider *provider = con->project->VideoProvider();
|
||||||
|
double arfactor = (double) provider->GetHeight() * (double) videoSize.GetWidth() / (double) provider->GetWidth() / (double) videoSize.GetHeight();
|
||||||
|
|
||||||
|
pan_x -= pixelChangeW * (mp.X() / videoSize.GetWidth() * arfactor);
|
||||||
pan_y -= pixelChangeH * (mp.Y() / videoSize.GetHeight());
|
pan_y -= pixelChangeH * (mp.Y() / videoSize.GetHeight());
|
||||||
|
|
||||||
videoZoomValue = newVideoZoom;
|
videoZoomValue = newVideoZoom;
|
||||||
|
|
Loading…
Reference in New Issue