Wayland: Fix error from glfwSetWindowAspectRatio

The aspect ratio was applied during resize but any call to
glfwSetWindowAspectRatio emitted a GLFW_FEATURE_UNIMPLEMENTED error.

(cherry picked from commit 91f18fb576)
This commit is contained in:
Camilla Löwy 2022-06-14 20:37:31 +02:00
parent 48e0e0acf5
commit 6b9087c575
2 changed files with 16 additions and 2 deletions

View File

@ -174,6 +174,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
## Contact ## Contact

View File

@ -1988,8 +1988,20 @@ void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window,
void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window,
int numer, int denom) 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;
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 _glfwPlatformGetFramebufferSize(_GLFWwindow* window, void _glfwPlatformGetFramebufferSize(_GLFWwindow* window,