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 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) 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) { if (m_cel == NULL) {
// Create the image // Create the image
m_celImage = image_new(m_sprite->getImgType(), m_sprite->getWidth(), m_sprite->getHeight()); m_celImage = image_new(m_sprite->getImgType(), m_sprite->getWidth(), m_sprite->getHeight());
image_clear(m_celImage, image_clear(m_celImage, sprite->getTransparentColor());
m_celImage->mask_color);
// create the cel // create the cel
m_cel = new Cel(m_sprite->getCurrentFrame(), 0); 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, m_srcImage = image_crop(m_celImage,
x1-m_cel->getX(), x1-m_cel->getX(),
y1-m_cel->getY(), x2-x1, y2-y1, y1-m_cel->getY(), x2-x1, y2-y1,
m_celImage->mask_color); m_sprite->getTransparentColor());
m_dstImage = image_new_copy(m_srcImage); m_dstImage = image_new_copy(m_srcImage);