copy added

This commit is contained in:
p.kosyh 2011-04-13 17:42:11 +00:00
parent 1c678e5072
commit 1da38af50e
4 changed files with 76 additions and 0 deletions

View file

@ -902,6 +902,26 @@ void gfx_draw_from(img_t p, int x, int y, int width, int height, img_t to, int x
SDL_BlitSurface(pixbuf, &src, scr, &dest);
}
void gfx_copy_from(img_t p, int x, int y, int width, int height, img_t to, int xx, int yy)
{
SDL_Surface *pixbuf = (SDL_Surface *)p;
SDL_Surface *scr = (SDL_Surface *)to;
SDL_Rect dest, src;
if (!scr)
scr = screen;
src.x = x;
src.y = y;
src.w = width;
src.h = height;
dest.x = xx;
dest.y = yy;
dest.w = width;
dest.h = height;
gfx_unset_alpha(pixbuf);
SDL_BlitSurface(pixbuf, &src, scr, &dest);
gfx_set_alpha(pixbuf, 255);
}
void gfx_draw(img_t p, int x, int y)
{
anigif_t ag;

View file

@ -73,6 +73,7 @@ extern int gfx_prev_mode(int *w, int *h);
extern void gfx_update(int x, int y, int w, int h);
extern void gfx_video_done(void);
extern void gfx_clear(int x, int y, int w, int h);
extern void gfx_copy_from(img_t p, int x, int y, int width, int height, img_t to, int xx, int yy);
extern void gfx_draw(img_t pixmap, int x, int y);
extern void gfx_draw_wh(img_t p, int x, int y, int w, int h);
extern img_t gfx_grab_screen(int x, int y, int w, int h);

View file

@ -915,6 +915,54 @@ static int luaB_draw_sprite(lua_State *L) {
return 1;
}
static int luaB_copy_sprite(lua_State *L) {
img_t s, d;
img_t img2 = NULL;
float v;
const char *src = luaL_optstring(L, 1, NULL);
int x = luaL_optnumber(L, 2, 0);
int y = luaL_optnumber(L, 3, 0);
int w = luaL_optnumber(L, 4, 0);
int h = luaL_optnumber(L, 5, 0);
const char *dst = luaL_optstring(L, 6, NULL);
int xx = luaL_optnumber(L, 7, 0);
int yy = luaL_optnumber(L, 8, 0);
int xoff = 0, yoff = 0;
int xoff0 = 0, yoff0 = 0;
if (!src || !dst)
return 0;
s = grab_sprite(src, &xoff0, &yoff0);
d = grab_sprite(dst, &xoff, &yoff);
if (!s || !d)
return 0;
v = game_theme.scale;
if (v != 1.0f) {
x *= v;
y *= v;
w *= v;
h *= v;
xx *= v;
yy *= v;
}
if (!w)
w = gfx_img_w(s) - 2 * xoff0;
if (!h)
h = gfx_img_h(s) - 2 * yoff0;
game_pict_modify(d);
gfx_copy_from(s, x + xoff0, y + yoff0, w, h, d, xx + xoff, yy + yoff);
gfx_free_image(img2);
lua_pushboolean(L, 1);
return 1;
}
static int luaB_alpha_sprite(lua_State *L) {
_spr_t *sp;
@ -1185,6 +1233,7 @@ static const luaL_Reg base_funcs[] = {
{"sprite_free", luaB_free_sprite},
{"sprites_free", luaB_free_sprites},
{"sprite_draw", luaB_draw_sprite},
{"sprite_copy", luaB_copy_sprite},
{"sprite_fill", luaB_fill_sprite},
{"sprite_dup", luaB_dup_sprite},
{"sprite_alpha", luaB_alpha_sprite},

View file

@ -50,6 +50,12 @@ sprite = {
end
return sprite_draw(s, fx, fy, fw, fh, d, x, y, alpha);
end;
copy = function(s, fx, fy, fw, fh, d, x, y, alpha)
if d == nil and x == nil and y == nil then
return sprite_copy(s, 0, 0, 0, 0, fx, fy, fw, fh);
end
return sprite_copy(s, fx, fy, fw, fh, d, x, y, alpha);
end;
fill = function(d, x, y, w, h, col)
if h == nil and col == nil then
return sprite_fill(d, 0, 0, 0, 0, x);