aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/gradientwnd.cpp
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/wnd/wndclass/gradientwnd.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/gradientwnd.cpp')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/gradientwnd.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/gradientwnd.cpp b/Src/Wasabi/api/wnd/wndclass/gradientwnd.cpp
new file mode 100644
index 00000000..f34b31f9
--- /dev/null
+++ b/Src/Wasabi/api/wnd/wndclass/gradientwnd.cpp
@@ -0,0 +1,82 @@
+#include <precomp.h>
+
+#include "gradientwnd.h"
+
+
+// NOTE
+// works now ;)
+
+GradientWnd::GradientWnd()
+: bitmap(4,4, getOsWindowHandle())
+{
+ cache_w = cache_h = 4;
+ last_w = last_h = -1;
+ recreate = 1;
+ setReverseColors(TRUE);
+}
+
+GradientWnd::~GradientWnd()
+{
+ WASABI_API_SYSCB->syscb_deregisterCallback(static_cast<SkinCallbackI*>(this));
+}
+
+int GradientWnd::onInit ()
+{
+ int r = GRADIENTWND_PARENT::onInit();
+ WASABI_API_SYSCB->syscb_registerCallback(static_cast<SkinCallbackI*>(this));
+ return r;
+}
+
+int GradientWnd::onPaint(Canvas *canvas)
+{
+ ASSERT(canvas != NULL);
+ RECT cr = clientRect();
+
+ int w = cr.right - cr.left, h = cr.bottom - cr.top;
+ if (w && h)
+ {
+ if (w != last_w || h != last_h)
+ {
+ recreate=1;
+ }
+ if (w > cache_w || h > cache_h)
+ {
+ cache_w = max(w, cache_w);
+ cache_h = max(h, cache_h);
+ // round up to nearest 4
+ cache_w = (cache_w+3) & ~3;
+ cache_h = (cache_h+3) & ~3;
+
+ bitmap.DestructiveResize(cache_w,cache_h,32);
+ recreate = 1;
+ }
+
+ if (recreate)
+ {
+ ARGB32 *bits = static_cast<ARGB32*>(bitmap.getBits());
+ renderGradient(bits, w, h, /*pitch=*/cache_w);
+ last_w = w;
+ last_h = h;
+ recreate=0;
+ }
+ RECT src = {0,0,w,h};
+ bitmap./*getSkinBitmap()->*/blitToRect(canvas, &src, &cr, getPaintingAlpha());
+ //bitmap./*getSkinBitmap()->*/blitAlpha(canvas, cr.left, cr.top, getPaintingAlpha());
+ }
+ return 1;
+}
+
+void GradientWnd::onParamChange()
+{
+ invalidate();
+ recreate = 1;
+}
+
+int GradientWnd::skincb_onColorThemeChanged(const wchar_t *newcolortheme)
+{
+ // TODO: This will refresh after ca 1 sec - we need an instand redraw
+ invalidate();
+ recreate = 1;
+ return 0;
+}
+