summaryrefslogtreecommitdiffstats
path: root/src/core/web_event_factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/web_event_factory.cpp')
-rw-r--r--src/core/web_event_factory.cpp47
1 files changed, 44 insertions, 3 deletions
diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp
index 3193f885a..4241a11c2 100644
--- a/src/core/web_event_factory.cpp
+++ b/src/core/web_event_factory.cpp
@@ -76,6 +76,7 @@
#include <QKeyEvent>
#include <QMouseEvent>
#include <QStyleHints>
+#include <QTabletEvent>
#include <QWheelEvent>
using namespace blink;
@@ -1034,7 +1035,8 @@ static inline double currentTimeForEvent(const QEvent *event)
return static_cast<double>(timer.elapsed()) / 1000;
}
-static WebMouseEvent::Button mouseButtonForEvent(QMouseEvent *event)
+template<class T>
+static WebMouseEvent::Button mouseButtonForEvent(T *event)
{
if (event->button() == Qt::LeftButton)
return WebMouseEvent::Button::kLeft;
@@ -1043,7 +1045,7 @@ static WebMouseEvent::Button mouseButtonForEvent(QMouseEvent *event)
else if (event->button() == Qt::MidButton)
return WebMouseEvent::Button::kMiddle;
- if (event->type() != QEvent::MouseMove)
+ if (event->type() != QEvent::MouseMove && event->type() != QEvent::TabletMove)
return WebMouseEvent::Button::kNoButton;
// This is technically wrong, mouse move should always have ButtonNone,
@@ -1149,14 +1151,17 @@ static WebInputEvent::Type webEventTypeForEvent(const QEvent* event)
{
switch (event->type()) {
case QEvent::MouseButtonPress:
+ case QEvent::TabletPress:
return WebInputEvent::kMouseDown;
case QEvent::MouseButtonRelease:
+ case QEvent::TabletRelease:
return WebInputEvent::kMouseUp;
case QEvent::Enter:
return WebInputEvent::kMouseEnter;
case QEvent::Leave:
return WebInputEvent::kMouseLeave;
case QEvent::MouseMove:
+ case QEvent::TabletMove:
return WebInputEvent::kMouseMove;
case QEvent::Wheel:
return WebInputEvent::kMouseWheel;
@@ -1180,6 +1185,20 @@ static WebInputEvent::Type webEventTypeForEvent(const QEvent* event)
}
}
+static WebPointerProperties::PointerType pointerTypeForTabletEvent(const QTabletEvent *ev)
+{
+ switch (ev->pointerType()) {
+ case QTabletEvent::UnknownPointer:
+ return WebPointerProperties::PointerType::kUnknown;
+ case QTabletEvent::Pen:
+ return WebPointerProperties::PointerType::kPen;
+ case QTabletEvent::Eraser:
+ return WebPointerProperties::PointerType::kEraser;
+ default:
+ return WebPointerProperties::PointerType::kMouse;
+ }
+}
+
WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev, double dpiScale)
{
WebMouseEvent webKitEvent(webEventTypeForEvent(ev),
@@ -1190,7 +1209,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev, double dpiScale)
modifiersForEvent(ev),
currentTimeForEvent(ev));
- webKitEvent.button = mouseButtonForEvent(ev);
+ webKitEvent.button = mouseButtonForEvent<QMouseEvent>(ev);
webKitEvent.click_count = 0;
webKitEvent.pointer_type = WebPointerProperties::PointerType::kMouse;
@@ -1212,6 +1231,28 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev, double dpiScale)
return webKitEvent;
}
+WebMouseEvent WebEventFactory::toWebMouseEvent(QTabletEvent *ev, double dpiScale)
+{
+ WebMouseEvent webKitEvent(webEventTypeForEvent(ev),
+ ev->x() / dpiScale,
+ ev->y() / dpiScale,
+ ev->globalX(),
+ ev->globalY(),
+ modifiersForEvent(ev),
+ currentTimeForEvent(ev));
+
+ webKitEvent.force = ev->pressure();
+ webKitEvent.tilt_x = ev->xTilt();
+ webKitEvent.tilt_y = ev->yTilt();
+ webKitEvent.tangential_pressure = ev->tangentialPressure();
+ webKitEvent.twist = ev->rotation();
+ webKitEvent.pointer_type = pointerTypeForTabletEvent(ev);
+
+ webKitEvent.button = mouseButtonForEvent<QTabletEvent>(ev);
+ webKitEvent.click_count = 0;
+ return webKitEvent;
+}
+
WebMouseEvent WebEventFactory::toWebMouseEvent(QEvent *ev)
{
Q_ASSERT(ev->type() == QEvent::Leave || ev->type() == QEvent::HoverLeave);