From 73a1bf923602a57eeb89efbf71ac9846c9332aad Mon Sep 17 00:00:00 2001 From: EpicCoder Date: Fri, 6 Jan 2017 17:07:24 +0100 Subject: [PATCH] UI: Fix scaling in viewport when source flipped Fixes bug 617 on mantis. Scaling the source manually in the viewport wouldn't work properly when the source is flipped horizontally or vertically. Closes jp9000/obs-studio#751 --- UI/window-basic-preview.cpp | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/UI/window-basic-preview.cpp b/UI/window-basic-preview.cpp index 01cd73026..6cba59bba 100644 --- a/UI/window-basic-preview.cpp +++ b/UI/window-basic-preview.cpp @@ -740,18 +740,35 @@ void OBSBasicPreview::ClampAspect(vec3 &tl, vec3 &br, vec2 &size, stretchHandle == ItemHandle::TopRight || stretchHandle == ItemHandle::BottomLeft || stretchHandle == ItemHandle::BottomRight) { - if (aspect < baseAspect) - size.x = size.y * baseAspect; - else - size.y = size.x / baseAspect; + if (aspect < baseAspect) { + if ((size.y >= 0.0f && size.x >= 0.0f) || + (size.y <= 0.0f && size.x <= 0.0f)) + size.x = size.y * baseAspect; + else + size.x = size.y * baseAspect * -1.0f; + } else { + if ((size.y >= 0.0f && size.x >= 0.0f) || + (size.y <= 0.0f && size.x <= 0.0f)) + size.y = size.x / baseAspect; + else + size.y = size.x / baseAspect * -1.0f; + } } else if (stretchHandle == ItemHandle::TopCenter || stretchHandle == ItemHandle::BottomCenter) { - size.x = size.y * baseAspect; + if ((size.y >= 0.0f && size.x >= 0.0f) || + (size.y <= 0.0f && size.x <= 0.0f)) + size.x = size.y * baseAspect; + else + size.x = size.y * baseAspect * -1.0f; } else if (stretchHandle == ItemHandle::CenterLeft || stretchHandle == ItemHandle::CenterRight) { - size.y = size.x / baseAspect; + if ((size.y >= 0.0f && size.x >= 0.0f) || + (size.y <= 0.0f && size.x <= 0.0f)) + size.y = size.x / baseAspect; + else + size.y = size.x / baseAspect * -1.0f; } size.x = std::round(size.x);