Fix notification positioning when multi-monitor is enabled

This commit is contained in:
goaaats 2025-05-09 22:08:09 +02:00
parent df8de39098
commit a12c63d6a2
2 changed files with 19 additions and 5 deletions

View file

@ -38,6 +38,7 @@ internal sealed partial class ActiveNotification
var viewport = ImGuiHelpers.MainViewport; var viewport = ImGuiHelpers.MainViewport;
var viewportSize = viewport.WorkSize; var viewportSize = viewport.WorkSize;
var viewportPos = viewport.Pos;
ImGui.PushStyleVar(ImGuiStyleVar.Alpha, opacity); ImGui.PushStyleVar(ImGuiStyleVar.Alpha, opacity);
ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 0f);
@ -122,7 +123,7 @@ internal sealed partial class ActiveNotification
ImGuiHelpers.ForceNextWindowMainViewport(); ImGuiHelpers.ForceNextWindowMainViewport();
ImGui.SetNextWindowPos( ImGui.SetNextWindowPos(
topLeft, topLeft + viewportPos,
ImGuiCond.Always, ImGuiCond.Always,
pivot); pivot);
ImGui.SetNextWindowSizeConstraints( ImGui.SetNextWindowSizeConstraints(

View file

@ -42,9 +42,13 @@ internal class NotificationPositionChooser
using var style2 = ImRaii.PushStyle(ImGuiStyleVar.WindowBorderSize, 0f); using var style2 = ImRaii.PushStyle(ImGuiStyleVar.WindowBorderSize, 0f);
using var color = ImRaii.PushColor(ImGuiCol.WindowBg, new Vector4(0, 0, 0, 0)); using var color = ImRaii.PushColor(ImGuiCol.WindowBg, new Vector4(0, 0, 0, 0));
var viewport = ImGuiHelpers.MainViewport;
var viewportSize = viewport.Size;
var viewportPos = viewport.Pos;
ImGui.SetNextWindowFocus(); ImGui.SetNextWindowFocus();
ImGui.SetNextWindowPos(ImGuiHelpers.MainViewport.Pos); ImGui.SetNextWindowPos(viewportPos);
ImGui.SetNextWindowSize(ImGuiHelpers.MainViewport.Size); ImGui.SetNextWindowSize(viewportSize);
ImGuiHelpers.ForceNextWindowMainViewport(); ImGuiHelpers.ForceNextWindowMainViewport();
ImGui.SetNextWindowBgAlpha(0.6f); ImGui.SetNextWindowBgAlpha(0.6f);
@ -54,7 +58,8 @@ internal class NotificationPositionChooser
ImGuiWindowFlags.NoDocking | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoDocking | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoMove |
ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoNav); ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoNav);
var mousePosUnit = ImGui.GetMousePos() / ImGuiHelpers.MainViewport.Size; var adjustedMousePos = ImGui.GetMousePos() - viewportPos;
var mousePosUnit = adjustedMousePos / viewportSize;
// Store the offset as a Vector2 // Store the offset as a Vector2
this.currentAnchorPosition = mousePosUnit; this.currentAnchorPosition = mousePosUnit;
@ -87,6 +92,7 @@ internal class NotificationPositionChooser
var instructionPos = new Vector2( var instructionPos = new Vector2(
ImGuiHelpers.MainViewport.Size.X / 2 - instructionSize.X / 2, ImGuiHelpers.MainViewport.Size.X / 2 - instructionSize.X / 2,
ImGuiHelpers.MainViewport.Size.Y / 2 - instructionSize.Y / 2 + i * instructionSize.Y); ImGuiHelpers.MainViewport.Size.Y / 2 - instructionSize.Y / 2 + i * instructionSize.Y);
instructionPos += viewportPos;
dl.AddText(instructionPos, 0xFFFFFFFF, instruction); dl.AddText(instructionPos, 0xFFFFFFFF, instruction);
} }
@ -102,7 +108,9 @@ internal class NotificationPositionChooser
var edgeMargin = NotificationConstants.ScaledViewportEdgeMargin; var edgeMargin = NotificationConstants.ScaledViewportEdgeMargin;
var spacing = 10f * ImGuiHelpers.GlobalScale; var spacing = 10f * ImGuiHelpers.GlobalScale;
var viewportSize = ImGuiHelpers.MainViewport.Size; var viewport = ImGuiHelpers.MainViewport;
var viewportSize = viewport.Size;
var viewportPos = viewport.Pos;
var borderColor = ImGui.ColorConvertFloat4ToU32(new(1f, 1f, 1f, borderAlpha)); var borderColor = ImGui.ColorConvertFloat4ToU32(new(1f, 1f, 1f, borderAlpha));
var borderThickness = 4.0f * ImGuiHelpers.GlobalScale; var borderThickness = 4.0f * ImGuiHelpers.GlobalScale;
var borderRounding = 4.0f * ImGuiHelpers.GlobalScale; var borderRounding = 4.0f * ImGuiHelpers.GlobalScale;
@ -202,6 +210,11 @@ internal class NotificationPositionChooser
} }
} }
topLeft += viewportPos;
bottomRight += viewportPos;
smallTopLeft += viewportPos;
smallBottomRight += viewportPos;
// Draw the big box // Draw the big box
dl.AddRectFilled(topLeft, bottomRight, ImGui.ColorConvertFloat4ToU32(backgroundColor), borderRounding, ImDrawFlags.RoundCornersAll); dl.AddRectFilled(topLeft, bottomRight, ImGui.ColorConvertFloat4ToU32(backgroundColor), borderRounding, ImDrawFlags.RoundCornersAll);
dl.AddRect(topLeft, bottomRight, borderColor, borderRounding, ImDrawFlags.RoundCornersAll, borderThickness); dl.AddRect(topLeft, bottomRight, borderColor, borderRounding, ImDrawFlags.RoundCornersAll, borderThickness);