include/vcl/jsdialog/executor.hxx | 15 +++++++++++++++ include/vcl/layout.hxx | 10 +++++----- include/vcl/weld.hxx | 6 ++++++ vcl/inc/salvtables.hxx | 6 ++++++ vcl/jsdialog/executor.cxx | 26 ++++++++++++++++---------- vcl/source/app/salvtables.cxx | 18 ++++++++++++++++++ 6 files changed, 66 insertions(+), 15 deletions(-)
New commits: commit 3ad0984f25fe4ad955c4797281b4b5284176732e Author: Szymon Kłos <[email protected]> AuthorDate: Fri Mar 31 17:12:51 2023 +0200 Commit: Szymon Kłos <[email protected]> CommitDate: Mon Apr 3 21:07:45 2023 +0200 jsdialog: implemented mouse events for drawingarea Change-Id: Ieab3d9fdbcee90ccd125e84f74c06cd1d6711a9f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149953 Tested-by: Szymon Kłos <[email protected]> Reviewed-by: Szymon Kłos <[email protected]> diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx index 40214fb465af..1a1ad61030d7 100644 --- a/include/vcl/jsdialog/executor.hxx +++ b/include/vcl/jsdialog/executor.hxx @@ -66,6 +66,21 @@ public: rDrawingArea.dblclick(rPos); } + static void trigger_mouse_up(weld::DrawingArea& rDrawingArea, const Point& rPos) + { + rDrawingArea.mouse_up(rPos); + } + + static void trigger_mouse_down(weld::DrawingArea& rDrawingArea, const Point& rPos) + { + rDrawingArea.mouse_down(rPos); + } + + static void trigger_mouse_move(weld::DrawingArea& rDrawingArea, const Point& rPos) + { + rDrawingArea.mouse_move(rPos); + } + static void trigger_selected(weld::MenuButton& rButton, const OString& rIdent) { rButton.signal_selected(rIdent); diff --git a/include/vcl/layout.hxx b/include/vcl/layout.hxx index f5090b24eac2..fd9dfe7bdce6 100644 --- a/include/vcl/layout.hxx +++ b/include/vcl/layout.hxx @@ -647,11 +647,6 @@ private: { m_aResizeHdl.Call(GetOutputSizePixel()); } - virtual void MouseMove(const MouseEvent& rMEvt) override - { - if (!m_aMouseMotionHdl.Call(rMEvt)) - Control::MouseMove(rMEvt); - } virtual void KeyInput(const KeyEvent& rKEvt) override { if (!m_aKeyPressHdl.Call(rKEvt)) @@ -711,6 +706,11 @@ public: if (!m_aMouseReleaseHdl.Call(rMEvt)) Control::MouseButtonUp(rMEvt); } + virtual void MouseMove(const MouseEvent& rMEvt) override + { + if (!m_aMouseMotionHdl.Call(rMEvt)) + Control::MouseMove(rMEvt); + } virtual OUString GetSurroundingText() const override; virtual Selection GetSurroundingTextSelection() const override; virtual bool DeleteSurroundingText(const Selection& rSelection) override; diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 1a1e5ab4a223..b87af80565ab 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -2356,6 +2356,12 @@ private: virtual void click(const Point&) = 0; virtual void dblclick(const Point&){}; + + virtual void mouse_up(const Point&){}; + + virtual void mouse_down(const Point&){}; + + virtual void mouse_move(const Point&){}; }; enum class Placement diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index efc5e07e3ae7..ea302ef1e4c3 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1332,6 +1332,12 @@ public: virtual void click(const Point& rPos) override; virtual void dblclick(const Point& rPos) override; + + virtual void mouse_up(const Point& rPos) override; + + virtual void mouse_down(const Point& rPos) override; + + virtual void mouse_move(const Point& rPos) override; }; class SalInstanceToolbar : public SalInstanceWidget, public virtual weld::Toolbar diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx index 72ae39c9c457..a178d60fc2c3 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -193,7 +193,8 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM auto pArea = dynamic_cast<weld::DrawingArea*>(pWidget); if (pArea) { - if (sAction == "click" || sAction == "dblclick") + if (sAction == "click" || sAction == "dblclick" || sAction == "mousemove" + || sAction == "mousedown" || sAction == "mouseup") { OUString sClickData = rData["data"]; int nSeparatorPos = sClickData.indexOf(';'); @@ -206,23 +207,28 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM if (nClickPosX.empty() || nClickPosY.empty()) return true; - double posX = o3tl::toDouble(nClickPosX); - double posY = o3tl::toDouble(nClickPosY); + double fPosX = o3tl::toDouble(nClickPosX); + double fPosY = o3tl::toDouble(nClickPosY); OutputDevice& rRefDevice = pArea->get_ref_device(); // We send OutPutSize for the drawing area bitmap // get_size_request is not necessarily updated // therefore it may be incorrect. Size size = rRefDevice.GetOutputSizePixel(); - posX = posX * size.Width(); - posY = posY * size.Height(); + fPosX = fPosX * size.Width(); + fPosY = fPosY * size.Height(); + if (sAction == "click") - LOKTrigger::trigger_click(*pArea, Point(posX, posY)); - else - LOKTrigger::trigger_dblclick(*pArea, Point(posX, posY)); - return true; + LOKTrigger::trigger_click(*pArea, Point(fPosX, fPosY)); + else if (sAction == "dblclick") + LOKTrigger::trigger_dblclick(*pArea, Point(fPosX, fPosY)); + else if (sAction == "mouseup") + LOKTrigger::trigger_mouse_up(*pArea, Point(fPosX, fPosY)); + else if (sAction == "mousedown") + LOKTrigger::trigger_mouse_down(*pArea, Point(fPosX, fPosY)); + else if (sAction == "mousemove") + LOKTrigger::trigger_mouse_move(*pArea, Point(fPosX, fPosY)); } - LOKTrigger::trigger_click(*pArea, Point(10, 10)); return true; } else if (sAction == "keypress") diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 20a53926ee3a..629f77cd7d4d 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -6331,6 +6331,24 @@ void SalInstanceDrawingArea::dblclick(const Point& rPos) m_xDrawingArea->MouseButtonUp(aEvent); } +void SalInstanceDrawingArea::mouse_up(const Point& rPos) +{ + MouseEvent aEvent(rPos, 0, MouseEventModifiers::NONE, MOUSE_LEFT, 0); + m_xDrawingArea->MouseButtonUp(aEvent); +} + +void SalInstanceDrawingArea::mouse_down(const Point& rPos) +{ + MouseEvent aEvent(rPos, 0, MouseEventModifiers::NONE, MOUSE_LEFT, 0); + m_xDrawingArea->MouseButtonDown(aEvent); +} + +void SalInstanceDrawingArea::mouse_move(const Point& rPos) +{ + MouseEvent aEvent(rPos, 0, MouseEventModifiers::NONE, MOUSE_LEFT, 0); + m_xDrawingArea->MouseMove(aEvent); +} + IMPL_LINK(SalInstanceDrawingArea, PaintHdl, target_and_area, aPayload, void) { m_aDrawHdl.Call(aPayload);
