aboutsummaryrefslogtreecommitdiff
path: root/c/layout.h
diff options
context:
space:
mode:
Diffstat (limited to 'c/layout.h')
-rw-r--r--c/layout.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/c/layout.h b/c/layout.h
new file mode 100644
index 0000000..82189fb
--- /dev/null
+++ b/c/layout.h
@@ -0,0 +1,54 @@
+#ifndef LAYOUT_H
+#define LAYOUT_H
+
+#include <windows.h>
+
+#include "common.h"
+
+void UpdateLayout(int w = 0, int h = 0);
+
+struct Dragger
+{
+ bool HandleDown();
+ bool HandleMove();
+private:
+ bool InDragArea(int x, int y);
+ bool IsDown();
+ void Drag(int x, int y);
+ bool m_bActive = false;
+};
+
+inline bool Dragger::HandleDown()
+{
+ extern HWND g_hWnd;
+ POINT pt;
+ require(GetRelativeCursorPos(g_hWnd, &pt));
+ if (!InDragArea(pt.x, pt.y)) return false;
+ return m_bActive = true;
+}
+
+inline bool Dragger::IsDown()
+{
+ return GetKeyState(VK_LBUTTON) & 0x8000;
+}
+
+inline bool Dragger::HandleMove()
+{
+ extern HWND g_hWnd;
+ POINT pt;
+ require(GetRelativeCursorPos(g_hWnd, &pt));
+
+ extern HCURSOR g_hcSizeNs;
+ bool r = true;
+ if (InDragArea(pt.x, pt.y))
+ SetCursor(g_hcSizeNs);
+ else
+ r = false;
+ if (m_bActive)
+ Drag(pt.x, pt.y);
+ if (!IsDown())
+ m_bActive = false;
+ return r;
+}
+
+#endif