Fix panel resizing on alternate monitors

This commit is contained in:
Sinai 2022-01-22 21:08:12 +11:00
parent d67507ead2
commit 91bb58b020
5 changed files with 31 additions and 22 deletions

View File

@ -13,6 +13,11 @@ namespace UnityExplorer.UI
public static int ActiveDisplayIndex { get; private set; } public static int ActiveDisplayIndex { get; private set; }
public static Display ActiveDisplay => Display.displays[ActiveDisplayIndex]; public static Display ActiveDisplay => Display.displays[ActiveDisplayIndex];
public static int Width => ActiveDisplay.renderingWidth;
public static int Height => ActiveDisplay.renderingHeight;
public static Vector3 MousePosition => Display.RelativeMouseAt(InputManager.MousePosition);
private static Camera canvasCamera; private static Camera canvasCamera;
internal static void Init() internal static void Init()
@ -21,8 +26,6 @@ namespace UnityExplorer.UI
ConfigManager.Target_Display.OnValueChanged += SetDisplay; ConfigManager.Target_Display.OnValueChanged += SetDisplay;
} }
public static Vector3 MousePosition => Display.RelativeMouseAt(InputManager.MousePosition);
public static void SetDisplay(int display) public static void SetDisplay(int display)
{ {
if (ActiveDisplayIndex == display) if (ActiveDisplayIndex == display)

View File

@ -260,7 +260,7 @@ namespace UnityExplorer.UI.Panels
#region RESIZE #region RESIZE
private readonly Dictionary<ResizeTypes, Rect> m_resizeMask = new Dictionary<ResizeTypes, Rect> private readonly Dictionary<ResizeTypes, Rect> m_resizeMask = new()
{ {
{ ResizeTypes.Top, default }, { ResizeTypes.Top, default },
{ ResizeTypes.Left, default }, { ResizeTypes.Left, default },
@ -413,13 +413,13 @@ namespace UnityExplorer.UI.Panels
if ((Vector2)mousePos == lastResizePos) if ((Vector2)mousePos == lastResizePos)
return; return;
if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > Screen.width || mousePos.y > Screen.height) if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > DisplayManager.Width || mousePos.y > DisplayManager.Height)
return; return;
lastResizePos = mousePos; lastResizePos = mousePos;
float diffX = (float)((decimal)diff.x / Screen.width); float diffX = (float)((decimal)diff.x / DisplayManager.Width);
float diffY = (float)((decimal)diff.y / Screen.height); float diffY = (float)((decimal)diff.y / DisplayManager.Height);
Vector2 anchorMin = Panel.anchorMin; Vector2 anchorMin = Panel.anchorMin;
Vector2 anchorMax = Panel.anchorMax; Vector2 anchorMax = Panel.anchorMax;

View File

@ -11,6 +11,7 @@ using UnityExplorer.UI.Widgets;
using UniverseLib.UI.Models; using UniverseLib.UI.Models;
using UniverseLib.UI; using UniverseLib.UI;
using UniverseLib; using UniverseLib;
using System.Collections;
namespace UnityExplorer.UI.Panels namespace UnityExplorer.UI.Panels
{ {
@ -150,8 +151,8 @@ namespace UnityExplorer.UI.Panels
var pos = panel.localPosition; var pos = panel.localPosition;
// Prevent panel going oustide screen bounds // Prevent panel going oustide screen bounds
var halfW = Screen.width * 0.5f; var halfW = DisplayManager.Width * 0.5f;
var halfH = Screen.height * 0.5f; var halfH = DisplayManager.Height * 0.5f;
pos.x = Math.Max(-halfW - panel.rect.width + 50, Math.Min(pos.x, halfW - 50)); pos.x = Math.Max(-halfW - panel.rect.width + 50, Math.Min(pos.x, halfW - 50));
pos.y = Math.Max(-halfH + 50, Math.Min(pos.y, halfH)); pos.y = Math.Max(-halfH + 50, Math.Min(pos.y, halfH));
@ -309,14 +310,7 @@ namespace UnityExplorer.UI.Panels
SetTransformDefaults(); SetTransformDefaults();
} }
LayoutRebuilder.ForceRebuildLayoutImmediate(this.Rect); RuntimeProvider.Instance.StartCoroutine(LateSetupCoroutine());
// ensure initialized position is valid
EnsureValidSize();
EnsureValidPosition(this.Rect);
// update dragger and save data
Dragger.OnEndResize();
// simple listener for saving enabled state // simple listener for saving enabled state
this.OnToggleEnabled += (bool val) => this.OnToggleEnabled += (bool val) =>
@ -327,6 +321,18 @@ namespace UnityExplorer.UI.Panels
ApplyingSaveData = false; ApplyingSaveData = false;
} }
private IEnumerator LateSetupCoroutine()
{
yield return null;
// ensure initialized position is valid
EnsureValidSize();
EnsureValidPosition(this.Rect);
// update dragger and save data
Dragger.OnEndResize();
}
public override void ConstructUI(GameObject parent) => ConstructUI(); public override void ConstructUI(GameObject parent) => ConstructUI();
} }
@ -381,7 +387,7 @@ namespace UnityExplorer.UI.Panels
return string.Format(CultureInfo.InvariantCulture, "{0},{1}", new object[] return string.Format(CultureInfo.InvariantCulture, "{0},{1}", new object[]
{ {
rect.localPosition.x, rect.localPosition.y rect.anchoredPosition.x, rect.anchoredPosition.y
}); });
} }
@ -399,10 +405,10 @@ namespace UnityExplorer.UI.Panels
if (split.Length != 2) if (split.Length != 2)
throw new Exception($"stringPosition split is unexpected length: {split.Length}"); throw new Exception($"stringPosition split is unexpected length: {split.Length}");
Vector3 vector = rect.localPosition; Vector3 vector = rect.anchoredPosition;
vector.x = float.Parse(split[0], CultureInfo.InvariantCulture); vector.x = float.Parse(split[0], CultureInfo.InvariantCulture);
vector.y = float.Parse(split[1], CultureInfo.InvariantCulture); vector.y = float.Parse(split[1], CultureInfo.InvariantCulture);
rect.localPosition = vector; rect.anchoredPosition = vector;
} }
} }

View File

@ -175,13 +175,13 @@
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="UniverseLib.Mono"> <Reference Include="UniverseLib.Mono">
<HintPath>packages\UniverseLib.1.0.6\lib\net35\UniverseLib.Mono.dll</HintPath> <HintPath>packages\UniverseLib.1.1.0\lib\net35\UniverseLib.Mono.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<!-- Il2Cpp refs --> <!-- Il2Cpp refs -->
<ItemGroup Condition="'$(IsCpp)'=='true'"> <ItemGroup Condition="'$(IsCpp)'=='true'">
<Reference Include="UniverseLib.IL2CPP"> <Reference Include="UniverseLib.IL2CPP">
<HintPath>packages\UniverseLib.1.0.6\lib\net472\UniverseLib.IL2CPP.dll</HintPath> <HintPath>packages\UniverseLib.1.1.0\lib\net472\UniverseLib.IL2CPP.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnhollowerBaseLib"> <Reference Include="UnhollowerBaseLib">
<HintPath>..\lib\Il2CppAssemblyUnhollower\UnhollowerBaseLib\bin\Release\net4.7.2\UnhollowerBaseLib.dll</HintPath> <HintPath>..\lib\Il2CppAssemblyUnhollower\UnhollowerBaseLib\bin\Release\net4.7.2\UnhollowerBaseLib.dll</HintPath>

View File

@ -4,5 +4,5 @@
<package id="ILRepack.Lib.MSBuild.Task" version="2.0.18.2" targetFramework="net35" /> <package id="ILRepack.Lib.MSBuild.Task" version="2.0.18.2" targetFramework="net35" />
<package id="Mono.Cecil" version="0.10.4" targetFramework="net35" /> <package id="Mono.Cecil" version="0.10.4" targetFramework="net35" />
<package id="Samboy063.Tomlet" version="3.1.3" targetFramework="net472" /> <package id="Samboy063.Tomlet" version="3.1.3" targetFramework="net472" />
<package id="UniverseLib" version="1.0.6" targetFramework="net35" /> <package id="UniverseLib" version="1.1.0" targetFramework="net35" />
</packages> </packages>