mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
Catch errors in love.font.newRasterizer, add luax_pconvobj which pcalls, allowing love.graphics.newFont to clean up before re-erroring
This commit is contained in:
@@ -39,18 +39,25 @@ static Font *instance = 0;
|
||||
int w_newRasterizer(lua_State *L)
|
||||
{
|
||||
Rasterizer *t = NULL;
|
||||
if (luax_istype(L, 1, IMAGE_IMAGE_DATA_T))
|
||||
try
|
||||
{
|
||||
love::image::ImageData *d = luax_checktype<love::image::ImageData>(L, 1, "ImageData", IMAGE_IMAGE_DATA_T);
|
||||
const char *g = luaL_checkstring(L, 2);
|
||||
std::string glyphs(g);
|
||||
t = instance->newRasterizer(d, glyphs);
|
||||
if (luax_istype(L, 1, IMAGE_IMAGE_DATA_T))
|
||||
{
|
||||
love::image::ImageData *d = luax_checktype<love::image::ImageData>(L, 1, "ImageData", IMAGE_IMAGE_DATA_T);
|
||||
const char *g = luaL_checkstring(L, 2);
|
||||
std::string glyphs(g);
|
||||
t = instance->newRasterizer(d, glyphs);
|
||||
}
|
||||
else if (luax_istype(L, 1, DATA_T))
|
||||
{
|
||||
Data *d = luax_checkdata(L, 1);
|
||||
int size = luaL_checkint(L, 2);
|
||||
t = instance->newRasterizer(d, size);
|
||||
}
|
||||
}
|
||||
else if (luax_istype(L, 1, DATA_T))
|
||||
catch (love::Exception &e)
|
||||
{
|
||||
Data *d = luax_checkdata(L, 1);
|
||||
int size = luaL_checkint(L, 2);
|
||||
t = instance->newRasterizer(d, size);
|
||||
return luaL_error(L, "%s", e.what());
|
||||
}
|
||||
|
||||
luax_newtype(L, "Rasterizer", FONT_RASTERIZER_T, t);
|
||||
|
||||
@@ -277,7 +277,12 @@ int w_newFont(lua_State *L)
|
||||
if (luax_istype(L, 1, DATA_T))
|
||||
{
|
||||
int idxs[] = {1, 2};
|
||||
luax_convobj(L, idxs, 2, "font", "newRasterizer");
|
||||
int ret = luax_pconvobj(L, idxs, 2, "font", "newRasterizer");
|
||||
if (ret != 0)
|
||||
{
|
||||
font_data->release();
|
||||
return lua_error(L);
|
||||
}
|
||||
}
|
||||
|
||||
if (font_data)
|
||||
|
||||
Reference in New Issue
Block a user