blob: 9b06b288c9d1f9453e619d4c485ec98998ac506d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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;
}
}
|