diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-06-10 00:11:20 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-06-10 00:11:20 +0300 |
commit | f199b9ba7da47cb6f9aa95f843c0628621899aa9 (patch) | |
tree | 9b1ff96b456f7d93d1a66f3471cd251908f3c227 /src/resources/image.cpp | |
parent | ff11053f5f638749c3564c464dc41ebc474b4897 (diff) | |
download | mv-f199b9ba7da47cb6f9aa95f843c0628621899aa9.tar.gz mv-f199b9ba7da47cb6f9aa95f843c0628621899aa9.tar.bz2 mv-f199b9ba7da47cb6f9aa95f843c0628621899aa9.tar.xz mv-f199b9ba7da47cb6f9aa95f843c0628621899aa9.zip |
Move SubImage class to separate file.
Diffstat (limited to 'src/resources/image.cpp')
-rw-r--r-- | src/resources/image.cpp | 104 |
1 files changed, 1 insertions, 103 deletions
diff --git a/src/resources/image.cpp b/src/resources/image.cpp index 0e0937ce6..5496a10d8 100644 --- a/src/resources/image.cpp +++ b/src/resources/image.cpp @@ -37,6 +37,7 @@ #include "utils/stringutils.h" #include "resources/imagehelper.h" +#include "resources/subimage.h" #include <SDL_image.h> #include <SDL_rotozoom.h> @@ -335,106 +336,3 @@ void Image::SDLTerminateAlphaCache() SDLCleanCache(); mUseAlphaCache = false; } - -//============================================================================ -// SubImage Class -//============================================================================ - -SubImage::SubImage(Image *parent, SDL_Surface *image, - int x, int y, int width, int height): - Image(image), - mParent(parent) -{ - if (mParent) - { - mParent->incRef(); - mParent->SDLTerminateAlphaCache(); - mHasAlphaChannel = mParent->hasAlphaChannel(); - mIsAlphaVisible = mHasAlphaChannel; - mAlphaChannel = mParent->SDLgetAlphaChannel(); - } - else - { - mHasAlphaChannel = false; - mIsAlphaVisible = false; - mAlphaChannel = nullptr; - } - - // Set up the rectangle. - mBounds.x = static_cast<short>(x); - mBounds.y = static_cast<short>(y); - mBounds.w = static_cast<Uint16>(width); - mBounds.h = static_cast<Uint16>(height); - if (mParent) - { - mInternalBounds.x = mParent->mBounds.x; - mInternalBounds.y = mParent->mBounds.y; - mInternalBounds.w = mParent->mBounds.w; - mInternalBounds.h = mParent->mBounds.h; - } - else - { - mInternalBounds.x = 0; - mInternalBounds.y = 0; - mInternalBounds.w = 1; - mInternalBounds.h = 1; - } - mUseAlphaCache = false; -} - -#ifdef USE_OPENGL -SubImage::SubImage(Image *parent, GLuint image, - int x, int y, int width, int height, - int texWidth, int texHeight): - Image(image, width, height, texWidth, texHeight), - mParent(parent) -{ - if (mParent) - mParent->incRef(); - - // Set up the rectangle. - mBounds.x = static_cast<short>(x); - mBounds.y = static_cast<short>(y); - mBounds.w = static_cast<Uint16>(width); - mBounds.h = static_cast<Uint16>(height); - if (mParent) - { - mInternalBounds.x = mParent->mBounds.x; - mInternalBounds.y = mParent->mBounds.y; - mInternalBounds.w = mParent->mBounds.w; - mInternalBounds.h = mParent->mBounds.h; - } - else - { - mInternalBounds.x = 0; - mInternalBounds.y = 0; - mInternalBounds.w = 1; - mInternalBounds.h = 1; - } - mIsAlphaVisible = mHasAlphaChannel; -} -#endif - -SubImage::~SubImage() -{ - // Avoid destruction of the image - mSDLSurface = nullptr; - // Avoid possible destruction of its alpha channel - mAlphaChannel = nullptr; -#ifdef USE_OPENGL - mGLImage = 0; -#endif - if (mParent) - { - mParent->decRef(); - mParent = nullptr; - } -} - -Image *SubImage::getSubImage(int x, int y, int w, int h) -{ - if (mParent) - return mParent->getSubImage(mBounds.x + x, mBounds.y + y, w, h); - else - return nullptr; -} |