diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/clickwnd.h')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/clickwnd.h | 74 |
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 |