mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 10:05:10 +00:00
Add validation of size limit and aspect ratio args
This commit is contained in:
parent
e640d840b7
commit
12a695696d
@ -2056,6 +2056,9 @@ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
|
|||||||
* The size limits are applied immediately to a windowed mode window and may
|
* The size limits are applied immediately to a windowed mode window and may
|
||||||
* cause it to be resized.
|
* cause it to be resized.
|
||||||
*
|
*
|
||||||
|
* The maximum dimensions must be greater than or equal to the minimum
|
||||||
|
* dimensions and all must be greater than or equal to zero.
|
||||||
|
*
|
||||||
* @param[in] window The window to set limits for.
|
* @param[in] window The window to set limits for.
|
||||||
* @param[in] minwidth The minimum width, in screen coordinates, of the client
|
* @param[in] minwidth The minimum width, in screen coordinates, of the client
|
||||||
* area, or `GLFW_DONT_CARE`.
|
* area, or `GLFW_DONT_CARE`.
|
||||||
@ -2066,8 +2069,8 @@ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
|
|||||||
* @param[in] maxheight The maximum height, in screen coordinates, of the
|
* @param[in] maxheight The maximum height, in screen coordinates, of the
|
||||||
* client area, or `GLFW_DONT_CARE`.
|
* client area, or `GLFW_DONT_CARE`.
|
||||||
*
|
*
|
||||||
* @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
|
* @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
|
||||||
* GLFW_PLATFORM_ERROR.
|
* GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
|
||||||
*
|
*
|
||||||
* @remark If you set size limits and an aspect ratio that conflict, the
|
* @remark If you set size limits and an aspect ratio that conflict, the
|
||||||
* results are undefined.
|
* results are undefined.
|
||||||
|
19
src/window.c
19
src/window.c
@ -521,6 +521,13 @@ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* handle,
|
|||||||
|
|
||||||
_GLFW_REQUIRE_INIT();
|
_GLFW_REQUIRE_INIT();
|
||||||
|
|
||||||
|
if (minwidth < 0 || minheight < 0 ||
|
||||||
|
maxwidth < minwidth || maxheight < minheight)
|
||||||
|
{
|
||||||
|
_glfwInputError(GLFW_INVALID_VALUE, "Invalid window size limits");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
window->minwidth = minwidth;
|
window->minwidth = minwidth;
|
||||||
window->minheight = minheight;
|
window->minheight = minheight;
|
||||||
window->maxwidth = maxwidth;
|
window->maxwidth = maxwidth;
|
||||||
@ -541,18 +548,18 @@ GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* handle, int numer, int denom)
|
|||||||
|
|
||||||
_GLFW_REQUIRE_INIT();
|
_GLFW_REQUIRE_INIT();
|
||||||
|
|
||||||
|
if (numer <= 0 || denom <= 0)
|
||||||
|
{
|
||||||
|
_glfwInputError(GLFW_INVALID_VALUE, "Invalid window aspect ratio");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
window->numer = numer;
|
window->numer = numer;
|
||||||
window->denom = denom;
|
window->denom = denom;
|
||||||
|
|
||||||
if (window->monitor || !window->resizable)
|
if (window->monitor || !window->resizable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!denom)
|
|
||||||
{
|
|
||||||
_glfwInputError(GLFW_INVALID_VALUE, "Denominator cannot be zero");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_glfwPlatformSetWindowAspectRatio(window, numer, denom);
|
_glfwPlatformSetWindowAspectRatio(window, numer, denom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user