diff options
author | 2015-03-24 10:14:32 +0100 | |
---|---|---|
committer | 2015-03-24 10:14:32 +0100 | |
commit | 1e09899b01151de732552bc8b093cba0e5fc64f2 (patch) | |
tree | 8b29ee68fd6d8d24cbb5dbd4c4169884647e3553 /src/emu/luaengine.c | |
parent | d044c6b161757d93eb9575774bd131b5bb2a8214 (diff) | |
parent | 1fa8b4ea4febee62516ea45a57568d0274cbd09a (diff) |
Merge pull request #148 from lucab/lucab/mame-lua/misc
luaengine: screen drawing fixes and initial docs
Diffstat (limited to 'src/emu/luaengine.c')
-rw-r--r-- | src/emu/luaengine.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/emu/luaengine.c b/src/emu/luaengine.c index 256fa460be6..c8bb21eedc3 100644 --- a/src/emu/luaengine.c +++ b/src/emu/luaengine.c @@ -639,11 +639,13 @@ int lua_engine::lua_screen::l_draw_box(lua_State *L) luaL_argcheck(L, lua_isnumber(L, 7), 7, "outline color (integer) expected"); // retrieve all parameters + int sc_width = sc->visible_area().width(); + int sc_height = sc->visible_area().height(); float x1, y1, x2, y2; - x1 = MIN(lua_tounsigned(L, 2) / static_cast<float>(sc->visible_area().width()) , 1.0f); - y1 = MIN(lua_tounsigned(L, 3) / static_cast<float>(sc->visible_area().height()), 1.0f); - x2 = MIN(lua_tounsigned(L, 4) / static_cast<float>(sc->visible_area().width()) , 1.0f); - y2 = MIN(lua_tounsigned(L, 5) / static_cast<float>(sc->visible_area().height()), 1.0f); + x1 = MIN(MAX(0, lua_tointeger(L, 2)), sc_width-1) / static_cast<float>(sc_width); + y1 = MIN(MAX(0, lua_tointeger(L, 3)), sc_height-1) / static_cast<float>(sc_height); + x2 = MIN(MAX(0, lua_tointeger(L, 4)), sc_width-1) / static_cast<float>(sc_width); + y2 = MIN(MAX(0, lua_tointeger(L, 5)), sc_height-1) / static_cast<float>(sc_height); UINT32 bgcolor = lua_tounsigned(L, 6); UINT32 fgcolor = lua_tounsigned(L, 7); @@ -675,11 +677,13 @@ int lua_engine::lua_screen::l_draw_line(lua_State *L) luaL_argcheck(L, lua_isnumber(L, 6), 6, "color (integer) expected"); // retrieve all parameters + int sc_width = sc->visible_area().width(); + int sc_height = sc->visible_area().height(); float x1, y1, x2, y2; - x1 = MIN(lua_tounsigned(L, 2) / static_cast<float>(sc->visible_area().width()) , 1.0f); - y1 = MIN(lua_tounsigned(L, 3) / static_cast<float>(sc->visible_area().height()), 1.0f); - x2 = MIN(lua_tounsigned(L, 4) / static_cast<float>(sc->visible_area().width()) , 1.0f); - y2 = MIN(lua_tounsigned(L, 5) / static_cast<float>(sc->visible_area().height()), 1.0f); + x1 = MIN(MAX(0, lua_tointeger(L, 2)), sc_width-1) / static_cast<float>(sc_width); + y1 = MIN(MAX(0, lua_tointeger(L, 3)), sc_height-1) / static_cast<float>(sc_height); + x2 = MIN(MAX(0, lua_tointeger(L, 4)), sc_width-1) / static_cast<float>(sc_width); + y2 = MIN(MAX(0, lua_tointeger(L, 5)), sc_height-1) / static_cast<float>(sc_height); UINT32 color = lua_tounsigned(L, 6); // draw the line @@ -705,8 +709,10 @@ int lua_engine::lua_screen::l_draw_text(lua_State *L) luaL_argcheck(L, lua_isstring(L, 4), 4, "message (string) expected"); // retrieve all parameters - float x = MIN(lua_tounsigned(L, 2) / static_cast<float>(sc->visible_area().width()) , 1.0f); - float y = MIN(lua_tounsigned(L, 3) / static_cast<float>(sc->visible_area().height()), 1.0f); + int sc_width = sc->visible_area().width(); + int sc_height = sc->visible_area().height(); + float x = MIN(MAX(0, lua_tointeger(L, 2)), sc_width-1) / static_cast<float>(sc_width); + float y = MIN(MAX(0, lua_tointeger(L, 3)), sc_height-1) / static_cast<float>(sc_height); const char *msg = luaL_checkstring(L,4); // TODO: add optional parameters (colors, etc.) |