mirror of
https://github.com/glfw/glfw.git
synced 2024-11-14 10:34:34 +00:00
Wayland: Fix error from glfwSetWindowAspectRatio
The aspect ratio was applied during resize but any call to glfwSetWindowAspectRatio emitted a GLFW_FEATURE_UNIMPLEMENTED error.
This commit is contained in:
parent
e37ba80b13
commit
91f18fb576
@ -355,6 +355,8 @@ information on what to include when reporting a bug.
|
|||||||
scale
|
scale
|
||||||
- [Wayland] Bugfix: Window content scale events were not emitted when monitor
|
- [Wayland] Bugfix: Window content scale events were not emitted when monitor
|
||||||
scale changed
|
scale changed
|
||||||
|
- [Wayland] Bugfix: `glfwSetWindowAspectRatio` reported an error instead of
|
||||||
|
applying the specified ratio
|
||||||
- [POSIX] Removed use of deprecated function `gettimeofday`
|
- [POSIX] Removed use of deprecated function `gettimeofday`
|
||||||
- [POSIX] Bugfix: `CLOCK_MONOTONIC` was not correctly tested for or enabled
|
- [POSIX] Bugfix: `CLOCK_MONOTONIC` was not correctly tested for or enabled
|
||||||
- [WGL] Disabled the DWM swap interval hack for Windows 8 and later (#1072)
|
- [WGL] Disabled the DWM swap interval hack for Windows 8 and later (#1072)
|
||||||
|
@ -1923,10 +1923,20 @@ void _glfwSetWindowSizeLimitsWayland(_GLFWwindow* window,
|
|||||||
|
|
||||||
void _glfwSetWindowAspectRatioWayland(_GLFWwindow* window, int numer, int denom)
|
void _glfwSetWindowAspectRatioWayland(_GLFWwindow* window, int numer, int denom)
|
||||||
{
|
{
|
||||||
// TODO: find out how to trigger a resize.
|
if (window->wl.maximized || window->wl.fullscreen)
|
||||||
// The actual limits are checked in the xdg_toplevel::configure handler.
|
return;
|
||||||
_glfwInputError(GLFW_FEATURE_UNIMPLEMENTED,
|
|
||||||
"Wayland: Window aspect ratio not yet implemented");
|
if (numer != GLFW_DONT_CARE && denom != GLFW_DONT_CARE)
|
||||||
|
{
|
||||||
|
const float aspectRatio = (float) window->wl.width / (float) window->wl.height;
|
||||||
|
const float targetRatio = (float) numer / (float) denom;
|
||||||
|
if (aspectRatio < targetRatio)
|
||||||
|
window->wl.height = window->wl.width / targetRatio;
|
||||||
|
else if (aspectRatio > targetRatio)
|
||||||
|
window->wl.width = window->wl.height * targetRatio;
|
||||||
|
|
||||||
|
resizeWindow(window);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwGetFramebufferSizeWayland(_GLFWwindow* window, int* width, int* height)
|
void _glfwGetFramebufferSizeWayland(_GLFWwindow* window, int* width, int* height)
|
||||||
|
Loading…
Reference in New Issue
Block a user