aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/clickwnd.h
diff options
context:
space:
mode:
authorJean-Francois Mauguit <jfmauguit@mac.com>2024-09-24 09:03:25 -0400
committerGitHub <noreply@github.com>2024-09-24 09:03:25 -0400
commitbab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/wnd/wndclass/clickwnd.h
parent4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff)
parent20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff)
downloadwinamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/clickwnd.h')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/clickwnd.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/clickwnd.h b/Src/Wasabi/api/wnd/wndclass/clickwnd.h
new file mode 100644
index 00000000..101e8445
--- /dev/null
+++ b/Src/Wasabi/api/wnd/wndclass/clickwnd.h
@@ -0,0 +1,74 @@
+#ifndef _CLICKWND_H
+#define _CLICKWND_H
+
+// this class defines clicking behavior, i.e. detecting mouse downs and ups
+// and doing captures to determine clicks
+
+#include <bfc/common.h>
+// benski> CUT: #include <api/wnd/wndclass/backbufferwnd.h>
+#include <api/wnd/wndclass/abstractwndhold.h>
+
+#ifdef WASABI_COMPILE_SKIN
+#define CLICKWND_PARENT AbstractWndHolder
+#else
+#define CLICKWND_PARENT ServiceWndHolder
+#endif
+// benski> CUT: #define CLICKWND_PARENT BackBufferWnd
+
+class NOVTABLE ClickWnd : public CLICKWND_PARENT {
+
+public:
+ ClickWnd();
+ virtual ~ClickWnd();
+
+ void setHandleRightClick(int tf);
+ int getHandleRightClick();
+
+ // override these to get clicks!
+ virtual void onLeftPush(int x, int y) {}
+ virtual void onRightPush(int x, int y) {}
+ virtual void onLeftDoubleClick(int x, int y) {}
+ virtual void onRightDoubleClick(int x, int y) {}
+
+ virtual void onEnterArea();
+ virtual void onLeaveArea();
+
+ virtual void onSetVisible(int show);
+ virtual void onCancelCapture();
+ virtual int isInClick() { return mousedown; }
+
+protected:
+ virtual int onLeftButtonDown(int x, int y);
+ virtual int onRightButtonDown(int x, int y);
+ virtual int onLeftButtonUp(int x, int y);
+ virtual int onRightButtonUp(int x, int y);
+ virtual int onMouseMove(int x, int y);
+
+ // override this and return 0 to ignore clicks
+ virtual int wantClicks() { return 1; }
+ // override this and return 1 to force down-ness
+ virtual int userDown() { return 0; }
+
+ virtual int getHilite() { return hilite; } // mouse is over, period
+ virtual int getDown() { return down; } // mouse is over and pushing down
+
+ int onButtonDown(int which, int x, int y);
+ int onButtonUp(int which, int x, int y);
+ void _enterCapture();
+
+ virtual int wantClickWndAutoInvalidate() { return 1; }
+
+private:
+ void _onEnterArea();
+ void _onLeaveArea();
+
+ int button; // 0 == left, 1 == right, which button was pushed
+ int handleRight:1;
+ int mousedown:1;
+ int mcaptured:1; // we are capturing the mouse
+ int hilite:1; // mouse is over but not down
+ int down:1;
+ int areacheck;
+};
+
+#endif