@@ -4299,15 +4299,17 @@ void ImGui::UpdateMouseWheel()
4299
4299
if (wheel_x == 0.0f && wheel_y == 0.0f)
4300
4300
return;
4301
4301
4302
- ImGuiWindow* window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow;
4303
- if (!window || window->Collapsed)
4302
+ //IMGUI_DEBUG_LOG("MouseWheel X:%.3f Y:%.3f\n", wheel_x, wheel_y);
4303
+ ImGuiWindow* mouse_window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow;
4304
+ if (!mouse_window || mouse_window->Collapsed)
4304
4305
return;
4305
4306
4306
4307
// Zoom / Scale window
4307
4308
// FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned.
4308
4309
if (wheel_y != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
4309
4310
{
4310
- LockWheelingWindow(window);
4311
+ LockWheelingWindow(mouse_window);
4312
+ ImGuiWindow* window = mouse_window;
4311
4313
const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
4312
4314
const float scale = new_font_scale / window->FontWindowScale;
4313
4315
window->FontWindowScale = new_font_scale;
@@ -4338,11 +4340,12 @@ void ImGui::UpdateMouseWheel()
4338
4340
// Vertical Mouse Wheel scrolling
4339
4341
if (wheel_y != 0.0f)
4340
4342
{
4341
- LockWheelingWindow( window) ;
4343
+ ImGuiWindow* window = mouse_window ;
4342
4344
while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.y == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
4343
4345
window = window->ParentWindow;
4344
4346
if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
4345
4347
{
4348
+ LockWheelingWindow(mouse_window);
4346
4349
float max_step = window->InnerRect.GetHeight() * 0.67f;
4347
4350
float scroll_step = ImFloor(ImMin(5 * window->CalcFontSize(), max_step));
4348
4351
SetScrollY(window, window->Scroll.y - wheel_y * scroll_step);
@@ -4352,11 +4355,12 @@ void ImGui::UpdateMouseWheel()
4352
4355
// Horizontal Mouse Wheel scrolling, or Vertical Mouse Wheel w/ Shift held
4353
4356
if (wheel_x != 0.0f)
4354
4357
{
4355
- LockWheelingWindow( window) ;
4358
+ ImGuiWindow* window = mouse_window ;
4356
4359
while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.x == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
4357
4360
window = window->ParentWindow;
4358
4361
if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
4359
4362
{
4363
+ LockWheelingWindow(mouse_window);
4360
4364
float max_step = window->InnerRect.GetWidth() * 0.67f;
4361
4365
float scroll_step = ImFloor(ImMin(2 * window->CalcFontSize(), max_step));
4362
4366
SetScrollX(window, window->Scroll.x - wheel_x * scroll_step);
0 commit comments