diff options
Diffstat (limited to 'Src/Plugins/Library/ml_local/AlbumArtContainer.cpp')
-rw-r--r-- | Src/Plugins/Library/ml_local/AlbumArtContainer.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_local/AlbumArtContainer.cpp b/Src/Plugins/Library/ml_local/AlbumArtContainer.cpp new file mode 100644 index 00000000..9b06b288 --- /dev/null +++ b/Src/Plugins/Library/ml_local/AlbumArtContainer.cpp @@ -0,0 +1,80 @@ +#include "AlbumArtContainer.h" +#include "api__ml_local.h" +#include <tataki/bitmap/bitmap.h> +#include <tataki/canvas/canvas.h> +#include <assert.h> +#include "AlbumArtCache.h" +#include "../nde/nde.h" +#include <commctrl.h> + +AlbumArtContainer::AlbumArtContainer() :filename(0) +{ + references = 1; + cached = CACHE_UNKNOWN; + cache = 0; + updateMsg.hwnd = NULL; +} + +void AlbumArtContainer::AddRef() +{ + references++; +} + +void AlbumArtContainer::Release() +{ + if (--references == 0) + delete this; +} + +AlbumArtContainer::~AlbumArtContainer() +{ + ndestring_release(filename); + if (cache) cache->Release(); +} + +void AlbumArtContainer::Reset() +{ + if (cache) + cache->Release(); + cache = 0; + cached = AlbumArtContainer::CACHE_UNKNOWN; +} + +void AlbumArtContainer::SetCache(SkinBitmap *bitmap, CacheStatus status) +{ + if (cache) + cache->Release(); + cache = bitmap; + cached = status; + + // lets post the update message + if(updateMsg.hwnd && (CACHE_CACHED == cached || CACHE_UNKNOWN == cached)) PostMessageW(updateMsg.hwnd,updateMsg.message,updateMsg.wParam,updateMsg.lParam); +} + +int AlbumArtContainer::drawArt(DCCanvas *pCanvas, RECT *prcDst) +{ + switch (cached) + { + case CACHE_NOTFOUND: + return DRAW_NOART; + case CACHE_LOADING: + return DRAW_LOADING; + case CACHE_UNKNOWN: + cached = CACHE_LOADING; + CreateCache(this, prcDst->right - prcDst->left, prcDst->bottom - prcDst->top); + return DRAW_LOADING; + case CACHE_CACHED: + { + if (cache->getWidth() != (prcDst->right - prcDst->left) || cache->getHeight() != (prcDst->bottom - prcDst->top)) + { + cached = CACHE_LOADING; + CreateCache(this, prcDst->right - prcDst->left, prcDst->bottom - prcDst->top); + return DRAW_LOADING; + } + if (pCanvas) cache->blitAlpha(pCanvas, prcDst->left, prcDst->top); + return DRAW_SUCCESS; + } + default: + return DRAW_NOART; // shouldn't reach this; + } +}
\ No newline at end of file |