From 47a4cc34a518b9838d3dd908897e21ea0dd5ff92 Mon Sep 17 00:00:00 2001 From: muddmaker Date: Wed, 31 Dec 2014 23:19:07 -0800 Subject: [PATCH] universal indexing rules in BezierCurve --- changes.txt | 2 +- src/modules/math/BezierCurve.cpp | 10 +++++----- src/modules/math/wrap_BezierCurve.cpp | 9 ++++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/changes.txt b/changes.txt index 06a651fea..5d2379490 100644 --- a/changes.txt +++ b/changes.txt @@ -23,7 +23,7 @@ LOVE 0.9.2 [Baby Inspector] * Added love.window.toPixels and love.window.fromPixels. * Added love.window.setPosition and love.window.getPosition, and 'x' and 'y' fields to love.window.setMode and t.window in love.conf. * Added love.filesystem.isSymlink, love.filesystem.setSymlinksEnabled, and love.filesystem.areSymlinksEnabled. - * Added BezierCurve:renderSegment. + * Added BezierCurve:renderSegment and BexierCurve:removePoint. * Deprecated SpriteBatch:bind and SpriteBatch:unbind. * Deprecated all uses of the name 'FSAA' in favor of 'MSAA'. diff --git a/src/modules/math/BezierCurve.cpp b/src/modules/math/BezierCurve.cpp index 06d75fef0..59d5f1486 100644 --- a/src/modules/math/BezierCurve.cpp +++ b/src/modules/math/BezierCurve.cpp @@ -124,15 +124,15 @@ void BezierCurve::setControlPoint(int i, const Vector &point) controlPoints[i] = point; } -void BezierCurve::insertControlPoint(const Vector &point, int pos) +void BezierCurve::insertControlPoint(const Vector &point, int i) { - if (pos < 0) - pos += controlPoints.size() + 1; + while (i < 0) + i += controlPoints.size() + 1; - if (pos < 0 || (size_t) pos > controlPoints.size()) + while ((size_t) i > controlPoints.size()) throw Exception("Invalid control point index"); - controlPoints.insert(controlPoints.begin() + pos, point); + controlPoints.insert(controlPoints.begin() + i, point); } void BezierCurve::removeControlPoint(int i) diff --git a/src/modules/math/wrap_BezierCurve.cpp b/src/modules/math/wrap_BezierCurve.cpp index 209b19497..e0ef5bf5c 100644 --- a/src/modules/math/wrap_BezierCurve.cpp +++ b/src/modules/math/wrap_BezierCurve.cpp @@ -54,7 +54,8 @@ int w_BezierCurve_getControlPoint(lua_State *L) BezierCurve *curve = luax_checkbeziercurve(L, 1); int idx = luaL_checkinteger(L, 2); - idx--; // 1-indexing + if (idx > 0) // 1-indexing + idx--; luax_catchexcept(L, [&]() { Vector v = curve->getControlPoint(idx); @@ -72,7 +73,8 @@ int w_BezierCurve_setControlPoint(lua_State *L) float vx = (float) luaL_checknumber(L, 3); float vy = (float) luaL_checknumber(L, 4); - idx--; // 1-indexing + if (idx > 0) // 1-indexing + idx--; luax_catchexcept(L, [&](){ curve->setControlPoint(idx, Vector(vx,vy)); }); return 0; @@ -97,7 +99,8 @@ int w_BezierCurve_removeControlPoint(lua_State *L) BezierCurve *curve = luax_checkbeziercurve(L, 1); int idx = luaL_checkint(L, 2); - idx--; // 1-indexing + if (idx > 0) // 1-indexing + idx--; luax_catchexcept(L, [&](){ curve->removeControlPoint(idx); }); return 0;