Fixed problems with cel position alignment in Undoable::clear_mask and paste_image members functions.

This commit is contained in:
David Capello 2010-05-03 22:55:06 -03:00
parent 8b4c4f6a5a
commit a98113a92e

View File

@ -960,11 +960,13 @@ void Undoable::clear_mask(int bgcolor)
} }
} }
else { else {
int offset_x = m_sprite->getMask()->x-cel->x;
int offset_y = m_sprite->getMask()->y-cel->y;
int u, v, putx, puty; int u, v, putx, puty;
int x1 = MAX(0, m_sprite->getMask()->x); int x1 = MAX(0, offset_x);
int y1 = MAX(0, m_sprite->getMask()->y); int y1 = MAX(0, offset_y);
int x2 = MIN(image->w-1, m_sprite->getMask()->x+m_sprite->getMask()->w-1); int x2 = MIN(image->w-1, offset_x+m_sprite->getMask()->w-1);
int y2 = MIN(image->h-1, m_sprite->getMask()->y+m_sprite->getMask()->h-1); int y2 = MIN(image->h-1, offset_y+m_sprite->getMask()->h-1);
// do nothing // do nothing
if (x1 > x2 || y1 > y2) if (x1 > x2 || y1 > y2)
@ -980,8 +982,8 @@ void Undoable::clear_mask(int bgcolor)
for (u=0; u<m_sprite->getMask()->w; u++) { for (u=0; u<m_sprite->getMask()->w; u++) {
if ((*address & (1<<d.rem))) { if ((*address & (1<<d.rem))) {
putx = u + m_sprite->getMask()->x - cel->x; putx = u + offset_x;
puty = v + m_sprite->getMask()->y - cel->y; puty = v + offset_y;
image_putpixel(image, putx, puty, bgcolor); image_putpixel(image, putx, puty, bgcolor);
} }
@ -1031,7 +1033,7 @@ void Undoable::paste_image(const Image* src_image, int x, int y, int opacity)
Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image); Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image);
Image* cel_image2 = image_new_copy(cel_image); Image* cel_image2 = image_new_copy(cel_image);
image_merge(cel_image2, src_image, x, y, opacity, BLEND_MODE_NORMAL); image_merge(cel_image2, src_image, x-cel->x, y-cel->y, opacity, BLEND_MODE_NORMAL);
replace_stock_image(cel->image, cel_image2); // TODO fix this, improve, avoid replacing the whole image replace_stock_image(cel->image, cel_image2); // TODO fix this, improve, avoid replacing the whole image
} }