diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/skin/skin.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/skin/skin.h')
-rw-r--r-- | Src/Wasabi/api/skin/skin.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/skin.h b/Src/Wasabi/api/skin/skin.h new file mode 100644 index 00000000..0f9da315 --- /dev/null +++ b/Src/Wasabi/api/skin/skin.h @@ -0,0 +1,150 @@ +#ifndef _SKIN_H +#define _SKIN_H + +#include <api/skin/api_skin.h> + +#include <bfc/platform/platform.h> +#include <api/wnd/basewnd.h> +#include <bfc/ptrlist.h> +#include <tataki/region/region.h> +#include <tataki/bitmap/autobitmap.h> +#include <bfc/string/bfcstring.h> +#include <api/wndmgr/container.h> +#include <api/xml/xmlreader.h> +#include <bfc/string/StringW.h> + +class SkinBitmap; +#include "SkinVersion.h" + +#define CB_SETSKINDEFERRED 0x5492 + +class SkinTimer; + +class Skin +{ +public: + enum { + CHKSKIN_UNKNOWN = -1, + CHKSKIN_ISWA3 = 1, + CHKSKIN_ISWA3OLD = 2, + CHKSKIN_ISWA3FUTURE = 3, + CHKSKIN_ISWA2 = 4, + CHKSKIN_DISALLOWED = 5, + }; + + Skin(); + virtual ~Skin(); + + static const wchar_t *getSkinName(); + static void setSkinName(const wchar_t *newskinname, const wchar_t *skinpath = NULL); + static const wchar_t *getSkinPath(); + static const wchar_t *getDefaultSkinPath(); + static Skin *getCurSkin(); + + void setBaseTexture(const wchar_t *b); + + //CUT static int registerCallback(SkinCallback *cb); + //CUT static int deregisterCallback(SkinCallback *cb); + + static void renderBaseTexture(ifc_window *base, Skin *s, ifc_canvas *c, const RECT &r, ifc_window *dest, int alpha = 255); + static void renderBaseTexture(ifc_window *s, ifc_canvas *c, const RECT &r, ifc_window *dest, int alpha = 255); + + static void invalidateBaseTexture(Skin *s); + static void invalidateAllBaseTextures(); + static Skin *baseToSkin(ifc_window *b); + static void registerBaseSkin(Skin *s, ifc_window *b); + static Skin *unregisterBaseSkin(ifc_window *b); + + + static void unloadAllBaseTextures(); + static void reloadAllBaseTextures(); + void _unloadBaseTexture(); + void _reloadBaseTexture(); + + static wchar_t *enumLoadableSkins(int refresh = FALSE); + + static int checkSkin(const wchar_t *name); + static void toggleSkin(const wchar_t *name, const wchar_t *skin_path = NULL, int deferred = 0); + static void unloadSkin(); + static void parseSkinFilename(const wchar_t *filename, const wchar_t *incpath); + static int isDefaultSkin; + static void sendUnloadingCallback(); + static int sendAbortCallback(const wchar_t *skinname); + static void sendResetCallback(); + static void sendReloadCallback(); + static void sendBeforeLoadingElementsCallback(); + static void sendGuiLoadedCallback(); + static void sendLoadedCallback(); + static int isSkinReady(); + static void setSkinReady(int i); + static int isDynamicGroupReloadEnabled() { return enable_group_reload; } + static void unloadSkinPart(int id); + static int loadSkinPart(const wchar_t *xmlfile); + static void main_notifySkinLoaded(); + static int isLoading() { return loading; } + + static int unloadResources(); + static int reloadResources(); + static bool isLoaded(); +private: + void rescaleBaseTexture(int w, int h); + void _renderBaseTexture(ifc_window *base, ifc_canvas *c, const RECT &r, ifc_window *dest, int alpha); + void _invalidateBaseTexture(void); + void validateBaseTextureRect(RECT *r); + + AutoSkinBitmap *base; + BltCanvas *scaled; + int scale_x, scale_y; + bool forceinvalid; + int m_x, m_y; + int lastw, lasth, maxw, maxh; + bool resizing; + RegionI *validRgn; + static int loading; + static int enable_group_reload; + + static PtrList<Skin> skinList; + static PtrList<ifc_window> baseList; + + static StringW skinName; + static StringW skinPath; + static StringW defSkinPath; + static int highest_id; + static int reloadingskin; + static int skin_loaded; + + static SkinTimer *deferedskinset; +}; + +class SkinTimer : public TimerClientDI +{ +public : + SkinTimer() {} + virtual ~SkinTimer() {} + + void setSkinDeferred(const wchar_t *skinname) + { + skin = skinname; + timerclient_postDeferredCallback(CB_SETSKINDEFERRED, 0); + } + + virtual int timerclient_onDeferredCallback(intptr_t p1, intptr_t p2) + { + if (p1 == CB_SETSKINDEFERRED) + { + Skin::toggleSkin(skin); + skin.trunc(0); + } + else + return TimerClientDI::timerclient_onDeferredCallback(p1, p2); + return 1; + } + +private: + StringW skin; +}; + + +extern Skin *tha; + +#endif |