From f1c2f4d530c38b07ec03d6641b53fd02cf64eaa2 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Thu, 20 Oct 2016 14:41:24 +0300 Subject: [PATCH] support mouse double click in Console backend - #310, #311 --- src/dlangui/platforms/console/consoleapp.d | 5 +++++ src/dlangui/platforms/console/dconsole.d | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/dlangui/platforms/console/consoleapp.d b/src/dlangui/platforms/console/consoleapp.d index 8fab30b7..af55403c 100644 --- a/src/dlangui/platforms/console/consoleapp.d +++ b/src/dlangui/platforms/console/consoleapp.d @@ -427,6 +427,11 @@ extern(C) int DLANGUImain(string[] args) { FontManager.instance = new ConsoleFontManager(); initResourceManagers(); + version (Windows) { + import core.sys.windows.winuser; + DOUBLE_CLICK_THRESHOLD_MS = GetDoubleClickTime(); + } + currentTheme = createDefaultTheme(); Platform.instance.uiTheme = "theme_default"; diff --git a/src/dlangui/platforms/console/dconsole.d b/src/dlangui/platforms/console/dconsole.d index 0d40512d..f2d11d6a 100644 --- a/src/dlangui/platforms/console/dconsole.d +++ b/src/dlangui/platforms/console/dconsole.d @@ -774,6 +774,23 @@ class Console { return false; } protected bool handleMouseEvent(MouseEvent event) { + ButtonDetails * pbuttonDetails = null; + if (event.button == MouseButton.Left) + pbuttonDetails = &_lbutton; + else if (event.button == MouseButton.Right) + pbuttonDetails = &_rbutton; + else if (event.button == MouseButton.Middle) + pbuttonDetails = &_mbutton; + if (pbuttonDetails) { + if (event.action == MouseAction.ButtonDown) { + pbuttonDetails.down(event.x, event.y, event.flags); + } else if (event.action == MouseAction.ButtonUp) { + pbuttonDetails.up(event.x, event.y, event.flags); + } + } + event.lbutton = _lbutton; + event.rbutton = _rbutton; + event.mbutton = _mbutton; if (mouseEvent.assigned) return mouseEvent(event); return false; @@ -792,6 +809,11 @@ class Console { } private ushort lastMouseFlags = 0; private MouseButton lastButtonDown = MouseButton.None; + + protected ButtonDetails _lbutton; + protected ButtonDetails _mbutton; + protected ButtonDetails _rbutton; + /// wait for input, handle input bool pollInput() { if (_stopped)