winamp/Src/Plugins/General/gen_ff/AlbumArt.h
2024-09-24 14:54:57 +02:00

116 lines
3.3 KiB
C++

#ifndef NULLSOFT_GEN_FF_ALBUMART_H
#define NULLSOFT_GEN_FF_ALBUMART_H
#include <api/wnd/wndclass/bufferpaintwnd.h>
#include <api/skin/widgets/layer.h>
#include <api/syscb/callbacks/metacb.h>
//#include <api/syscb/callbacks/corecbi.h>
//#define ALBUMART_PARENT GuiObjectWnd
//#define ALBUMART_PARENT BufferPaintWnd
#define ALBUMART_PARENT Layer
// {6DCB05E4-8AC4-48c2-B193-49F0910EF54A}
static const GUID albumArtGuid =
{ 0x6dcb05e4, 0x8ac4, 0x48c2, { 0xb1, 0x93, 0x49, 0xf0, 0x91, 0xe, 0xf5, 0x4a } };
class AlbumArtScriptController : public LayerScriptController
{
public:
virtual const wchar_t *getClassName();
virtual const wchar_t *getAncestorClassName();
virtual ScriptObjectController *getAncestorController() { return layerController; }
virtual int getNumFunctions();
virtual const function_descriptor_struct *getExportedFunctions();
virtual GUID getClassGuid();
virtual ScriptObject *instantiate();
virtual void destroy(ScriptObject *o);
virtual void *encapsulate(ScriptObject *o);
virtual void deencapsulate(void *o);
private:
static function_descriptor_struct exportedFunction[];
};
extern AlbumArtScriptController *albumartController;
class AlbumArtThreadContext;
class AlbumArt : public ALBUMART_PARENT,
public CoreCallbackI, /* to get song change updates */
public MetadataCallbackI /* to find out when album art changes */
// public SkinCallbackI /* to get color theme changes */
{
public:
AlbumArt();
~AlbumArt();
protected:
void metacb_ArtUpdated(const wchar_t *filename);
virtual int corecb_onUrlChange(const wchar_t *filename);
virtual int onInit();
//virtual int onBufferPaint(BltCanvas *canvas, int w, int h);
int setXuiParam(int _xuihandle, int attrid, const wchar_t *name, const wchar_t *strval);
int skincb_onColorThemeChanged(const wchar_t *newcolortheme);
bool LoadArt(AlbumArtThreadContext *context, HANDLE thread_to_notify);
/* Layer */
SkinBitmap *getBitmap();
bool layer_isInvalid();
void onSetVisible(int show);
/*
virtual int getWidth();
virtual int getHeight();
*/
/*static */void CreateXMLParameters(int master_handle);
private:
void layer_adjustDest(RECT *r);
int w,h;
int valign; // 0 = center, 1 = bottom, -1 = top
int align; // 0 = center, 1 = right, -1 = left
bool stretched;
bool forceRefresh;
bool noAutoRefresh;
bool noMakiCallback;
volatile int isLoading;
void ArtLoaded(int _w, int _h, ARGB32 *_bits);
StringW src_file;
ARGB32 *bits;
SkinBitmap *artBitmap;
AutoSkinBitmap missing_art_image;
volatile LONG iterator;
HANDLE thread_semaphore, hMainThread;
friend class AlbumArtThreadContext;
private:
/* XML Parameters */
enum
{
ALBUMART_NOTFOUNDIMAGE,
ALBUMART_SOURCE,
ALBUMART_VALIGN,
ALBUMART_ALIGN,
ALBUMART_STRETCHED,
ALBUMART_NOREFRESH
};
static XMLParamPair params[];
int xuihandle;
public:
static scriptVar script_vcpu_refresh(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar script_vcpu_onAlbumArtLoaded(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar success);
static scriptVar script_vcpu_isLoading(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
};
extern const wchar_t albumArtXuiObjectStr[];
extern char albumArtXuiSvcName[];
class AlbumArtXuiSvc : public XuiObjectSvc<AlbumArt, albumArtXuiObjectStr, albumArtXuiSvcName> {};
#endif