aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/skin.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/skin/skin.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/skin/skin.h')
-rw-r--r--Src/Wasabi/api/skin/skin.h150
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