Fix some problems with sprites with non-zero transparent color.

+ color_utils::color_for_layer() must return the sprite's transparent
  color when the "Mask" is specified.
+ New cels in ExpandCelCanvas must be created with the sprite's
  transparent color.
This commit is contained in:
David Capello 2011-10-29 21:54:16 -03:00
parent 0839b10569
commit 8d37636f1a
2 changed files with 12 additions and 5 deletions

View File

@ -135,9 +135,17 @@ int color_utils::color_for_image(const Color& color, int imgtype)
int color_utils::color_for_layer(const Color& color, Layer* layer)
{
int imgtype = layer->getSprite()->getImgType();
int pixel_color;
return fixup_color_for_layer(layer, color_for_image(color, imgtype));
if (color.getType() == Color::MaskType) {
pixel_color = layer->getSprite()->getTransparentColor();
}
else {
int imgtype = layer->getSprite()->getImgType();
pixel_color = color_for_image(color, imgtype);
}
return fixup_color_for_layer(layer, pixel_color);
}
int color_utils::fixup_color_for_layer(Layer *layer, int color)

View File

@ -56,8 +56,7 @@ ExpandCelCanvas::ExpandCelCanvas(Document* document, Sprite* sprite, Layer* laye
if (m_cel == NULL) {
// Create the image
m_celImage = image_new(m_sprite->getImgType(), m_sprite->getWidth(), m_sprite->getHeight());
image_clear(m_celImage,
m_celImage->mask_color);
image_clear(m_celImage, sprite->getTransparentColor());
// create the cel
m_cel = new Cel(m_sprite->getCurrentFrame(), 0);
@ -89,7 +88,7 @@ ExpandCelCanvas::ExpandCelCanvas(Document* document, Sprite* sprite, Layer* laye
m_srcImage = image_crop(m_celImage,
x1-m_cel->getX(),
y1-m_cel->getY(), x2-x1, y2-y1,
m_celImage->mask_color);
m_sprite->getTransparentColor());
m_dstImage = image_new_copy(m_srcImage);