Browse Source

Backends: Added support for SDL 2.0.18+ preciseX/preciseY mouse wheel data for smooth scrolling + scaling for Emscripten. (#4019, #6096)

+ Missing changelog entries.
ocornut 2 years ago
parent
commit
1f1861dae6
3 changed files with 19 additions and 1 deletions
  1. 5 0
      backends/imgui_impl_glfw.cpp
  2. 10 0
      backends/imgui_impl_sdl.cpp
  3. 4 1
      docs/CHANGELOG.txt

+ 5 - 0
backends/imgui_impl_glfw.cpp

@@ -16,6 +16,7 @@
 
 
 // CHANGELOG
 // CHANGELOG
 // (minor and older changes stripped away, please see git history for details)
 // (minor and older changes stripped away, please see git history for details)
+//  2023-02-02: Inputs: Scaling X value on Emscripten (bug?). (#4019, #6096)
 //  2023-01-04: Inputs: Fixed mods state on Linux when using Alt-GR text input (e.g. German keyboard layout), could lead to broken text input. Revert a 2022/01/17 change were we resumed using mods provided by GLFW, turns out they were faulty.
 //  2023-01-04: Inputs: Fixed mods state on Linux when using Alt-GR text input (e.g. German keyboard layout), could lead to broken text input. Revert a 2022/01/17 change were we resumed using mods provided by GLFW, turns out they were faulty.
 //  2022-11-22: Perform a dummy glfwGetError() read to cancel missing names with glfwGetKeyName(). (#5908)
 //  2022-11-22: Perform a dummy glfwGetError() read to cancel missing names with glfwGetKeyName(). (#5908)
 //  2022-10-18: Perform a dummy glfwGetError() read to cancel missing mouse cursors errors. Using GLFW_VERSION_COMBINED directly. (#5785)
 //  2022-10-18: Perform a dummy glfwGetError() read to cancel missing mouse cursors errors. Using GLFW_VERSION_COMBINED directly. (#5785)
@@ -283,6 +284,10 @@ void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yo
     if (bd->PrevUserCallbackScroll != nullptr && window == bd->Window)
     if (bd->PrevUserCallbackScroll != nullptr && window == bd->Window)
         bd->PrevUserCallbackScroll(window, xoffset, yoffset);
         bd->PrevUserCallbackScroll(window, xoffset, yoffset);
 
 
+#ifdef __EMSCRIPTEN__
+    xoffset /= 100.0;
+#endif
+
     ImGuiIO& io = ImGui::GetIO();
     ImGuiIO& io = ImGui::GetIO();
     io.AddMouseWheelEvent((float)xoffset, (float)yoffset);
     io.AddMouseWheelEvent((float)xoffset, (float)yoffset);
 }
 }

+ 10 - 0
backends/imgui_impl_sdl.cpp

@@ -18,6 +18,7 @@
 
 
 // CHANGELOG
 // CHANGELOG
 // (minor and older changes stripped away, please see git history for details)
 // (minor and older changes stripped away, please see git history for details)
+//  2023-02-02: Added support for SDL 2.0.18+ preciseX/preciseY mouse wheel data for smooth scrolling + Scaling X value on Emscripten (bug?). (#4019, #6096)
 //  2023-02-02: Removed SDL_MOUSEWHEEL value clamping, as values seem correct in latest Emscripten. (#4019)
 //  2023-02-02: Removed SDL_MOUSEWHEEL value clamping, as values seem correct in latest Emscripten. (#4019)
 //  2023-02-01: Flipping SDL_MOUSEWHEEL 'wheel.x' value to match other backends and offer consistent horizontal scrolling direction. (#4019, #6096, #1463)
 //  2023-02-01: Flipping SDL_MOUSEWHEEL 'wheel.x' value to match other backends and offer consistent horizontal scrolling direction. (#4019, #6096, #1463)
 //  2022-10-11: Using 'nullptr' instead of 'NULL' as per our switch to C++11.
 //  2022-10-11: Using 'nullptr' instead of 'NULL' as per our switch to C++11.
@@ -262,8 +263,17 @@ bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event)
         }
         }
         case SDL_MOUSEWHEEL:
         case SDL_MOUSEWHEEL:
         {
         {
+            //IMGUI_DEBUG_LOG("wheel %.2f %.2f, precise %.2f %.2f\n", (float)event->wheel.x, (float)event->wheel.y, event->wheel.preciseX, event->wheel.preciseY);
+#if SDL_VERSION_ATLEAST(2,0,18) // If this fails to compile on Emscripten: update to latest Emscripten!
+            float wheel_x = -event->wheel.preciseX;
+            float wheel_y = event->wheel.preciseY;
+#else
             float wheel_x = -(float)event->wheel.x;
             float wheel_x = -(float)event->wheel.x;
             float wheel_y = (float)event->wheel.y;
             float wheel_y = (float)event->wheel.y;
+#endif
+#ifdef __EMSCRIPTEN__
+            wheel_x /= 100.0f;
+#endif
             io.AddMouseWheelEvent(wheel_x, wheel_y);
             io.AddMouseWheelEvent(wheel_x, wheel_y);
             return true;
             return true;
         }
         }

+ 4 - 1
docs/CHANGELOG.txt

@@ -90,13 +90,16 @@ All changes:
 - Backends: OSX: Fixed scroll/wheel scaling for devices emitting events with
 - Backends: OSX: Fixed scroll/wheel scaling for devices emitting events with
   hasPreciseScrollingDeltas==false (e.g. non-Apple mices).
   hasPreciseScrollingDeltas==false (e.g. non-Apple mices).
 - Backends: SDL: Removed SDL_MOUSEWHEEL value clamping. (#4019, #6096, #6081)
 - Backends: SDL: Removed SDL_MOUSEWHEEL value clamping. (#4019, #6096, #6081)
-  Latest Emscripten seems to emit correct values.
+- Backends: SDL: Added support for SDL 2.0.18+ preciseX/preciseY mouse wheel data
+  for smooth scrolling as reported by SDL. (#4019, #6096)
 - Backend: WebGPU: Fix building for latest WebGPU specs (remove implicit layout generation).
 - Backend: WebGPU: Fix building for latest WebGPU specs (remove implicit layout generation).
   (#6117, #4116, #3632) [@tonygrue, @bfierz]
   (#6117, #4116, #3632) [@tonygrue, @bfierz]
 - Examples: refactord all examples to use a "MainLoopStep()" function. This is in order
 - Examples: refactord all examples to use a "MainLoopStep()" function. This is in order
   to be able to trivially make some compile with Emscripten. (#2492, #3699)
   to be able to trivially make some compile with Emscripten. (#2492, #3699)
   While not all examples are expected to compile on Emscripten, we try to keep all of them
   While not all examples are expected to compile on Emscripten, we try to keep all of them
   as close as possible to each others.
   as close as possible to each others.
+- Examples: Emscripten: The main SDL+GL and GLFW+GL examples now supports Emscripten.
+  (the dedicated example_emscripten_opengl3/ has been removed) (#2492, #2494, #3699, #3705)
 - Examples: Win32: Fixed examples using RegisterClassW() since 1.89 to also call
 - Examples: Win32: Fixed examples using RegisterClassW() since 1.89 to also call
   DefWindowProcW() instead of DefWindowProc() so that title text are correctly converted
   DefWindowProcW() instead of DefWindowProc() so that title text are correctly converted
   when application is compiled without /DUNICODE. (#5725, #5961, #5975) [@markreidvfx]
   when application is compiled without /DUNICODE. (#5725, #5961, #5975) [@markreidvfx]