summaryrefslogtreecommitdiffstats
path: root/lib/web_event_factory.cpp
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2013-05-15 18:52:37 +0200
committerPierre Rossi <pierre.rossi@digia.com>2013-05-15 20:18:17 +0200
commit0fa35038fb2a6ac0e2cbcd8e6dffdf621363b7ea (patch)
tree375e2c054a8aa57aa58392dc401ec2663ce3d1cb /lib/web_event_factory.cpp
parent20b7912414136e700e2fa8f9e7f1cefe2728ad1b (diff)
Basic event translation
Diffstat (limited to 'lib/web_event_factory.cpp')
-rw-r--r--lib/web_event_factory.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/web_event_factory.cpp b/lib/web_event_factory.cpp
new file mode 100644
index 000000000..6d1d6386f
--- /dev/null
+++ b/lib/web_event_factory.cpp
@@ -0,0 +1,85 @@
+#include "web_event_factory.h"
+
+#include <QMouseEvent>
+#include <QKeyEvent>
+
+using namespace WebKit;
+
+static WebMouseEvent::Button mouseButtonForEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::LeftButton || (event->buttons() & Qt::LeftButton))
+ return WebMouseEvent::ButtonLeft;
+ else if (event->button() == Qt::RightButton || (event->buttons() & Qt::RightButton))
+ return WebMouseEvent::ButtonRight;
+ else if (event->button() == Qt::MidButton || (event->buttons() & Qt::MidButton))
+ return WebMouseEvent::ButtonMiddle;
+ return WebMouseEvent::ButtonNone;
+}
+
+static inline WebInputEvent::Modifiers modifiersForEvent(Qt::KeyboardModifiers modifiers)
+{
+ unsigned result = 0;
+ if (modifiers & Qt::ShiftModifier)
+ result |= WebInputEvent::ShiftKey;
+ if (modifiers & Qt::ControlModifier)
+ result |= WebInputEvent::ControlKey;
+ if (modifiers & Qt::AltModifier)
+ result |= WebInputEvent::AltKey;
+ if (modifiers & Qt::MetaModifier)
+ result |= WebInputEvent::MetaKey;
+ return (WebInputEvent::Modifiers)result;
+}
+
+
+WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev)
+{
+ WebMouseEvent webKitEvent;
+ webKitEvent.timeStampSeconds = ev->timestamp() / 1000.0;
+ webKitEvent.button = mouseButtonForEvent(ev);
+ webKitEvent.modifiers = modifiersForEvent(ev->modifiers());
+
+ webKitEvent.x = webKitEvent.windowX = ev->x();
+ webKitEvent.y = webKitEvent.windowY = ev->y();
+ webKitEvent.globalX = ev->globalX();
+ webKitEvent.globalY = ev->globalY();
+
+ webKitEvent.clickCount = 0;
+ switch (ev->type()) {
+ case QEvent::MouseButtonPress:
+ webKitEvent.clickCount = 1;
+ webKitEvent.type = WebInputEvent::MouseDown;
+ break;
+ case QEvent::MouseMove:
+ webKitEvent.type = WebInputEvent::MouseMove;
+ break;
+ case QEvent::MouseButtonRelease:
+ webKitEvent.type = WebInputEvent::MouseUp;
+ break;
+ case QEvent::MouseButtonDblClick:
+ webKitEvent.clickCount = 2;
+ default:
+ Q_ASSERT(false);
+ };
+
+ return webKitEvent;
+}
+
+content::NativeWebKeyboardEvent WebEventFactory::toWebKeyboardEvent(QKeyEvent *ev)
+{
+ content::NativeWebKeyboardEvent webKitEvent;
+ webKitEvent.timeStampSeconds = ev->timestamp() / 1000.0;
+ webKitEvent.modifiers = modifiersForEvent(ev->modifiers());
+ switch (ev->type()) {
+ case QEvent::KeyPress:
+ webKitEvent.type = WebInputEvent::KeyDown;
+ break;
+ case QEvent::KeyRelease:
+ webKitEvent.type = WebInputEvent::KeyUp;
+ break;
+ }
+
+ webKitEvent.nativeKeyCode = ev->nativeVirtualKey();
+ // FIXME: need Windows keycode mapping from WebCore...
+ memcpy(&webKitEvent.text, ev->text().utf16(), qMin(sizeof(webKitEvent.text), sizeof(ev->text().utf16())));
+ return webKitEvent;
+}