From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Plugins/Library/ml_local/AlbumArtContainer.cpp | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Src/Plugins/Library/ml_local/AlbumArtContainer.cpp (limited to 'Src/Plugins/Library/ml_local/AlbumArtContainer.cpp') 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 +#include +#include +#include "AlbumArtCache.h" +#include "../nde/nde.h" +#include + +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 -- cgit