Per window DPI
This commit is contained in:
@@ -124,7 +124,7 @@ namespace FlaxEditor.GUI.ContextMenu
|
|||||||
PerformLayout();
|
PerformLayout();
|
||||||
|
|
||||||
// Calculate popup direction and initial location (fit on a single monitor)
|
// Calculate popup direction and initial location (fit on a single monitor)
|
||||||
var dpiScale = Platform.DpiScale;
|
var dpiScale = parentWin.Window.DpiScale;
|
||||||
Vector2 dpiSize = Size * dpiScale;
|
Vector2 dpiSize = Size * dpiScale;
|
||||||
Vector2 locationWS = parent.PointToWindow(location);
|
Vector2 locationWS = parent.PointToWindow(location);
|
||||||
Vector2 locationSS = parentWin.PointToScreen(locationWS);
|
Vector2 locationSS = parentWin.PointToScreen(locationWS);
|
||||||
@@ -275,7 +275,7 @@ namespace FlaxEditor.GUI.ContextMenu
|
|||||||
{
|
{
|
||||||
if (_window != null)
|
if (_window != null)
|
||||||
{
|
{
|
||||||
_window.ClientSize = Size * Platform.DpiScale;
|
_window.ClientSize = Size * _window.DpiScale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ namespace FlaxEditor.GUI.Dialogs
|
|||||||
// Setup initial window settings
|
// Setup initial window settings
|
||||||
CreateWindowSettings settings = CreateWindowSettings.Default;
|
CreateWindowSettings settings = CreateWindowSettings.Default;
|
||||||
settings.Title = _title;
|
settings.Title = _title;
|
||||||
settings.Size = _dialogSize * Platform.DpiScale;
|
settings.Size = _dialogSize * parentWindow.DpiScale;
|
||||||
settings.AllowMaximize = false;
|
settings.AllowMaximize = false;
|
||||||
settings.AllowMinimize = false;
|
settings.AllowMinimize = false;
|
||||||
settings.HasSizingFrame = false;
|
settings.HasSizingFrame = false;
|
||||||
|
|||||||
@@ -123,9 +123,8 @@ namespace FlaxEditor.GUI.Docking
|
|||||||
if (parentWin == null)
|
if (parentWin == null)
|
||||||
throw new InvalidOperationException("Missing parent window.");
|
throw new InvalidOperationException("Missing parent window.");
|
||||||
var control = _tabsProxy != null ? (Control)_tabsProxy : this;
|
var control = _tabsProxy != null ? (Control)_tabsProxy : this;
|
||||||
var dpiScale = Platform.DpiScale;
|
|
||||||
var clientPos = control.PointToWindow(Vector2.Zero);
|
var clientPos = control.PointToWindow(Vector2.Zero);
|
||||||
return new Rectangle(parentWin.PointToScreen(clientPos), control.Size * dpiScale);
|
return new Rectangle(parentWin.PointToScreen(clientPos), control.Size * RootWindow.Window.DpiScale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -185,14 +185,14 @@ namespace FlaxEditor.GUI
|
|||||||
|
|
||||||
private WindowHitCodes OnHitTest(ref Vector2 mouse)
|
private WindowHitCodes OnHitTest(ref Vector2 mouse)
|
||||||
{
|
{
|
||||||
var pos = _window.ScreenToClient(mouse * Platform.DpiScale);
|
var dpiScale = _window.DpiScale;
|
||||||
|
var pos = _window.ScreenToClient(mouse * dpiScale);
|
||||||
|
|
||||||
if (_window.IsMinimized)
|
if (_window.IsMinimized)
|
||||||
return WindowHitCodes.NoWhere;
|
return WindowHitCodes.NoWhere;
|
||||||
|
|
||||||
if (!_window.IsMaximized)
|
if (!_window.IsMaximized)
|
||||||
{
|
{
|
||||||
var dpiScale = Platform.DpiScale;
|
|
||||||
var winSize = RootWindow.Size * dpiScale;
|
var winSize = RootWindow.Size * dpiScale;
|
||||||
|
|
||||||
// Distance from which the mouse is considered to be on the border/corner
|
// Distance from which the mouse is considered to be on the border/corner
|
||||||
@@ -227,7 +227,7 @@ namespace FlaxEditor.GUI
|
|||||||
var controlUnderMouse = GetChildAt(menuPos);
|
var controlUnderMouse = GetChildAt(menuPos);
|
||||||
var isMouseOverSth = controlUnderMouse != null && controlUnderMouse != _title;
|
var isMouseOverSth = controlUnderMouse != null && controlUnderMouse != _title;
|
||||||
var rb = GetRightButton();
|
var rb = GetRightButton();
|
||||||
if (rb != null && _minimizeButton != null && new Rectangle(rb.UpperRight * Platform.DpiScale, (_minimizeButton.BottomLeft - rb.UpperRight) * Platform.DpiScale).Contains(ref menuPos) && !isMouseOverSth)
|
if (rb != null && _minimizeButton != null && new Rectangle(rb.UpperRight * dpiScale, (_minimizeButton.BottomLeft - rb.UpperRight) * dpiScale).Contains(ref menuPos) && !isMouseOverSth)
|
||||||
return WindowHitCodes.Caption;
|
return WindowHitCodes.Caption;
|
||||||
|
|
||||||
return WindowHitCodes.Client;
|
return WindowHitCodes.Client;
|
||||||
|
|||||||
@@ -709,7 +709,7 @@ namespace FlaxEditor.Modules
|
|||||||
var dpiScale = Platform.DpiScale;
|
var dpiScale = Platform.DpiScale;
|
||||||
var settings = CreateWindowSettings.Default;
|
var settings = CreateWindowSettings.Default;
|
||||||
settings.Title = "Flax Editor";
|
settings.Title = "Flax Editor";
|
||||||
settings.Size = new Vector2(1300 * dpiScale, 900 * dpiScale);
|
settings.Size = new Vector2(1300 * dpiScale, 900 * dpiScale); // TODO: Place the window on the correct screen (and use that screen's size)
|
||||||
settings.StartPosition = WindowStartPosition.CenterScreen;
|
settings.StartPosition = WindowStartPosition.CenterScreen;
|
||||||
|
|
||||||
if (!Editor.Instance.Options.Options.Interface.UseNativeWindowSystem)
|
if (!Editor.Instance.Options.Options.Interface.UseNativeWindowSystem)
|
||||||
|
|||||||
@@ -108,11 +108,13 @@ namespace FlaxEditor.Surface.ContextMenu
|
|||||||
{
|
{
|
||||||
_resultPanel.DisposeChildren();
|
_resultPanel.DisposeChildren();
|
||||||
|
|
||||||
|
var dpiScale = RootWindow.Window.DpiScale;
|
||||||
|
|
||||||
if (items.Count == 0)
|
if (items.Count == 0)
|
||||||
{
|
{
|
||||||
Height = _searchBox.Height + 1;
|
Height = _searchBox.Height + 1;
|
||||||
_resultPanel.ScrollBars = ScrollBars.None;
|
_resultPanel.ScrollBars = ScrollBars.None;
|
||||||
RootWindow.Window.ClientSize = new Vector2(RootWindow.Window.ClientSize.X, Height * Platform.DpiScale);
|
RootWindow.Window.ClientSize = new Vector2(RootWindow.Window.ClientSize.X, Height * dpiScale);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +148,7 @@ namespace FlaxEditor.Surface.ContextMenu
|
|||||||
MatchedItems.Add(searchItem);
|
MatchedItems.Add(searchItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
RootWindow.Window.ClientSize = new Vector2(RootWindow.Window.ClientSize.X, Height * Platform.DpiScale);
|
RootWindow.Window.ClientSize = new Vector2(RootWindow.Window.ClientSize.X, Height * dpiScale);
|
||||||
|
|
||||||
PerformLayout();
|
PerformLayout();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1657,7 +1657,7 @@ namespace FlaxEditor.Utilities
|
|||||||
settings.AllowMinimize = false;
|
settings.AllowMinimize = false;
|
||||||
settings.HasSizingFrame = false;
|
settings.HasSizingFrame = false;
|
||||||
settings.StartPosition = WindowStartPosition.CenterScreen;
|
settings.StartPosition = WindowStartPosition.CenterScreen;
|
||||||
settings.Size = new Vector2(500, 600) * Platform.DpiScale;
|
settings.Size = new Vector2(500, 600) * Platform.DpiScale; // TODO: Place the window on the correct screen (and use that screen's size)
|
||||||
settings.Title = title;
|
settings.Title = title;
|
||||||
var dialog = Platform.CreateWindow(ref settings);
|
var dialog = Platform.CreateWindow(ref settings);
|
||||||
|
|
||||||
|
|||||||
@@ -281,6 +281,8 @@ protected:
|
|||||||
String _title;
|
String _title;
|
||||||
CursorType _cursor;
|
CursorType _cursor;
|
||||||
Vector2 _clientSize;
|
Vector2 _clientSize;
|
||||||
|
int _dpi;
|
||||||
|
float _dpiScale;
|
||||||
|
|
||||||
Vector2 _trackingMouseOffset;
|
Vector2 _trackingMouseOffset;
|
||||||
bool _isUsingMouseOffset;
|
bool _isUsingMouseOffset;
|
||||||
@@ -541,6 +543,22 @@ public:
|
|||||||
/// <returns>The screen space position.</returns>
|
/// <returns>The screen space position.</returns>
|
||||||
API_FUNCTION() virtual Vector2 ClientToScreen(const Vector2& clientPos) const = 0;
|
API_FUNCTION() virtual Vector2 ClientToScreen(const Vector2& clientPos) const = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the window DPI setting.
|
||||||
|
/// </summary>
|
||||||
|
API_PROPERTY() int GetDpi() const
|
||||||
|
{
|
||||||
|
return _dpi;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: This doesn't actually include the custom DPI scale
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the window DPI scale factor (1 is default). Includes custom DPI scale
|
||||||
|
/// </summary>
|
||||||
|
API_PROPERTY() float GetDpiScale() const
|
||||||
|
{
|
||||||
|
return Platform::CustomDpiScale * _dpiScale;
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ namespace FlaxEngine
|
|||||||
{
|
{
|
||||||
partial class Window
|
partial class Window
|
||||||
{
|
{
|
||||||
internal float _dpiScale;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Window closing delegate.
|
/// Window closing delegate.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -176,7 +174,6 @@ namespace FlaxEngine
|
|||||||
private Window()
|
private Window()
|
||||||
{
|
{
|
||||||
GUI = new WindowRootControl(this);
|
GUI = new WindowRootControl(this);
|
||||||
_dpiScale = Platform.DpiScale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Internal_OnShow()
|
internal void Internal_OnShow()
|
||||||
@@ -192,7 +189,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnDraw()
|
internal void Internal_OnDraw()
|
||||||
{
|
{
|
||||||
Matrix3x3.Scaling(_dpiScale, out var scale);
|
Matrix3x3.Scaling(DpiScale, out var scale);
|
||||||
Render2D.PushTransform(ref scale);
|
Render2D.PushTransform(ref scale);
|
||||||
GUI.Draw();
|
GUI.Draw();
|
||||||
Render2D.PopTransform();
|
Render2D.PopTransform();
|
||||||
@@ -200,7 +197,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnResize(int width, int height)
|
internal void Internal_OnResize(int width, int height)
|
||||||
{
|
{
|
||||||
GUI.Size = new Vector2(width / _dpiScale, height / _dpiScale);
|
GUI.Size = new Vector2(width / DpiScale, height / DpiScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Internal_OnCharInput(char c)
|
internal void Internal_OnCharInput(char c)
|
||||||
@@ -223,7 +220,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnMouseDown(ref Vector2 mousePos, MouseButton button)
|
internal void Internal_OnMouseDown(ref Vector2 mousePos, MouseButton button)
|
||||||
{
|
{
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
MouseDown?.Invoke(ref pos, button, ref handled);
|
MouseDown?.Invoke(ref pos, button, ref handled);
|
||||||
@@ -235,7 +232,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnMouseUp(ref Vector2 mousePos, MouseButton button)
|
internal void Internal_OnMouseUp(ref Vector2 mousePos, MouseButton button)
|
||||||
{
|
{
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
MouseUp?.Invoke(ref pos, button, ref handled);
|
MouseUp?.Invoke(ref pos, button, ref handled);
|
||||||
@@ -247,7 +244,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnMouseDoubleClick(ref Vector2 mousePos, MouseButton button)
|
internal void Internal_OnMouseDoubleClick(ref Vector2 mousePos, MouseButton button)
|
||||||
{
|
{
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
MouseDoubleClick?.Invoke(ref pos, button, ref handled);
|
MouseDoubleClick?.Invoke(ref pos, button, ref handled);
|
||||||
@@ -259,7 +256,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnMouseWheel(ref Vector2 mousePos, float delta)
|
internal void Internal_OnMouseWheel(ref Vector2 mousePos, float delta)
|
||||||
{
|
{
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
MouseWheel?.Invoke(ref pos, delta, ref handled);
|
MouseWheel?.Invoke(ref pos, delta, ref handled);
|
||||||
@@ -271,7 +268,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnMouseMove(ref Vector2 mousePos)
|
internal void Internal_OnMouseMove(ref Vector2 mousePos)
|
||||||
{
|
{
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
|
|
||||||
MouseMove?.Invoke(ref pos);
|
MouseMove?.Invoke(ref pos);
|
||||||
GUI.OnMouseMove(pos);
|
GUI.OnMouseMove(pos);
|
||||||
@@ -285,7 +282,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnTouchDown(ref Vector2 pointerPosition, int pointerId)
|
internal void Internal_OnTouchDown(ref Vector2 pointerPosition, int pointerId)
|
||||||
{
|
{
|
||||||
Vector2 pos = pointerPosition / _dpiScale;
|
Vector2 pos = pointerPosition / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
TouchDown?.Invoke(ref pos, pointerId, ref handled);
|
TouchDown?.Invoke(ref pos, pointerId, ref handled);
|
||||||
@@ -297,7 +294,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnTouchMove(ref Vector2 pointerPosition, int pointerId)
|
internal void Internal_OnTouchMove(ref Vector2 pointerPosition, int pointerId)
|
||||||
{
|
{
|
||||||
Vector2 pos = pointerPosition / _dpiScale;
|
Vector2 pos = pointerPosition / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
TouchMove?.Invoke(ref pos, pointerId, ref handled);
|
TouchMove?.Invoke(ref pos, pointerId, ref handled);
|
||||||
@@ -309,7 +306,7 @@ namespace FlaxEngine
|
|||||||
|
|
||||||
internal void Internal_OnTouchUp(ref Vector2 pointerPosition, int pointerId)
|
internal void Internal_OnTouchUp(ref Vector2 pointerPosition, int pointerId)
|
||||||
{
|
{
|
||||||
Vector2 pos = pointerPosition / _dpiScale;
|
Vector2 pos = pointerPosition / DpiScale;
|
||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
TouchUp?.Invoke(ref pos, pointerId, ref handled);
|
TouchUp?.Invoke(ref pos, pointerId, ref handled);
|
||||||
@@ -335,7 +332,7 @@ namespace FlaxEngine
|
|||||||
{
|
{
|
||||||
if (HitTest != null)
|
if (HitTest != null)
|
||||||
{
|
{
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
result = HitTest(ref pos);
|
result = HitTest(ref pos);
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
@@ -356,7 +353,7 @@ namespace FlaxEngine
|
|||||||
dragData = new DragDataText(data[0]);
|
dragData = new DragDataText(data[0]);
|
||||||
else
|
else
|
||||||
dragData = new DragDataFiles(data);
|
dragData = new DragDataFiles(data);
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
return GUI.OnDragEnter(ref pos, dragData);
|
return GUI.OnDragEnter(ref pos, dragData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,7 +364,7 @@ namespace FlaxEngine
|
|||||||
dragData = new DragDataText(data[0]);
|
dragData = new DragDataText(data[0]);
|
||||||
else
|
else
|
||||||
dragData = new DragDataFiles(data);
|
dragData = new DragDataFiles(data);
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
return GUI.OnDragMove(ref pos, dragData);
|
return GUI.OnDragMove(ref pos, dragData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,7 +375,7 @@ namespace FlaxEngine
|
|||||||
dragData = new DragDataText(data[0]);
|
dragData = new DragDataText(data[0]);
|
||||||
else
|
else
|
||||||
dragData = new DragDataFiles(data);
|
dragData = new DragDataFiles(data);
|
||||||
Vector2 pos = mousePos / _dpiScale;
|
Vector2 pos = mousePos / DpiScale;
|
||||||
return GUI.OnDragDrop(ref pos, dragData);
|
return GUI.OnDragDrop(ref pos, dragData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ int32 CalculateDpi(HMODULE shCoreDll)
|
|||||||
|
|
||||||
if (getDPIForMonitor)
|
if (getDPIForMonitor)
|
||||||
{
|
{
|
||||||
HMONITOR monitor = GetPrimaryMonitorHandle();
|
HMONITOR monitor = GetPrimaryMonitorHandle(); // TODO: Use the game window monitor
|
||||||
|
|
||||||
UINT x = 0, y = 0;
|
UINT x = 0, y = 0;
|
||||||
HRESULT hr = getDPIForMonitor(monitor, 0, &x, &y);
|
HRESULT hr = getDPIForMonitor(monitor, 0, &x, &y);
|
||||||
@@ -659,7 +659,7 @@ void WindowsPlatform::SetHighDpiAwarenessEnabled(bool enable)
|
|||||||
|
|
||||||
if (setProcessDpiAwareness)
|
if (setProcessDpiAwareness)
|
||||||
{
|
{
|
||||||
setProcessDpiAwareness(enable ? PROCESS_SYSTEM_DPI_AWARE : PROCESS_DPI_UNAWARE);
|
setProcessDpiAwareness(enable ? PROCESS_PER_MONITOR_DPI_AWARE : PROCESS_DPI_UNAWARE);
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemDpi = CalculateDpi(shCoreDll);
|
SystemDpi = CalculateDpi(shCoreDll);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
// TODO: finish better borderless window on windows (fix mouse pos offset when maximized and fix white flicker on window show)
|
// TODO: finish better borderless window on windows (fix mouse pos offset when maximized and fix white flicker on window show)
|
||||||
#define WINDOWS_USE_NEW_BORDER_LESS 0
|
#define WINDOWS_USE_NEW_BORDER_LESS 0
|
||||||
|
|
||||||
|
#define DefaultDPI 96
|
||||||
|
|
||||||
#if WINDOWS_USE_NEW_BORDER_LESS
|
#if WINDOWS_USE_NEW_BORDER_LESS
|
||||||
#pragma comment(lib, "Gdi32.lib")
|
#pragma comment(lib, "Gdi32.lib")
|
||||||
#endif
|
#endif
|
||||||
@@ -95,6 +97,23 @@ WindowsWindow::WindowsWindow(const CreateWindowSettings& settings)
|
|||||||
nullptr,
|
nullptr,
|
||||||
(HINSTANCE)Platform::Instance,
|
(HINSTANCE)Platform::Instance,
|
||||||
nullptr);
|
nullptr);
|
||||||
|
|
||||||
|
_dpi = DefaultDPI;
|
||||||
|
// TODO: Is this the correct way of doing this?
|
||||||
|
const HMODULE user32Dll = LoadLibraryW(L"user32.dll");
|
||||||
|
if (user32Dll)
|
||||||
|
{
|
||||||
|
typedef UINT(STDAPICALLTYPE* GetDpiForWindowProc)(HWND hwnd);
|
||||||
|
const GetDpiForWindowProc getDpiForWindowProc = (GetDpiForWindowProc)GetProcAddress(user32Dll, "GetDpiForWindow");
|
||||||
|
|
||||||
|
if (getDpiForWindowProc)
|
||||||
|
{
|
||||||
|
_dpi = getDpiForWindowProc(_handle);
|
||||||
|
}
|
||||||
|
FreeLibrary(user32Dll);
|
||||||
|
}
|
||||||
|
|
||||||
|
_dpiScale = (float)_dpi / (float)DefaultDPI;
|
||||||
|
|
||||||
// Validate result
|
// Validate result
|
||||||
if (!HasHWND())
|
if (!HasHWND())
|
||||||
@@ -966,6 +985,28 @@ LRESULT WindowsWindow::WndProc(UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WM_DPICHANGED:
|
||||||
|
{
|
||||||
|
// Maybe https://stackoverflow.com/a/45110656
|
||||||
|
_dpi = HIWORD(wParam);
|
||||||
|
_dpiScale = (float)_dpi / (float)DefaultDPI;
|
||||||
|
|
||||||
|
|
||||||
|
RECT* windowRect = (RECT*)lParam;
|
||||||
|
SetWindowPos(_handle,
|
||||||
|
nullptr,
|
||||||
|
windowRect->left,
|
||||||
|
windowRect->top,
|
||||||
|
windowRect->right - windowRect->left,
|
||||||
|
windowRect->bottom - windowRect->top,
|
||||||
|
SWP_NOZORDER | SWP_NOACTIVATE);
|
||||||
|
|
||||||
|
|
||||||
|
// Todo: Recalculate fonts
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case WM_ENTERSIZEMOVE:
|
case WM_ENTERSIZEMOVE:
|
||||||
{
|
{
|
||||||
_isResizing = true;
|
_isResizing = true;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ bool FontManagerService::Init()
|
|||||||
ASSERT(Library == nullptr);
|
ASSERT(Library == nullptr);
|
||||||
|
|
||||||
// Scale UI fonts to match the monitor DPI
|
// Scale UI fonts to match the monitor DPI
|
||||||
FontManager::FontScale = (float)Platform::GetDpi() / (float)DefaultDPI;
|
FontManager::FontScale = (float)Platform::GetDpi() / (float)DefaultDPI; // TODO: Adjust this at runtime
|
||||||
|
|
||||||
// Init Free Type
|
// Init Free Type
|
||||||
FreeTypeMemory.user = nullptr;
|
FreeTypeMemory.user = nullptr;
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ namespace FlaxEngine.GUI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the GUI window root control which contains that control (or null if not linked to any).
|
/// Gets the GUI window root control which contains that control (or null if not linked to any).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual WindowRootControl RootWindow => _parent?.RootWindow;
|
public virtual WindowRootControl RootWindow => _parent?.RootWindow; // TODO: Why doesn't this just go "_root?.RootWindow" or something?
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets screen position of the control (upper left corner).
|
/// Gets screen position of the control (upper left corner).
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ namespace FlaxEngine.GUI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void SyncBackbufferSize()
|
public void SyncBackbufferSize()
|
||||||
{
|
{
|
||||||
float scale = ResolutionScale * Platform.DpiScale;
|
float scale = ResolutionScale * (Root?.RootWindow?.Window?.DpiScale ?? 1); // TODO: Figure this out
|
||||||
int width = Mathf.CeilToInt(Width * scale);
|
int width = Mathf.CeilToInt(Width * scale);
|
||||||
int height = Mathf.CeilToInt(Height * scale);
|
int height = Mathf.CeilToInt(Height * scale);
|
||||||
if (_customResolution.HasValue)
|
if (_customResolution.HasValue)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ namespace FlaxEngine.GUI
|
|||||||
var parentWin = target.Root;
|
var parentWin = target.Root;
|
||||||
if (parentWin == null)
|
if (parentWin == null)
|
||||||
return;
|
return;
|
||||||
float dpiScale = Platform.DpiScale;
|
float dpiScale = target.RootWindow.Window.DpiScale;
|
||||||
Vector2 dpiSize = Size * dpiScale;
|
Vector2 dpiSize = Size * dpiScale;
|
||||||
Vector2 locationWS = target.PointToWindow(location);
|
Vector2 locationWS = target.PointToWindow(location);
|
||||||
Vector2 locationSS = parentWin.PointToScreen(locationWS);
|
Vector2 locationSS = parentWin.PointToScreen(locationWS);
|
||||||
@@ -185,7 +185,7 @@ namespace FlaxEngine.GUI
|
|||||||
{
|
{
|
||||||
if (_window)
|
if (_window)
|
||||||
{
|
{
|
||||||
_window.ClientSize = Size * Platform.DpiScale;
|
_window.ClientSize = Size * _window.DpiScale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ namespace FlaxEngine.GUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override Vector2 TrackingMouseOffset => _window.TrackingMouseOffset / _window._dpiScale;
|
public override Vector2 TrackingMouseOffset => _window.TrackingMouseOffset / _window.DpiScale;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override WindowRootControl RootWindow => this;
|
public override WindowRootControl RootWindow => this;
|
||||||
@@ -159,8 +159,8 @@ namespace FlaxEngine.GUI
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override Vector2 MousePosition
|
public override Vector2 MousePosition
|
||||||
{
|
{
|
||||||
get => _window.MousePosition / _window._dpiScale;
|
get => _window.MousePosition / _window.DpiScale;
|
||||||
set => _window.MousePosition = value * _window._dpiScale;
|
set => _window.MousePosition = value * _window.DpiScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -234,13 +234,13 @@ namespace FlaxEngine.GUI
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override Vector2 PointFromScreen(Vector2 location)
|
public override Vector2 PointFromScreen(Vector2 location)
|
||||||
{
|
{
|
||||||
return _window.ScreenToClient(location) / _window._dpiScale;
|
return _window.ScreenToClient(location) / _window.DpiScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override Vector2 PointToScreen(Vector2 location)
|
public override Vector2 PointToScreen(Vector2 location)
|
||||||
{
|
{
|
||||||
return _window.ClientToScreen(location * _window._dpiScale);
|
return _window.ClientToScreen(location * _window.DpiScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|||||||
Reference in New Issue
Block a user