diff --git a/backends/imgui_impl_glfw.cpp b/backends/imgui_impl_glfw.cpp index b47e01066a08..afe83b7470e6 100644 --- a/backends/imgui_impl_glfw.cpp +++ b/backends/imgui_impl_glfw.cpp @@ -20,6 +20,8 @@ // CHANGELOG // (minor and older changes stripped away, please see git history for details) +// 2023-01-18: Handle unsupported glfwGetVideoMode (c.f. Emscripten) +// 2023-01-18: Inputs: Re-scale horizontal scroll events from Emscripten to be more similar to native. // 2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. // 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) @@ -313,6 +315,11 @@ void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int acti void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) { +#if defined(__EMSCRIPTEN__) + // Running under Emscripten, GLFW reports grossly mis-scaled (and flipped) x-scroll events. + xoffset /= -20.0f; +#endif + ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); if (bd->PrevUserCallbackScroll != nullptr && window == bd->Window) bd->PrevUserCallbackScroll(window, xoffset, yoffset); @@ -765,6 +772,11 @@ static void ImGui_ImplGlfw_UpdateMonitors() int x, y; glfwGetMonitorPos(glfw_monitors[n], &x, &y); const GLFWvidmode* vid_mode = glfwGetVideoMode(glfw_monitors[n]); + if (vid_mode == NULL) { // Failed to get Video mode (e.g. Emscripten does not support this function) + bd->WantUpdateMonitors = false; + platform_io.Monitors.resize(0); + return; + } monitor.MainPos = monitor.WorkPos = ImVec2((float)x, (float)y); monitor.MainSize = monitor.WorkSize = ImVec2((float)vid_mode->width, (float)vid_mode->height); #if GLFW_HAS_MONITOR_WORK_AREA