static int l_font_draw(lua_State *L) { THFont* pFont = luaT_testuserdata<THFont>(L); THRenderTarget* pCanvas = nullptr; if(!lua_isnoneornil(L, 2)) { pCanvas = luaT_testuserdata<THRenderTarget>(L, 2); } size_t iMsgLen; const char* sMsg = luaT_checkstring(L, 3, &iMsgLen); int iX = static_cast<int>(luaL_checkinteger(L, 4)); int iY = static_cast<int>(luaL_checkinteger(L, 5)); eTHAlign eAlign = Align_Center; if(!lua_isnoneornil(L, 8)) { const char* sAlign = luaL_checkstring(L, 8); if(std::strcmp(sAlign, "right") == 0) eAlign = Align_Right; else if(std::strcmp(sAlign, "left") == 0) eAlign = Align_Left; else if(std::strcmp(sAlign, "center") == 0 || std::strcmp(sAlign, "centre") == 0 || std::strcmp(sAlign, "middle") == 0) { eAlign = Align_Center; } else return luaL_error(L, "Invalid alignment: \"%s\"", sAlign); } THFontDrawArea oDrawArea = pFont->getTextSize(sMsg, iMsgLen); if(!lua_isnoneornil(L, 7)) { int iW = static_cast<int>(luaL_checkinteger(L, 6)); int iH = static_cast<int>(luaL_checkinteger(L, 7)); if(iW > oDrawArea.iEndX && eAlign != Align_Left) iX += (iW - oDrawArea.iEndX) / ((eAlign == Align_Center) ? 2 : 1); if(iH > oDrawArea.iEndY) iY += (iH - oDrawArea.iEndY) / 2; } if(pCanvas != nullptr) { pFont->drawText(pCanvas, sMsg, iMsgLen, iX, iY); } lua_pushinteger(L, iY + oDrawArea.iEndY); lua_pushinteger(L, iX + oDrawArea.iEndX); return 2; }
static int l_font_draw(lua_State *L) { THFont* pFont = luaT_testuserdata<THFont>(L); THRenderTarget* pCanvas = NULL; if(!lua_isnoneornil(L, 2)) { pCanvas = luaT_testuserdata<THRenderTarget>(L, 2); } size_t iMsgLen; const char* sMsg = luaT_checkstring(L, 3, &iMsgLen); int iX = luaL_checkint(L, 4); int iY = luaL_checkint(L, 5); eTHAlign eAlign = Align_Center; if(!lua_isnoneornil(L, 8)) { const char* sAlign = luaL_checkstring(L, 8); if(strcmp(sAlign, "right") == 0) eAlign = Align_Right; else if(strcmp(sAlign, "left") == 0) eAlign = Align_Left; else if(strcmp(sAlign, "center") == 0 || strcmp(sAlign, "centre") == 0 || strcmp(sAlign, "middle") == 0) { eAlign = Align_Center; } else return luaL_error(L, "Invalid alignment: \"%s\"", sAlign); } int iWidth, iHeight; pFont->getTextSize(sMsg, iMsgLen, &iWidth, &iHeight); if(!lua_isnoneornil(L, 7)) { int iW = luaL_checkint(L, 6); int iH = luaL_checkint(L, 7); if(iW > iWidth && eAlign != Align_Left) iX += (iW - iWidth) / ((eAlign == Align_Center) ? 2 : 1); if(iH > iHeight) iY += (iH - iHeight) / 2; } if(pCanvas != NULL) { pFont->drawText(pCanvas, sMsg, iMsgLen, iX, iY); } lua_pushinteger(L, iY + iHeight); lua_pushinteger(L, iX + iWidth); return 2; }