#ifndef NULLSOFT_GEN_FF_ALBUMART_H #define NULLSOFT_GEN_FF_ALBUMART_H #include #include #include //#include //#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 {}; #endif