imgui icon indicating copy to clipboard operation
imgui copied to clipboard

Incorrect "nervous" mouse movements when dragging an external viewport window

Open Vindfjall opened this issue 11 months ago • 2 comments

Version/Branch of Dear ImGui:

Version 1.91.8, Branch: docking

Back-ends:

imgui_impl_glfw.cpp + imgui_impl_opengl3.cpp

Compiler, OS:

Linux + GCC

Full config/build information:

No response

Details:

Incorrect "nervous" mouse movements when dragging an external viewport window.

Issue appears for external panels/windows when there is some kind of rendering in the main window, such as a internal window or even a glClear command, i.e. always.

The issue is that the mouse input gets incorrect in the axis of the mouse movement. Values are incorrect/made up and not only in incorrect order.  A rapid drag of window may move the window further than the mouse movement. 

The error magnitude seems to be proportional to the speed of the mouse pointer. 

Config flags: ImGuiConfigFlags_ViewportsEnable ImGuiConfigFlags_NavEnableKeyboard

Screenshots/Video:

No response

Minimal, Complete and Verifiable Example code:

No response

Vindfjall avatar Mar 04 '25 09:03 Vindfjall

Please provide a video and details about your system. Is that X, Wayland? Which window manager? Which version of GLFW?

  • Find all 4 calls to io.AddMousePosEvent() in imgui_impl_glfw and add a IMGUI_DEBUG_LOG("%s: AddMousePosEvent() %f %f\n", __FUNCTION__, x, y) with the two values passed to the function.
  • Open Tools->Debug Log, click [X] IO` and inspect and provide a log of the output with commentary.

Thanks.

ocornut avatar Mar 04 '25 10:03 ocornut

Display server: Wayland Window manager: Mutter GLFW version: 3.3.6

Here is extract of the log when I dragged a window along the top of the screen from left to right. Tried to keep the movement with a constant speed. It wasn't of course perfect but it was always moving right.

Thanks for the quick response!

[39989] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 408.000000 14.000000 [39990] [io] Processed: MousePos (408.0, 14.0) (Mouse) [39992] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 408.000000 14.000000 [39992] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 409.000000 13.000000 [39993] [io] Processed: MousePos (409.0, 13.0) (Mouse) [39993] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 411.000000 13.000000 [39994] [io] Processed: MousePos (411.0, 13.0) (Mouse) [39994] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 413.000000 12.000000 [39995] [io] Processed: MousePos (413.0, 12.0) (Mouse) [39995] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 414.000000 12.000000 [39995] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 415.000000 12.000000 [39996] [io] Processed: MousePos (414.0, 12.0) (Mouse) [39996] [io] Processed: MousePos (415.0, 12.0) (Mouse) [39996] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 416.000000 12.000000 [39997] [io] Processed: MousePos (416.0, 12.0) (Mouse) [39997] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 414.000000 11.000000 [39997] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 415.000000 11.000000 [39998] [io] Processed: MousePos (414.0, 11.0) (Mouse) [39998] [io] Processed: MousePos (415.0, 11.0) (Mouse) [40000] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 417.000000 11.000000 [40000] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 417.000000 10.000000 [40000] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 418.000000 10.000000 [40001] [io] Processed: MousePos (417.0, 11.0) (Mouse) [40001] [io] Processed: MousePos (417.0, 10.0) (Mouse) [40001] [io] Processed: MousePos (418.0, 10.0) (Mouse) [40001] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 422.000000 10.000000 [40001] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 423.000000 10.000000 [40002] [io] Processed: MousePos (422.0, 10.0) (Mouse) [40002] [io] Processed: MousePos (423.0, 10.0) (Mouse) [40002] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 425.000000 9.000000 [40003] [io] Processed: MousePos (425.0, 9.0) (Mouse) [40003] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 423.000000 9.000000 [40003] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 422.000000 9.000000 [40004] [io] Processed: MousePos (423.0, 9.0) (Mouse) [40004] [io] Processed: MousePos (422.0, 9.0) (Mouse) [40004] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 420.000000 9.000000 [40004] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 420.000000 8.000000 [40005] [io] Processed: MousePos (420.0, 9.0) (Mouse) [40005] [io] Processed: MousePos (420.0, 8.0) (Mouse) [40005] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 424.000000 8.000000 [40006] [io] Processed: MousePos (424.0, 8.0) (Mouse) [40006] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 429.000000 8.000000 [40006] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 430.000000 8.000000 [40007] [io] Processed: MousePos (429.0, 8.0) (Mouse) [40007] [io] Processed: MousePos (430.0, 8.0) (Mouse) [40007] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 433.000000 8.000000 [40007] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 433.000000 7.000000 [40008] [io] Processed: MousePos (433.0, 8.0) (Mouse) [40008] [io] Processed: MousePos (433.0, 7.0) (Mouse) [40008] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 431.000000 7.000000 [40009] [io] Processed: MousePos (431.0, 7.0) (Mouse) [40009] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 427.000000 7.000000 [40009] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 428.000000 7.000000 [40010] [io] Processed: MousePos (427.0, 7.0) (Mouse) [40010] [io] Processed: MousePos (428.0, 7.0) (Mouse) [40010] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 428.000000 7.000000 [40010] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 429.000000 7.000000 [40011] [io] Processed: MousePos (429.0, 7.0) (Mouse) [40011] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 434.000000 7.000000 [40011] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 434.000000 6.000000 [40012] [io] Processed: MousePos (434.0, 7.0) (Mouse) [40012] [io] Processed: MousePos (434.0, 6.0) (Mouse) [40012] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 440.000000 6.000000 [40013] [io] Processed: MousePos (440.0, 6.0) (Mouse) [40013] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 442.000000 6.000000 [40013] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 443.000000 6.000000 [40013] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 438.000000 6.000000 [40014] [io] Processed: MousePos (442.0, 6.0) (Mouse) [40014] [io] Processed: MousePos (443.0, 6.0) (Mouse) [40014] [io] Processed: MousePos (438.0, 6.0) (Mouse) [40014] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 437.000000 6.000000 [40014] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 438.000000 6.000000 [40015] [io] Processed: MousePos (437.0, 6.0) (Mouse) [40015] [io] Processed: MousePos (438.0, 6.0) (Mouse) [40015] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 441.000000 6.000000 [40015] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 442.000000 5.000000 [40016] [io] Processed: MousePos (441.0, 6.0) (Mouse) [40016] [io] Processed: MousePos (442.0, 5.0) (Mouse) [40016] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 447.000000 5.000000 [40016] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 448.000000 5.000000 [40017] [io] Processed: MousePos (447.0, 5.0) (Mouse) [40017] [io] Processed: MousePos (448.0, 5.0) (Mouse) [40017] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 453.000000 5.000000 [40017] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 454.000000 5.000000 [40017] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 450.000000 4.000000 [40018] [io] Processed: MousePos (453.0, 5.0) (Mouse) [40018] [io] Processed: MousePos (454.0, 5.0) (Mouse) [40018] [io] Processed: MousePos (450.0, 4.0) (Mouse) [40018] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 453.000000 4.000000 [40019] [io] Processed: MousePos (453.0, 4.0) (Mouse) [40019] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 457.000000 4.000000 [40019] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 460.000000 4.000000 [40020] [io] Processed: MousePos (457.0, 4.0) (Mouse) [40020] [io] Processed: MousePos (460.0, 4.0) (Mouse) [40020] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 466.000000 4.000000 [40020] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 467.000000 4.000000 [40021] [io] Processed: MousePos (466.0, 4.0) (Mouse) [40021] [io] Processed: MousePos (467.0, 4.0) (Mouse) [40021] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 468.000000 3.000000 [40021] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 469.000000 3.000000 [40021] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 470.000000 3.000000 [40022] [io] Processed: MousePos (468.0, 3.0) (Mouse) [40022] [io] Processed: MousePos (469.0, 3.0) (Mouse) [40022] [io] Processed: MousePos (470.0, 3.0) (Mouse) [40022] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 468.000000 3.000000 [40023] [io] Processed: MousePos (468.0, 3.0) (Mouse) [40023] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 464.000000 3.000000 [40023] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 466.000000 3.000000 [40023] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 468.000000 3.000000 [40024] [io] Processed: MousePos (464.0, 3.0) (Mouse) [40024] [io] Processed: MousePos (466.0, 3.0) (Mouse) [40024] [io] Processed: MousePos (468.0, 3.0) (Mouse) [40024] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 471.000000 3.000000 [40024] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 473.000000 3.000000 [40025] [io] Processed: MousePos (471.0, 3.0) (Mouse) [40025] [io] Processed: MousePos (473.0, 3.0) (Mouse) [40025] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 479.000000 3.000000 [40025] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 481.000000 3.000000 [40026] [io] Processed: MousePos (479.0, 3.0) (Mouse) [40026] [io] Processed: MousePos (481.0, 3.0) (Mouse) [40026] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 485.000000 3.000000 [40026] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 487.000000 3.000000 [40027] [io] Processed: MousePos (485.0, 3.0) (Mouse) [40027] [io] Processed: MousePos (487.0, 3.0) (Mouse) [40027] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 486.000000 3.000000 [40027] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 488.000000 2.000000 [40027] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 484.000000 2.000000 [40028] [io] Processed: MousePos (486.0, 3.0) (Mouse) [40028] [io] Processed: MousePos (488.0, 2.0) (Mouse) [40028] [io] Processed: MousePos (484.0, 2.0) (Mouse) [40028] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 482.000000 2.000000 [40028] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 484.000000 2.000000 [40028] ImGui_ImplGlfw_CursorPosCallback: AddMousePosEvent() 489.000000 2.000000

Vindfjall avatar Mar 04 '25 14:03 Vindfjall