static int graphicsLine(lua_State *L) { // love.graphics.line() -- Semi-Broken if (sf2d_get_current_screen() == currentScreen) { int argc = lua_gettop(L); int i = 0; if ((argc/2)*2 == argc) { for( i; i < argc / 2; i++) { int t = i * 4; int x1 = luaL_checkinteger(L, t + 1); int y1 = luaL_checkinteger(L, t + 2); int x2 = luaL_checkinteger(L, t + 3); int y2 = luaL_checkinteger(L, t + 4); translateCoords(&x1, &y1); translateCoords(&x2, &y2); sf2d_draw_line(x1, y1, x2, y2, currentLineWidth, getCurrentColor()); } } } return 0; }
static int graphicsRectangle(lua_State *L) { // love.graphics.rectangle() if (sf2d_get_current_screen() == currentScreen) { char *mode = luaL_checkstring(L, 1); int x = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 3); translateCoords(&x, &y); int w = luaL_checkinteger(L, 4); int h = luaL_checkinteger(L, 5); if (strcmp(mode, "fill") == 0) { sf2d_draw_rectangle(x, y, w, h, getCurrentColor()); } else if (strcmp(mode, "line") == 0) { sf2d_draw_line(x, y, x, y + h, currentLineWidth, getCurrentColor()); sf2d_draw_line(x, y, x + w, y, currentLineWidth, getCurrentColor()); sf2d_draw_line(x + w, y, x + w, y + h, currentLineWidth, getCurrentColor()); sf2d_draw_line(x, y + h, x + w, y + h, currentLineWidth, getCurrentColor()); } } return 0; }
static int graphicsDraw(lua_State *L) { // love.graphics.draw() if (sf2d_get_current_screen() == currentScreen) { love_image *img = luaobj_checkudata(L, 1, LUAOBJ_TYPE_IMAGE); love_quad *quad = NULL; int x, y; float rad; if (!lua_isnone(L, 2) && lua_type(L, 2) != LUA_TNUMBER) { quad = luaobj_checkudata(L, 2, LUAOBJ_TYPE_QUAD); x = luaL_optnumber(L, 3, 0); y = luaL_optnumber(L, 4, 0); rad = luaL_optnumber(L, 5, 0); } else { x = luaL_optnumber(L, 2, 0); y = luaL_optnumber(L, 3, 0); rad = luaL_optnumber(L, 4, 0); } translateCoords(&x, &y); if (rad == 0) { if (!quad) { if (img) { sf2d_draw_texture_blend(img->texture, x, y, getCurrentColor()); } } else { sf2d_draw_texture_part_blend(img->texture, x, y, quad->x, quad->y, quad->width, quad->height, getCurrentColor()); } } else { sf2d_draw_texture_rotate_blend(img->texture, x + img->texture->width / 2, y + img->texture->height / 2, rad, getCurrentColor()); } } return 0; }
static int graphicsPrintFormat(lua_State *L) { if (sf2d_get_current_screen() == currentScreen) { if (currentFont) { char *printText = luaL_checkstring(L, 1); int x = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 3); int limit = luaL_checkinteger(L, 4); char *align = luaL_optstring(L, 5, "left"); int width = sftd_get_text_width(currentFont->font, currentFont->size, printText); if (strcmp(align, "center") == 0) { if (width < limit) { x += (limit / 2) - (width / 2); } } else if (strcmp(align, "right") == 0) { if (width < limit) { x += limit - width; } } translateCoords(&x, &y); if (x > 0) limit += x; // Quick text wrap fix, needs removing once sf2dlib is updated. sftd_draw_text_wrap(currentFont->font, x, y, getCurrentColor(), currentFont->size, limit, printText); } } return 0; }
static int graphicsPrint(lua_State *L) { // love.graphics.print() if (sf2d_get_current_screen() == currentScreen) { if (currentFont) { char *printText = luaL_checkstring(L, 1); int x = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 3); translateCoords(&x, &y); sftd_draw_text(currentFont->font, x, y, getCurrentColor(), currentFont->size, printText); } } return 0; }
static int graphicsCircle(lua_State *L) { // love.graphics.circle() if (sf2d_get_current_screen() == currentScreen) { int step = 15; char *mode = luaL_checkstring(L, 1); int x = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 3); int r = luaL_checkinteger(L, 4); translateCoords(&x, &y); sf2d_draw_line(x, y, x, y, 1, getCurrentColor()); // Fixes weird circle bug. sf2d_draw_fill_circle(x, y, r, getCurrentColor()); } return 0; }
ofPoint mui::Helpers::translateCoords( ofPoint pt, Container * src, Container * dest ){ return translateCoords(pt.x, pt.y, src, dest); }