From 7328b2a6621b6ed146b7a0f01f7c78f76c725bcb Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Sat, 15 Mar 2014 16:52:14 +0400 Subject: [PATCH] mouse events, initial implementation --- dlanguilib.visualdproj | 1 + src/dlangui/core/events.d | 43 +++++++++++++++++++++++++ src/dlangui/platforms/common/platform.d | 2 ++ src/dlangui/platforms/windows/winapp.d | 39 ++++++++++++++++++---- 4 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 src/dlangui/core/events.d diff --git a/dlanguilib.visualdproj b/dlanguilib.visualdproj index ee0c81e0..dca3cfc7 100644 --- a/dlanguilib.visualdproj +++ b/dlanguilib.visualdproj @@ -299,6 +299,7 @@ + diff --git a/src/dlangui/core/events.d b/src/dlangui/core/events.d new file mode 100644 index 00000000..0370e790 --- /dev/null +++ b/src/dlangui/core/events.d @@ -0,0 +1,43 @@ +module dlangui.core.events; + +import std.conv; + +enum MouseAction : ushort { + LButtonDown, + LButtonUp, + MButtonDown, + MButtonUp, + RButtonDown, + RButtonUp, + Wheel, + Move, + Leave, + Hover +} + +enum MouseFlag : ushort { + Control = 0x0008, + LButton = 0x0001, + MButton = 0x0010, + RButton = 0x0002, + Shift = 0x0004, + XButton1= 0x0020, + XButton2= 0x0040 +} + +class MouseEvent { + protected MouseAction _action; + protected ushort _flags; + protected short _x; + protected short _y; + @property MouseAction action() { return _action; } + @property ushort flags() { return _flags; } + @property short x() { return _x; } + @property short y() { return _y; } + this (MouseAction a, ushort f, short x, short y) { + _action = a; + _flags = f; + _x = x; + _y = y; + } +} diff --git a/src/dlangui/platforms/common/platform.d b/src/dlangui/platforms/common/platform.d index 821a6663..b2de4ef1 100644 --- a/src/dlangui/platforms/common/platform.d +++ b/src/dlangui/platforms/common/platform.d @@ -1,5 +1,6 @@ module dlangui.platforms.common.platform; +public import dlangui.core.events; import dlangui.widgets.widget; import dlangui.graphics.drawbuf; import std.file; @@ -37,6 +38,7 @@ class Window { _mainWidget.onDraw(buf); } } + abstract bool onMouseEvent(MouseEvent event); } class Platform { diff --git a/src/dlangui/platforms/windows/winapp.d b/src/dlangui/platforms/windows/winapp.d index adb3b270..30cdeff0 100644 --- a/src/dlangui/platforms/windows/winapp.d +++ b/src/dlangui/platforms/windows/winapp.d @@ -305,6 +305,11 @@ class Win32Window : Window { paintUsingGDI(); } } + + override bool onMouseEvent(MouseEvent event) { + Log.d("MouseEvent ", event.action, " flags=", event.flags, " x=", event.x, " y=", event.y); + return true; + } } class Win32Platform : Platform { @@ -515,16 +520,38 @@ LRESULT WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) return 1; case WM_PAINT: { - //GetClientRect(hwnd, &rect); - //int dx = rect.right - rect.left; - //int dy = rect.bottom - rect.top; - //window.onResize(dx, dy); if (window !is null) window.onPaint(); - } return 0; // processed - + case WM_MOUSEMOVE: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.Move, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed + case WM_LBUTTONDOWN: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.LButtonDown, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed + case WM_MBUTTONDOWN: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.MButtonDown, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed + case WM_RBUTTONDOWN: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.RButtonDown, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed + case WM_LBUTTONUP: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.LButtonUp, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed + case WM_MBUTTONUP: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.MButtonUp, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed + case WM_RBUTTONUP: + if (window !is null) + window.onMouseEvent(new MouseEvent(MouseAction.RButtonUp, cast(ushort)wParam, cast(short)(lParam & 0xFFFF), cast(short)((lParam >> 16) & 0xFFFF))); + return 0; // processed case WM_DESTROY: window.onDestroy(); PostQuitMessage(0);