mirror of
https://github.com/love2d/love.git
synced 2026-08-15 15:51:12 +02:00
Add love.graphics.transformPoint and love.graphics.inverseTransformPoint.
--HG-- branch : minor
This commit is contained in:
@@ -1789,6 +1789,22 @@ void Graphics::origin()
|
||||
pixelSizeStack.back() = 1;
|
||||
}
|
||||
|
||||
Vector Graphics::transformPoint(Vector point)
|
||||
{
|
||||
Vector p;
|
||||
gl.getTransform().transform(&p, &point, 1);
|
||||
return p;
|
||||
}
|
||||
|
||||
Vector Graphics::inverseTransformPoint(Vector point)
|
||||
{
|
||||
Vector p;
|
||||
// TODO: We should probably cache the inverse transform so we don't have to
|
||||
// re-calculate it every time this is called.
|
||||
gl.getTransform().inverse().transform(&p, &point, 1);
|
||||
return p;
|
||||
}
|
||||
|
||||
} // opengl
|
||||
} // graphics
|
||||
} // love
|
||||
|
||||
@@ -459,6 +459,8 @@ public:
|
||||
void translate(float x, float y);
|
||||
void shear(float kx, float ky);
|
||||
void origin();
|
||||
Vector transformPoint(Vector point);
|
||||
Vector inverseTransformPoint(Vector point);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -1960,6 +1960,28 @@ int w_origin(lua_State * /*L*/)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int w_transformPoint(lua_State *L)
|
||||
{
|
||||
Vector p;
|
||||
p.x = (float) luaL_checknumber(L, 1);
|
||||
p.y = (float) luaL_checknumber(L, 2);
|
||||
p = instance()->transformPoint(p);
|
||||
lua_pushnumber(L, p.x);
|
||||
lua_pushnumber(L, p.y);
|
||||
return 2;
|
||||
}
|
||||
|
||||
int w_inverseTransformPoint(lua_State *L)
|
||||
{
|
||||
Vector p;
|
||||
p.x = (float) luaL_checknumber(L, 1);
|
||||
p.y = (float) luaL_checknumber(L, 2);
|
||||
p = instance()->inverseTransformPoint(p);
|
||||
lua_pushnumber(L, p.x);
|
||||
lua_pushnumber(L, p.y);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
// List of functions to wrap.
|
||||
static const luaL_Reg functions[] =
|
||||
@@ -2060,6 +2082,8 @@ static const luaL_Reg functions[] =
|
||||
{ "translate", w_translate },
|
||||
{ "shear", w_shear },
|
||||
{ "origin", w_origin },
|
||||
{ "transformPoint", w_transformPoint },
|
||||
{ "inverseTransformPoint", w_inverseTransformPoint },
|
||||
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user