Skip to content

Commit

Permalink
fix non-viewports mouse position
Browse files Browse the repository at this point in the history
  • Loading branch information
pkdawson committed Dec 2, 2022
1 parent 34e48b3 commit 5d7f16e
Showing 1 changed file with 16 additions and 19 deletions.
35 changes: 16 additions & 19 deletions addons/imgui-godot/ImGuiGodot/Internal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -259,15 +259,20 @@ public static void Update(double delta, Viewport vp)
io.DisplaySize = new(vpSize.x, vpSize.y);
io.DeltaTime = (float)delta;

if (io.WantSetMousePos)
if (io.ConfigFlags.HasFlag(ImGuiConfigFlags.ViewportsEnable))
{
// TODO: get current focused window
// Input.WarpMouse(new(io.MousePos.X, io.MousePos.Y));
var mousePos = DisplayServer.MouseGetPosition();
io.AddMousePosEvent(mousePos.x, mousePos.y);

if (io.WantSetMousePos)
{
// TODO: get current focused window
}
}
else
{
var mousePos = DisplayServer.MouseGetPosition();
io.AddMousePosEvent(mousePos.x, mousePos.y);
if (io.WantSetMousePos)
Input.WarpMouse(new(io.MousePos.X, io.MousePos.Y));
}

// scrolling works better if we allow no more than one event per frame
Expand Down Expand Up @@ -295,23 +300,13 @@ public static void Update(double delta, Viewport vp)
ImGui.NewFrame();
}

internal static Vector2 ClientToScreen(Window wnd, Vector2 clientPos)
{
Vector2i windowPos = wnd.Position;
return new(windowPos.x + clientPos.x, windowPos.y + clientPos.y);
}

internal static Vector2 ScreenToClient(Window wnd, Vector2 screenPos)
{
Vector2i windowPos = wnd.Position;
return new(screenPos.x - windowPos.x, screenPos.y - windowPos.y);
}

public static bool ProcessInput(InputEvent evt, Window window)
{
var io = ImGui.GetIO();
bool viewportsEnable = io.ConfigFlags.HasFlag(ImGuiConfigFlags.ViewportsEnable);

var windowPos = Vector2i.Zero;
if (io.ConfigFlags.HasFlag(ImGuiConfigFlags.ViewportsEnable))
if (viewportsEnable)
windowPos = window.Position;

if (CurrentSubViewport != null)
Expand All @@ -332,8 +327,10 @@ public static bool ProcessInput(InputEvent evt, Window window)

bool consumed = false;

if (evt is InputEventMouseMotion)
if (evt is InputEventMouseMotion mm)
{
if (!viewportsEnable)
io.AddMousePosEvent(mm.GlobalPosition.x, mm.GlobalPosition.y);
consumed = io.WantCaptureMouse;
}
else if (evt is InputEventMouseButton mb)
Expand Down

0 comments on commit 5d7f16e

Please sign in to comment.