diff --git a/aegisub/visual_tool_rotatexy.cpp b/aegisub/visual_tool_rotatexy.cpp index c31129bde..73a6ac2be 100644 --- a/aegisub/visual_tool_rotatexy.cpp +++ b/aegisub/visual_tool_rotatexy.cpp @@ -198,9 +198,17 @@ void VisualToolRotateXY::UpdateHold() { float screenAngleX = (orgy-mouseY*sh/h)*2.0; float screenAngleY = (mouseX*sw/w-orgx)*2.0; + // Deltas + float deltaX = screenAngleX - startAngleX; + float deltaY = screenAngleY - startAngleY; + if (ctrlDown) { + if (fabs(deltaX) >= fabs(deltaY)) deltaY = 0; + else deltaX = 0; + } + // Calculate - curAngleX = screenAngleX - startAngleX + origAngleX; - curAngleY = screenAngleY - startAngleY + origAngleY; + curAngleX = deltaX + origAngleX; + curAngleY = deltaY + origAngleY; while (curAngleX < 0.0) curAngleX += 360.0; while (curAngleX >= 360.0) curAngleX -= 360.0; while (curAngleY < 0.0) curAngleY += 360.0; diff --git a/aegisub/visual_tool_scale.cpp b/aegisub/visual_tool_scale.cpp index 29fed54d9..9f38260e2 100644 --- a/aegisub/visual_tool_scale.cpp +++ b/aegisub/visual_tool_scale.cpp @@ -151,9 +151,17 @@ void VisualToolScale::InitializeHold() { /////////////// // Update hold void VisualToolScale::UpdateHold() { + // Deltas + int deltaX = mouseX - startX; + int deltaY = startY - mouseY; + if (ctrlDown) { + if (abs(deltaX) >= abs(deltaY)) deltaY = 0; + else deltaX = 0; + } + // Calculate - curScaleX = (float(mouseX - startX)/0.8f) + origScaleX; - curScaleY = (float(startY - mouseY)/0.8f) + origScaleY; + curScaleX = (float(deltaX)/0.8f) + origScaleX; + curScaleY = (float(deltaY)/0.8f) + origScaleY; if (curScaleX < 0.0f) curScaleX = 0.0f; if (curScaleY < 0.0f) curScaleY = 0.0f;