mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-11 13:14:17 +00:00
Fixed the copy & paste.
This commit is contained in:
parent
d1c38d7dfe
commit
549210b95f
@ -70,7 +70,7 @@ static void do_quick (int action)
|
||||
dst_layer = sprite->layer;
|
||||
|
||||
/* create a new layer from the mask */
|
||||
handle_layer = NewLayerFromMask ();
|
||||
handle_layer = NewLayerFromMask(sprite, sprite);
|
||||
if (!handle_layer)
|
||||
return;
|
||||
|
||||
|
@ -225,7 +225,7 @@ Image *GetImage2(Sprite *sprite, int *x, int *y, int *opacity); /* CODE */
|
||||
void LoadPalette(const char *filename);
|
||||
|
||||
void ClearMask(void);
|
||||
Layer *NewLayerFromMask(void);
|
||||
Layer *NewLayerFromMask(Sprite *src_sprite, Sprite *dst_sprite);
|
||||
|
||||
/* util/msk_file.c */
|
||||
|
||||
|
@ -1055,14 +1055,6 @@ static int bind_ClearMask(lua_State *L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bind_NewLayerFromMask(lua_State *L)
|
||||
{
|
||||
Layer *return_value;
|
||||
return_value = NewLayerFromMask();
|
||||
push_userdata(L, Type_Layer, return_value);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int bind_load_msk_file(lua_State *L)
|
||||
{
|
||||
Mask *return_value;
|
||||
@ -3256,7 +3248,6 @@ const luaL_reg bindings_routines[] = {
|
||||
{ "GetImage2", bind_GetImage2 },
|
||||
{ "LoadPalette", bind_LoadPalette },
|
||||
{ "ClearMask", bind_ClearMask },
|
||||
{ "NewLayerFromMask", bind_NewLayerFromMask },
|
||||
{ "load_msk_file", bind_load_msk_file },
|
||||
{ "save_msk_file", bind_save_msk_file },
|
||||
{ "sprite_quantize", bind_sprite_quantize },
|
||||
|
@ -117,7 +117,7 @@ bool has_clipboard_image(int *w, int *h)
|
||||
}
|
||||
}
|
||||
|
||||
void copy_image_to_clipboard(struct Image *image)
|
||||
void copy_image_to_clipboard(Image *image)
|
||||
{
|
||||
Sprite *sprite;
|
||||
Image *dest;
|
||||
@ -164,7 +164,9 @@ void paste_from_clipboard(void)
|
||||
int xout[4], yout[4];
|
||||
bool paste;
|
||||
|
||||
if (!current_sprite || current_sprite == clipboard || !clipboard->layer ||
|
||||
if (!current_sprite ||
|
||||
current_sprite == clipboard ||
|
||||
!clipboard->layer ||
|
||||
!is_interactive())
|
||||
return;
|
||||
|
||||
@ -636,13 +638,18 @@ static int low_copy(void)
|
||||
Sprite *sprite;
|
||||
Layer *layer;
|
||||
|
||||
layer = NewLayerFromMask();
|
||||
if (!layer)
|
||||
return FALSE;
|
||||
|
||||
sprite = sprite_new(current_sprite->imgtype,
|
||||
current_sprite->w,
|
||||
current_sprite->h);
|
||||
if (!sprite)
|
||||
return FALSE;
|
||||
|
||||
layer = NewLayerFromMask(current_sprite, sprite);
|
||||
if (!layer) {
|
||||
sprite_free(sprite);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
layer_add_layer(sprite->set, layer);
|
||||
sprite_set_layer(sprite, layer);
|
||||
sprite_set_frame(sprite, current_sprite->frame);
|
||||
|
@ -184,20 +184,21 @@ void ClearMask(void)
|
||||
|
||||
/* returns a new layer created from the current mask in the current
|
||||
sprite, the layer isn't added to the sprite */
|
||||
Layer *NewLayerFromMask(void)
|
||||
Layer *NewLayerFromMask(Sprite *src_sprite, Sprite *dst_sprite)
|
||||
{
|
||||
Sprite *sprite = current_sprite;
|
||||
unsigned char *address;
|
||||
int x, y, u, v, getx, gety;
|
||||
Image *dst, *src = GetImage2 (sprite, &x, &y, NULL);
|
||||
Image *dst, *src = GetImage2(src_sprite, &x, &y, NULL);
|
||||
Layer *layer;
|
||||
Cel *cel;
|
||||
div_t d;
|
||||
|
||||
if (!sprite || !sprite->mask || !sprite->mask->bitmap || !src)
|
||||
if (!src_sprite || !src_sprite->mask || !src_sprite->mask->bitmap || !src)
|
||||
return NULL;
|
||||
|
||||
dst = image_new(sprite->imgtype, sprite->mask->w, sprite->mask->h);
|
||||
dst = image_new(dst_sprite->imgtype,
|
||||
src_sprite->mask->w,
|
||||
src_sprite->mask->h);
|
||||
if (!dst)
|
||||
return NULL;
|
||||
|
||||
@ -205,14 +206,14 @@ Layer *NewLayerFromMask(void)
|
||||
image_clear(dst, 0);
|
||||
|
||||
/* copy the masked zones */
|
||||
for (v=0; v<sprite->mask->h; v++) {
|
||||
for (v=0; v<src_sprite->mask->h; v++) {
|
||||
d = div(0, 8);
|
||||
address = ((unsigned char **)sprite->mask->bitmap->line)[v]+d.quot;
|
||||
address = ((unsigned char **)src_sprite->mask->bitmap->line)[v]+d.quot;
|
||||
|
||||
for (u=0; u<sprite->mask->w; u++) {
|
||||
for (u=0; u<src_sprite->mask->w; u++) {
|
||||
if ((*address & (1<<d.rem))) {
|
||||
getx = u+sprite->mask->x-x;
|
||||
gety = v+sprite->mask->y-y;
|
||||
getx = u+src_sprite->mask->x-x;
|
||||
gety = v+src_sprite->mask->y-y;
|
||||
|
||||
if ((getx >= 0) && (getx < src->w) &&
|
||||
(gety >= 0) && (gety < src->h))
|
||||
@ -224,7 +225,7 @@ Layer *NewLayerFromMask(void)
|
||||
}
|
||||
}
|
||||
|
||||
layer = layer_new(sprite);
|
||||
layer = layer_new(dst_sprite);
|
||||
if (!layer) {
|
||||
image_free(dst);
|
||||
return NULL;
|
||||
@ -232,8 +233,8 @@ Layer *NewLayerFromMask(void)
|
||||
|
||||
layer_set_blend_mode(layer, BLEND_MODE_NORMAL);
|
||||
|
||||
cel = cel_new(sprite->frame, stock_add_image(sprite->stock, dst));
|
||||
cel_set_position(cel, sprite->mask->x, sprite->mask->y);
|
||||
cel = cel_new(dst_sprite->frame, stock_add_image(dst_sprite->stock, dst));
|
||||
cel_set_position(cel, dst_sprite->mask->x, dst_sprite->mask->y);
|
||||
|
||||
layer_add_cel(layer, cel);
|
||||
|
||||
|
@ -33,7 +33,7 @@ struct Image *GetImage2(struct Sprite *sprite, int *x, int *y, int *opacity);
|
||||
void LoadPalette(const char *filename);
|
||||
|
||||
void ClearMask(void);
|
||||
struct Layer *NewLayerFromMask(void);
|
||||
struct Layer *NewLayerFromMask(struct Sprite *src, struct Sprite *dst);
|
||||
|
||||
struct Image *GetLayerImage(struct Layer *layer, int *x, int *y, int frame);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user