From 4e7096f15eba73e6ea28066df6ab389aab3f052c Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 1 Aug 2011 15:34:45 +0300 Subject: Fix random opacity issue in complex sprites in software mode. --- src/animatedsprite.cpp | 8 ++++++++ src/animatedsprite.h | 2 ++ src/compoundsprite.cpp | 25 +++++++++++++++---------- src/compoundsprite.h | 2 ++ 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/animatedsprite.cpp b/src/animatedsprite.cpp index 8ccdd61e5..0b9eb5ddd 100644 --- a/src/animatedsprite.cpp +++ b/src/animatedsprite.cpp @@ -298,3 +298,11 @@ const Image* AnimatedSprite::getImage() const { return mFrame ? mFrame->image : 0; } + +void AnimatedSprite::setAlpha(float alpha) +{ + mAlpha = alpha; + + if (mFrame && mFrame->image && mFrame->image->getAlpha() != mAlpha) + mFrame->image->setAlpha(mAlpha); +} diff --git a/src/animatedsprite.h b/src/animatedsprite.h index 6ccf2419a..e10e0f338 100644 --- a/src/animatedsprite.h +++ b/src/animatedsprite.h @@ -80,6 +80,8 @@ class AnimatedSprite : public Sprite unsigned int getFrameCount() const; + virtual void setAlpha(float alpha); + private: bool updateCurrentAnimation(unsigned int dt); diff --git a/src/compoundsprite.cpp b/src/compoundsprite.cpp index 8f6f1f60a..f92358791 100644 --- a/src/compoundsprite.cpp +++ b/src/compoundsprite.cpp @@ -128,7 +128,6 @@ bool CompoundSprite::draw(Graphics* graphics, int posX, int posY) const { drawSprites(graphics, posX, posY); } - return false; } @@ -380,15 +379,6 @@ void CompoundSprite::redraw() const drawSpritesSDL(graphics, posX, posY); -/* - SpriteConstIterator it, it_end; - for (it = begin(), it_end = end(); it != it_end; ++it) - { - if (*it) - (*it)->draw(graphics, posX, posY); - } -*/ - delete graphics; graphics = 0; @@ -409,3 +399,18 @@ void CompoundSprite::redraw() const mNeedsRedraw = false; } + +void CompoundSprite::setAlpha(float alpha) +{ + if (alpha != mAlpha) + { + SpriteConstIterator it, it_end; + for (it = begin(), it_end = end(); it != it_end; ++ it) + { + if (*it) + (*it)->setAlpha(alpha); + } + + mAlpha = alpha; + } +} diff --git a/src/compoundsprite.h b/src/compoundsprite.h index 9d5a42a1b..834ccd835 100644 --- a/src/compoundsprite.h +++ b/src/compoundsprite.h @@ -98,6 +98,8 @@ public: */ virtual unsigned int getFrameCount(unsigned int layer); + virtual void setAlpha(float alpha); + private: void redraw() const; -- cgit v1.2.3-60-g2f50