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