Merged default into minor

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2014-07-30 01:32:10 -03:00
42 changed files with 640 additions and 356 deletions
+83 -21
View File
@@ -26,11 +26,11 @@ namespace love
namespace window
{
static Window *instance = nullptr;
#define instance() (Module::getInstance<Window>(Module::M_WINDOW))
int w_getDisplayCount(lua_State *L)
{
lua_pushinteger(L, instance->getDisplayCount());
lua_pushinteger(L, instance()->getDisplayCount());
return 1;
}
@@ -39,7 +39,7 @@ int w_getDisplayName(lua_State *L)
int index = luaL_checkint(L, 1) - 1;
const char *name = nullptr;
luax_catchexcept(L, [&](){ name = instance->getDisplayName(index); });
luax_catchexcept(L, [&](){ name = instance()->getDisplayName(index); });
lua_pushstring(L, name);
return 1;
@@ -59,7 +59,7 @@ int w_setMode(lua_State *L)
if (lua_isnoneornil(L, 3))
{
luax_pushboolean(L, instance->setWindow(w, h, 0));
luax_pushboolean(L, instance()->setWindow(w, h, 0));
return 1;
}
@@ -113,7 +113,7 @@ int w_setMode(lua_State *L)
settings.display--;
luax_catchexcept(L,
[&](){ luax_pushboolean(L, instance->setWindow(w, h, &settings)); }
[&](){ luax_pushboolean(L, instance()->setWindow(w, h, &settings)); }
);
return 1;
@@ -123,7 +123,7 @@ int w_getMode(lua_State *L)
{
int w, h;
WindowSettings settings;
instance->getWindow(w, h, settings);
instance()->getWindow(w, h, settings);
lua_pushnumber(L, w);
lua_pushnumber(L, h);
@@ -176,7 +176,7 @@ int w_getFullscreenModes(lua_State *L)
{
int displayindex = luaL_optint(L, 1, 1) - 1;
std::vector<Window::WindowSize> modes = instance->getFullscreenSizes(displayindex);
std::vector<Window::WindowSize> modes = instance()->getFullscreenSizes(displayindex);
lua_createtable(L, modes.size(), 0);
@@ -212,9 +212,9 @@ int w_setFullscreen(lua_State *L)
bool success = false;
if (fstype == Window::FULLSCREEN_TYPE_MAX_ENUM)
success = instance->setFullscreen(fullscreen);
success = instance()->setFullscreen(fullscreen);
else
success = instance->setFullscreen(fullscreen, fstype);
success = instance()->setFullscreen(fullscreen, fstype);
luax_pushboolean(L, success);
return 1;
@@ -224,7 +224,7 @@ int w_getFullscreen(lua_State *L)
{
int w, h;
WindowSettings settings;
instance->getWindow(w, h, settings);
instance()->getWindow(w, h, settings);
const char *typestr;
if (!Window::getConstant(settings.fstype, typestr))
@@ -237,7 +237,7 @@ int w_getFullscreen(lua_State *L)
int w_isCreated(lua_State *L)
{
luax_pushboolean(L, instance->isCreated());
luax_pushboolean(L, instance()->isCreated());
return 1;
}
@@ -245,7 +245,7 @@ int w_getDesktopDimensions(lua_State *L)
{
int width = 0, height = 0;
int displayindex = luaL_optint(L, 1, 1) - 1;
instance->getDesktopDimensions(displayindex, width, height);
instance()->getDesktopDimensions(displayindex, width, height);
lua_pushinteger(L, width);
lua_pushinteger(L, height);
return 2;
@@ -254,13 +254,13 @@ int w_getDesktopDimensions(lua_State *L)
int w_setIcon(lua_State *L)
{
image::ImageData *i = luax_checktype<image::ImageData>(L, 1, "ImageData", IMAGE_IMAGE_DATA_T);
luax_pushboolean(L, instance->setIcon(i));
luax_pushboolean(L, instance()->setIcon(i));
return 1;
}
int w_getIcon(lua_State *L)
{
image::ImageData *i = instance->getIcon();
image::ImageData *i = instance()->getIcon();
if (i)
{
i->retain();
@@ -274,46 +274,106 @@ int w_getIcon(lua_State *L)
int w_setTitle(lua_State *L)
{
std::string title = luax_checkstring(L, 1);
instance->setWindowTitle(title);
instance()->setWindowTitle(title);
return 0;
}
int w_getTitle(lua_State *L)
{
luax_pushstring(L, instance->getWindowTitle());
luax_pushstring(L, instance()->getWindowTitle());
return 1;
}
int w_hasFocus(lua_State *L)
{
luax_pushboolean(L, instance->hasFocus());
luax_pushboolean(L, instance()->hasFocus());
return 1;
}
int w_hasMouseFocus(lua_State *L)
{
luax_pushboolean(L, instance->hasMouseFocus());
luax_pushboolean(L, instance()->hasMouseFocus());
return 1;
}
int w_isVisible(lua_State *L)
{
luax_pushboolean(L, instance->isVisible());
luax_pushboolean(L, instance()->isVisible());
return 1;
}
int w_getPixelScale(lua_State *L)
{
lua_pushnumber(L, instance->getPixelScale());
lua_pushnumber(L, instance()->getPixelScale());
return 1;
}
int w_minimize(lua_State* /*L*/)
{
instance->minimize();
instance()->minimize();
return 0;
}
int w_showMessageBox(lua_State *L)
{
Window::MessageBoxData data = {};
const char *typestr = luaL_checkstring(L, 1);
if (!Window::getConstant(typestr, data.type))
return luaL_error(L, "Invalid messagebox type: %s", typestr);
data.title = luaL_checkstring(L, 2);
data.message = luaL_checkstring(L, 3);
// If we have a table argument, we assume a list of button names, which
// means we should use the more complex message box API.
if (lua_istable(L, 4))
{
size_t numbuttons = lua_objlen(L, 4);
if (numbuttons == 0)
return luaL_error(L, "Must have at least one messagebox button.");
// Array of button names.
for (size_t i = 0; i < numbuttons; i++)
{
lua_rawgeti(L, 4, i + 1);
data.buttons.push_back(luax_checkstring(L, -1));
lua_pop(L, 1);
}
// Optional table entry specifying the button to use when enter is pressed.
lua_getfield(L, 4, "enterbutton");
if (!lua_isnoneornil(L, -1))
data.enterButtonIndex = luaL_checkint(L, -1) - 1;
else
data.enterButtonIndex = 0;
lua_pop(L, 1);
// Optional table entry specifying the button to use when esc is pressed.
lua_getfield(L, 4, "escapebutton");
if (!lua_isnoneornil(L, -1))
data.escapeButtonIndex = luaL_checkint(L, -1) - 1;
else
data.escapeButtonIndex = (int) data.buttons.size() - 1;
lua_pop(L, 1);
data.attachToWindow = luax_optboolean(L, 5, true);
int pressedbutton = instance()->showMessageBox(data);
lua_pushinteger(L, pressedbutton + 1);
}
else
{
data.attachToWindow = luax_optboolean(L, 4, true);
// Display a simple message box.
bool success = instance()->showMessageBox(data.type, data.title, data.message, data.attachToWindow);
luax_pushboolean(L, success);
}
return 1;
}
static const luaL_Reg functions[] =
{
{ "getDisplayCount", w_getDisplayCount },
@@ -334,11 +394,13 @@ static const luaL_Reg functions[] =
{ "isVisible", w_isVisible },
{ "getPixelScale", w_getPixelScale },
{ "minimize", w_minimize },
{ "showMessageBox", w_showMessageBox },
{ 0, 0 }
};
extern "C" int luaopen_love_window(lua_State *L)
{
Window *instance = nullptr;
luax_catchexcept(L, [&](){ instance = sdl::Window::createSingleton(); });
WrappedModule w;