RMB look doesn't pitch up sometimes on weird scaling/dpi combo
# Conflicts: # Source/Editor/Viewport/EditorViewport.cs
This commit is contained in:
@@ -1560,8 +1560,9 @@ namespace FlaxEditor.Viewport
|
||||
var center = Float2.Round(size * 0.5f);
|
||||
if (Mathf.Abs(_viewMousePos.X - center.X) > center.X * 0.8f || Mathf.Abs(_viewMousePos.Y - center.Y) > center.Y * 0.8f)
|
||||
{
|
||||
_viewMousePos = center;
|
||||
win.MousePosition = PointToWindow(_viewMousePos);
|
||||
var windowPosition = SnapMousePositionToDevicePixels(PointToWindow(center), win.DpiScale);
|
||||
_viewMousePos = PointFromWindow(windowPosition);
|
||||
win.MousePosition = windowPosition * win.DpiScale;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -1578,6 +1579,11 @@ namespace FlaxEditor.Viewport
|
||||
win.MouseMoveRelative -= OnMouseMoveRelative;
|
||||
}
|
||||
|
||||
internal static Float2 SnapMousePositionToDevicePixels(Float2 position, float dpiScale)
|
||||
{
|
||||
return Float2.Round(position * dpiScale) / dpiScale;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when left mouse button goes down (on press).
|
||||
/// </summary>
|
||||
@@ -1858,8 +1864,9 @@ namespace FlaxEditor.Viewport
|
||||
// Move mouse back to the root position
|
||||
if (centerMouse && (_input.IsMouseRightDown || _input.IsMouseLeftDown || _input.IsMouseMiddleDown || _isVirtualMouseRightDown))
|
||||
{
|
||||
var center = PointToWindow(_startPos);
|
||||
win.MousePosition = center;
|
||||
var windowPosition = SnapMousePositionToDevicePixels(PointToWindow(_startPos), win.Window.DpiScale);
|
||||
_startPos = PointFromWindow(windowPosition);
|
||||
win.MousePosition = windowPosition;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) Wojciech Figat. All rights reserved.
|
||||
|
||||
#if FLAX_TESTS
|
||||
using FlaxEditor.Viewport;
|
||||
using FlaxEngine;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace FlaxEditor.Tests
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestEditorViewport
|
||||
{
|
||||
[Test]
|
||||
public void TestMouseAnchorSnapsToDevicePixels()
|
||||
{
|
||||
const float dpiScale = 1.25f;
|
||||
var logicalPosition = new Float2(984.7999f, 580.7999f);
|
||||
|
||||
var snapped = EditorViewport.SnapMousePositionToDevicePixels(logicalPosition, dpiScale);
|
||||
var physicalPosition = snapped * dpiScale;
|
||||
|
||||
Assert.AreEqual(1231.0f, physicalPosition.X, 0.0001f);
|
||||
Assert.AreEqual(726.0f, physicalPosition.Y, 0.0001f);
|
||||
Assert.AreEqual(snapped, EditorViewport.SnapMousePositionToDevicePixels(snapped, dpiScale));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user