Added love.window.toPixels(x [, y]) and love.window.fromPixels(x [, y]), for easier conversion between window-space and pixel-space values when highdpi mode is enabled on a retina display in OS X (and in the iOS and Android ports of LÖVE.)

This commit is contained in:
Alex Szpakowski
2014-09-14 15:58:37 -03:00
parent f972c9923f
commit 00944c5f5d
7 changed files with 96 additions and 20 deletions
+5
View File
@@ -148,6 +148,11 @@ public:
virtual double getPixelScale() const = 0;
virtual double toPixels(double x) const = 0;
virtual void toPixels(double wx, double wy, double &px, double &py) const = 0;
virtual double fromPixels(double x) const = 0;
virtual void fromPixels(double px, double py, double &wx, double &wy) const = 0;
virtual const void *getHandle() const = 0;
virtual bool showMessageBox(MessageBoxType type, const std::string &title, const std::string &message, bool attachtowindow) = 0;
+24
View File
@@ -682,6 +682,30 @@ double Window::getPixelScale() const
return scale;
}
double Window::toPixels(double x) const
{
return x * getPixelScale();
}
void Window::toPixels(double wx, double wy, double &px, double &py) const
{
double scale = getPixelScale();
px = wx * scale;
py = wy * scale;
}
double Window::fromPixels(double x) const
{
return x / getPixelScale();
}
void Window::fromPixels(double px, double py, double &wx, double &wy) const
{
double scale = getPixelScale();
wx = px / scale;
wy = py / scale;
}
const void *Window::getHandle() const
{
return window;
+5
View File
@@ -85,6 +85,11 @@ public:
double getPixelScale() const;
double toPixels(double x) const;
void toPixels(double wx, double wy, double &px, double &py) const;
double fromPixels(double x) const;
void fromPixels(double px, double py, double &wx, double &wy) const;
const void *getHandle() const;
bool showMessageBox(MessageBoxType type, const std::string &title, const std::string &message, bool attachtowindow);
+44
View File
@@ -333,6 +333,48 @@ int w_getPixelScale(lua_State *L)
return 1;
}
int w_toPixels(lua_State *L)
{
double wx = luaL_checknumber(L, 1);
if (lua_isnoneornil(L, 2))
{
lua_pushnumber(L, instance()->toPixels(wx));
return 1;
}
double wy = luaL_checknumber(L, 2);
double px = 0.0, py = 0.0;
instance()->toPixels(wx, wy, px, py);
lua_pushnumber(L, px);
lua_pushnumber(L, py);
return 2;
}
int w_fromPixels(lua_State *L)
{
double px = luaL_checknumber(L, 1);
if (lua_isnoneornil(L, 2))
{
lua_pushnumber(L, instance()->fromPixels(px));
return 1;
}
double py = luaL_checknumber(L, 2);
double wx = 0.0, wy = 0.0;
instance()->fromPixels(px, py, wx, wy);
lua_pushnumber(L, wx);
lua_pushnumber(L, wy);
return 2;
}
int w_minimize(lua_State* /*L*/)
{
instance()->minimize();
@@ -421,6 +463,8 @@ static const luaL_Reg functions[] =
{ "hasMouseFocus", w_hasMouseFocus },
{ "isVisible", w_isVisible },
{ "getPixelScale", w_getPixelScale },
{ "toPixels", w_toPixels },
{ "fromPixels", w_fromPixels },
{ "minimize", w_minimize },
{ "showMessageBox", w_showMessageBox },
{ 0, 0 }
+2
View File
@@ -49,6 +49,8 @@ int w_hasFocus(lua_State *L);
int w_hasMouseFocus(lua_State *L);
int w_isVisible(lua_State *L);
int w_getPixelScale(lua_State *L);
int w_toPixels(lua_State *L);
int w_fromPixels(lua_State *L);
int w_minimize(lua_State *L);
int w_showMessageBox(lua_State *L);
extern "C" LOVE_EXPORT int luaopen_love_window(lua_State *L);