diff options
-rw-r--r-- | chart2/source/controller/inc/ChartWindow.hxx | 5 | ||||
-rw-r--r-- | chart2/source/controller/main/ChartWindow.cxx | 15 | ||||
-rw-r--r-- | sfx2/source/view/lokcharthelper.cxx | 41 |
3 files changed, 42 insertions, 19 deletions
diff --git a/chart2/source/controller/inc/ChartWindow.hxx b/chart2/source/controller/inc/ChartWindow.hxx index 7883794a02bf..309916d35608 100644 --- a/chart2/source/controller/inc/ChartWindow.hxx +++ b/chart2/source/controller/inc/ChartWindow.hxx @@ -58,6 +58,11 @@ public: virtual void DataChanged( const DataChangedEvent& rDCEvt ) override; virtual void RequestHelp( const HelpEvent& rHEvt ) override; + /// For LibreOfficeKit, we need to route these to the mouse events. + virtual void LogicMouseButtonDown(const MouseEvent&); + virtual void LogicMouseButtonUp(const MouseEvent&); + virtual void LogicMouseMove(const MouseEvent&); + void ForceInvalidate(); virtual void Invalidate( InvalidateFlags nFlags = InvalidateFlags::NONE ) override; virtual void Invalidate( const Rectangle& rRect, InvalidateFlags nFlags = InvalidateFlags::NONE ) override; diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx index 58d6c291cb74..7da14ae80288 100644 --- a/chart2/source/controller/main/ChartWindow.cxx +++ b/chart2/source/controller/main/ChartWindow.cxx @@ -271,6 +271,21 @@ void ChartWindow::RequestHelp( const HelpEvent& rHEvt ) vcl::Window::RequestHelp( rHEvt ); } +void ChartWindow::LogicMouseButtonDown(const MouseEvent& rEvent) +{ + MouseButtonDown(rEvent); +} + +void ChartWindow::LogicMouseButtonUp(const MouseEvent& rEvent) +{ + MouseButtonUp(rEvent); +} + +void ChartWindow::LogicMouseMove(const MouseEvent& rEvent) +{ + MouseMove(rEvent); +} + void ChartWindow::adjustHighContrastMode() { static const DrawModeFlags nContrastMode = diff --git a/sfx2/source/view/lokcharthelper.cxx b/sfx2/source/view/lokcharthelper.cxx index f5b4ba37c663..785411de7de2 100644 --- a/sfx2/source/view/lokcharthelper.cxx +++ b/sfx2/source/view/lokcharthelper.cxx @@ -15,6 +15,8 @@ #include <toolkit/helper/vclunohelper.hxx> #include <tools/fract.hxx> #include <tools/mapunit.hxx> +#include <vcl/ITiledRenderable.hxx> +#include <vcl/svapp.hxx> #include <vcl/virdev.hxx> #include <com/sun/star/beans/XPropertySet.hpp> @@ -22,7 +24,6 @@ #include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> - #define TWIPS_PER_PIXEL 15 using namespace com::sun::star; @@ -272,32 +273,34 @@ bool LokChartHelper::postMouseEvent(int nType, int nX, int nY, Rectangle rChartBBox = GetChartBoundingBox(); if (rChartBBox.IsInside(aMousePos)) { + vcl::ITiledRenderable::LOKAsyncEventData* pLOKEv = new vcl::ITiledRenderable::LOKAsyncEventData; + pLOKEv->mpWindow = pChartWindow; + switch (nType) + { + case LOK_MOUSEEVENT_MOUSEBUTTONDOWN: + pLOKEv->mnEvent = VCLEVENT_WINDOW_MOUSEBUTTONDOWN; + break; + case LOK_MOUSEEVENT_MOUSEBUTTONUP: + pLOKEv->mnEvent = VCLEVENT_WINDOW_MOUSEBUTTONUP; + break; + case LOK_MOUSEEVENT_MOUSEMOVE: + pLOKEv->mnEvent = VCLEVENT_WINDOW_MOUSEMOVE; + break; + default: + assert(false); + } + int nChartWinX = nX - rChartBBox.Left(); int nChartWinY = nY - rChartBBox.Top(); // chart window expects pixels, but the conversion factor // can depend on the client zoom Point aPos(nChartWinX * fScaleX, nChartWinY * fScaleY); - MouseEvent aEvent(aPos, nCount, + pLOKEv->maMouseEvent = MouseEvent(aPos, nCount, MouseEventModifiers::SIMPLECLICK, nButtons, nModifier); - switch (nType) - { - case LOK_MOUSEEVENT_MOUSEBUTTONDOWN: - pChartWindow->MouseButtonDown(aEvent); - break; - case LOK_MOUSEEVENT_MOUSEBUTTONUP: - pChartWindow->MouseButtonUp(aEvent); - if (pChartWindow->IsTracking()) - pChartWindow->EndTracking(TrackingEventFlags::DontCallHdl); - break; - case LOK_MOUSEEVENT_MOUSEMOVE: - pChartWindow->MouseMove(aEvent); - break; - default: - assert(false); - break; - } + Application::PostUserEvent(Link<void*, void>(pLOKEv, vcl::ITiledRenderable::LOKPostAsyncEvent)); + return true; } } |