diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index c21348d46..1a1b37e22 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -1206,12 +1206,12 @@ void Graphics::arc(DrawMode mode, float x, float y, float radius, float angle1, delete[] coords; } -void Graphics::roundedRectangle(DrawMode mode, float x, float y, float w, float h, float r, float points) +void Graphics::roundedRectangle(DrawMode mode, float x, float y, float w, float h, float rx, float ry, float points) { if (points < 1) points = 1; - if (r == 0) + if (rx == 0 || ry == 0) { rectangle(mode, x, y, w, h); return; @@ -1226,32 +1226,32 @@ void Graphics::roundedRectangle(DrawMode mode, float x, float y, float w, float for (int i = 0; i <= points + 2; ++i, phi += angle_shift) { - coords[2 * i] = x + r * (1 - cosf(phi)); - coords[2 * i + 1] = y + r * (1 - sinf(phi)); + coords[2 * i] = x + rx * (1 - cosf(phi)); + coords[2 * i + 1] = y + ry * (1 - sinf(phi)); } phi = half_pi; for (int i = points + 2; i <= 2 * (points + 2); ++i, phi += angle_shift) { - coords[2 * i] = x + w - r * cosf(phi); - coords[2 * i + 1] = y + r * (1 - sinf(phi)); + coords[2 * i] = x + w - rx * cosf(phi); + coords[2 * i + 1] = y + ry * (1 - sinf(phi)); } phi = 2 * half_pi; for (int i = 2 * (points + 2); i <= 3 * (points + 2); ++i, phi += angle_shift) { - coords[2 * i] = x + w - r * cosf(phi); - coords[2 * i + 1] = y + h - r * sinf(phi); + coords[2 * i] = x + w - rx * cosf(phi); + coords[2 * i + 1] = y + h - ry * sinf(phi); } phi = 3 * half_pi; for (int i = 3 * (points + 2); i <= 4 * (points + 2); ++i, phi += angle_shift) { - coords[2 * i] = x + r * (1 - cosf(phi)); - coords[2 * i + 1] = y + h - r * sinf(phi); + coords[2 * i] = x + rx * (1 - cosf(phi)); + coords[2 * i + 1] = y + h - ry * sinf(phi); } coords[num_coords] = coords[0]; diff --git a/src/modules/graphics/opengl/Graphics.h b/src/modules/graphics/opengl/Graphics.h index 3979470be..86c21d7dd 100644 --- a/src/modules/graphics/opengl/Graphics.h +++ b/src/modules/graphics/opengl/Graphics.h @@ -407,10 +407,11 @@ public: * @param y Y-coordinate of top-left corner * @param w The width of the rectangle. * @param h The height of the rectangle. - * @param r The radius of the corners. + * @param rx The radius of the corners on the x axis + * @param ry The radius of the corners on the y axis * @param points The number of points to use per corner **/ - void roundedRectangle(DrawMode mode, float x, float y, float w, float h, float r, float points = 10); + void roundedRectangle(DrawMode mode, float x, float y, float w, float h, float rx, float ry, float points = 10); /** * Draws a polygon with an arbitrary number of vertices. diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index 1f78d1869..659a79b09 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -1610,14 +1610,15 @@ int w_roundedRectangle(lua_State *L) float y = (float)luaL_checknumber(L, 3); float w = (float)luaL_checknumber(L, 4); float h = (float)luaL_checknumber(L, 5); - float r = (float)luaL_checknumber(L, 6); + float rx = (float)luaL_checknumber(L, 6); + float ry = (float)luaL_checknumber(L, 7); int points; - if (lua_isnoneornil(L, 7)) - points = r > 10 ? (int)(r) : 10; + if (lua_isnoneornil(L, 8)) + points = rx + ry > 20 ? (int)((rx + ry) / 2) : 10; else - points = luaL_checkint(L, 7); + points = luaL_checkint(L, 8); - instance()->roundedRectangle(mode, x, y, w, h, r, points); + instance()->roundedRectangle(mode, x, y, w, h, rx, ry, points); return 0; }