summaryrefslogtreecommitdiff
path: root/include/vcl/event.hxx
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-01-29 12:44:30 +0100
committerMichael Meeks <michael.meeks@collabora.com>2020-05-28 09:19:10 +0100
commit042183f875962bb588ac259529ed8e93a7008c89 (patch)
tree82a4c69e845b1d144d7b3f6fe82119e6ffd7b114 /include/vcl/event.hxx
parentaa8c235386dd4075cd25ec38f7a09eb1e7877b32 (diff)
lok: preserve mouse event logic position and use in calc
When clicking in online Calc any of the charts, shapes (and other objects), sometimes the cell underneath is selected instead. The problem is that the object is not correctly recognised to be hit. From lok we get the mouse event position in logic coordinates, which we usually can just use in writer and impress. In calc however we need the coordinates in pixels, so we transform them before sending the mouse event to calc. Still calc also uses common SdrObjects (chart, shapes,...), which operate in logic coordinates. So in case of SdrObject we need to convert the coordniates back from pixel to logic again, which causes problems because conversion doesn't have access to the displaying conditions on an stateless online client. OTOH we already had the correct logic coordinates, and we can just send them along. This is what this change does. It adds an optional maLogicPosition to MouseEvent, which is filled with logic position if those is known. Change-Id: I26f6466085baf613850b5861e368f22cad7c1d26 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87681 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'include/vcl/event.hxx')
-rw-r--r--include/vcl/event.hxx15
1 files changed, 14 insertions, 1 deletions
diff --git a/include/vcl/event.hxx b/include/vcl/event.hxx
index bd0b5589f375..6314d0ec0c1c 100644
--- a/include/vcl/event.hxx
+++ b/include/vcl/event.hxx
@@ -27,6 +27,7 @@
#include <vcl/vclptr.hxx>
#include <vcl/outdev.hxx>
#include <vcl/window.hxx>
+#include <boost/optional.hpp>
class CommandEvent;
@@ -99,7 +100,6 @@ namespace o3tl
#define MOUSE_MIDDLE (sal_uInt16(0x0002))
#define MOUSE_RIGHT (sal_uInt16(0x0004))
-
class VCL_DLLPUBLIC MouseEvent
{
private:
@@ -108,6 +108,9 @@ private:
sal_uInt16 mnClicks;
sal_uInt16 mnCode;
+ // Set, if the document relative logic position are available
+ boost::optional<Point> maLogicPosition;
+
public:
explicit MouseEvent();
explicit MouseEvent( const Point& rPos, sal_uInt16 nClicks = 1,
@@ -119,6 +122,16 @@ public:
sal_uInt16 GetClicks() const { return mnClicks; }
+ void setLogicPosition(Point aLogicPosition)
+ {
+ maLogicPosition = aLogicPosition;
+ }
+
+ boost::optional<Point> getLogicPosition() const
+ {
+ return maLogicPosition;
+ }
+
bool IsEnterWindow() const
{ return bool(mnMode & MouseEventModifiers::ENTERWINDOW); }
bool IsLeaveWindow() const