Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
104
Src/Winamp/SkinCursorElement.cpp
Normal file
104
Src/Winamp/SkinCursorElement.cpp
Normal file
|
@ -0,0 +1,104 @@
|
|||
#include "api.h"
|
||||
#include "SkinCursorElement.h"
|
||||
#include "PaletteManager.h"
|
||||
#include <tataki/canvas/bltcanvas.h>
|
||||
|
||||
SkinCursorElement::SkinCursorElement(const wchar_t *_id, const wchar_t *_bitmapid, int _x, int _y, int script_id, int secondarycounter, const wchar_t *path, ifc_xmlreaderparams *p)
|
||||
{
|
||||
id = _id;
|
||||
bitmap = _bitmapid;
|
||||
x = _x;
|
||||
y = _y;
|
||||
icon = NULL;
|
||||
scriptid = script_id;
|
||||
seccount = secondarycounter;
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
for (size_t i = 0;i != p->getNbItems();i++)
|
||||
params.addItem(p->getItemName(i), p->getItemValue(i));
|
||||
}
|
||||
rootpath = path;
|
||||
}
|
||||
|
||||
SkinCursorElement::~SkinCursorElement()
|
||||
{
|
||||
if (icon != 0)
|
||||
{
|
||||
#ifdef WIN32
|
||||
DestroyIcon(icon);
|
||||
#else
|
||||
DebugString("portme: ~skincursorelement\n");
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void SkinCursorElement::makeCursor()
|
||||
{
|
||||
if (icon)
|
||||
{
|
||||
#ifdef WIN32
|
||||
DestroyIcon(icon);
|
||||
#else
|
||||
DebugString("portme: skincursorelement::makeCursor\n");
|
||||
#endif
|
||||
icon = NULL;
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
ICONINFO info;
|
||||
info.fIcon = FALSE;
|
||||
info.xHotspot = x;
|
||||
info.yHotspot = y;
|
||||
|
||||
// make AND bitmask from alpha channel
|
||||
|
||||
SkinBitmap bm(bitmap);
|
||||
int *bits = (int *)bm.getBits();
|
||||
int _x = bm.getX();
|
||||
int _y = bm.getY();
|
||||
int w = bm.getWidth();
|
||||
int h = bm.getHeight();
|
||||
int fw = bm.getFullWidth();
|
||||
//CUT: int fh = bm.getFullHeight();
|
||||
|
||||
BltCanvas c(w, h, NULL, 8);
|
||||
unsigned __int8 *d = (unsigned __int8 *)c.getBits();
|
||||
for (int i = 0;i < h;i++)
|
||||
{
|
||||
int *p = bits + _x + x + (_y + y) * fw;
|
||||
int j = w;
|
||||
while (j--)
|
||||
{
|
||||
int a = (*p++ & 0xFF000000) >> 24;
|
||||
*d++ = (a > 0x7F) ? 0xFF : 0;
|
||||
}
|
||||
}
|
||||
|
||||
// copy bits onto a canvas to get hbitmap
|
||||
BltCanvas cc(w, h);
|
||||
bm.blit(&cc, 0, 0);
|
||||
|
||||
info.hbmMask = c.getBitmap();
|
||||
info.hbmColor = cc.getBitmap();
|
||||
|
||||
// create cursor
|
||||
icon = CreateIconIndirect(&info);
|
||||
#else
|
||||
DebugString("portme: skincursorelement::makeCursor\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
OSCURSOR SkinCursorElement::getCursor()
|
||||
{
|
||||
if (icon == INVALIDOSCURSORHANDLE)
|
||||
makeCursor();
|
||||
return icon;
|
||||
}
|
||||
|
||||
SkinItem *SkinCursorElement::getAncestor()
|
||||
{
|
||||
return WASABI_API_PALETTE->getCursorAncestor(this);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue