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 c19f041f27c9a297ec20107acc89e9b1144ec070 Author: Szymon Kłos <[email protected]> AuthorDate: Fri Mar 31 17:12:51 2023 +0200 Commit: Szymon Kłos <[email protected]> CommitDate: Thu Apr 6 10:53:21 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]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150057 Tested-by: Jenkins diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx index 6138f156e0de..005f9f36070d 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 OUString& rIdent) { rButton.signal_selected(rIdent); diff --git a/include/vcl/layout.hxx b/include/vcl/layout.hxx index 995b0d952ff0..507225f4d249 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 5b763b4b253c..e9068f446d6d 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -2360,6 +2360,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 bd462ad56ccd..cbb9fce51eee 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1341,6 +1341,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 cb8dfa4d455c..eb11af9b2884 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -192,7 +192,8 @@ bool ExecuteAction(const OUString& nWindowId, const OUString& rWidget, StringMap 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(';'); @@ -205,23 +206,28 @@ bool ExecuteAction(const OUString& nWindowId, const OUString& rWidget, StringMap 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 3e13d215f2cb..0b818bf2f5f4 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -6348,6 +6348,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);
