Commit 0fa35038 authored by Pierre Rossi's avatar Pierre Rossi
Browse files

Basic event translation

Showing with 130 additions and 29 deletions
......@@ -39,7 +39,6 @@
#include "content/browser/renderer_host/backing_store_gtk.h"
#include "webkit/user_agent/user_agent_util.h"
#include "skia/ext/platform_canvas.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
#include "backing_store_qt.h"
#include "raster_window.h"
......@@ -51,12 +50,9 @@
#include <QGuiApplication>
#include <qpa/qplatformwindow.h>
#include <QLabel>
#include <QMouseEvent>
#include <QPainter>
#include <qpa/qplatformnativeinterface.h>
#include <X11/Xutil.h>
namespace {
class Context;
......@@ -165,6 +161,7 @@ inline net::URLRequestContext* ResourceContext::GetRequestContext()
return context->GetRequestContext()->GetURLRequestContext();
}
class RenderViewHost : public content::RenderViewHostImpl
{
public:
......
......@@ -23,12 +23,14 @@ SOURCES = \
render_widget_host_view_qt.cpp \
shell_qt.cpp \
signal_connector.cpp \
moc_signal_connector.cpp
web_event_factory.cpp \
moc_signal_connector.cpp
HEADERS = \
backing_store_qt.h \
blinqpage.h \
raster_window.h \
render_widget_host_view_qt.h \
web_event_factory.h \
signal_connector.h
......@@ -46,12 +46,8 @@ bool RasterWindow::event(QEvent *event)
case QEvent::UpdateRequest:
renderNow();
return true;
case QEvent::MouseButtonDblClick:
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
// case QEvent::KeyPress:
if (m_view)
return m_view->handleEvent(event);
}
return QWindow::event(event);
if (!m_view || !m_view->handleEvent(event))
return QWindow::event(event);
return true;
}
#include "render_widget_host_view_qt.h"
#include "backing_store_qt.h"
#include "web_event_factory.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/common/gpu/gpu_messages.h"
#include "raster_window.h"
......@@ -8,6 +10,7 @@
#include <QEvent>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QScreen>
#include <QDebug>
......@@ -54,13 +57,15 @@ bool RenderWidgetHostView::handleEvent(QEvent* event) {
case QEvent::MouseButtonDblClick:
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseMove:
handleMouseEvent(static_cast<QMouseEvent*>(event));
break;
// case QEvent::KeyPress:
// handleKeyEvent(event);
// break;
case QEvent::KeyPress:
case QEvent::KeyRelease:
handleKeyEvent(static_cast<QKeyEvent*>(event));
break;
default:
Q_ASSERT(false); // not reached
return false;
}
return true;
}
......@@ -419,17 +424,12 @@ bool RenderWidgetHostView::IsPopup() const
void RenderWidgetHostView::handleMouseEvent(QMouseEvent* ev)
{
qDebug() << ev << ev->pos();
WebKit::WebMouseEvent webKitEvent;
webKitEvent.x = ev->x();
webKitEvent.y = ev->y();
webKitEvent.globalX = ev->globalX();
webKitEvent.globalY = ev->globalY();
webKitEvent.clickCount = (ev->type() == QEvent::MouseButtonDblClick)? 2 : 1;
webKitEvent.button = mouseButtonForEvent(ev);
//FIXME: and window coordinates ?
m_host->ForwardMouseEvent(webKitEvent);
m_host->ForwardMouseEvent(WebEventFactory::toWebMouseEvent(ev));
}
void RenderWidgetHostView::handleKeyEvent(QKeyEvent *ev)
{
m_host->ForwardKeyboardEvent(WebEventFactory::toWebKeyboardEvent(ev));
}
......@@ -5,6 +5,7 @@
class QEvent;
class QMouseEvent;
class QKeyEvent;
class RasterWindow;
class RenderWidgetHostView
......@@ -78,11 +79,12 @@ private:
void Paint(const gfx::Rect& scroll_rect);
bool IsPopup() const;
void handleMouseEvent(QMouseEvent* ev);
void handleMouseEvent(QMouseEvent*);
void handleKeyEvent(QKeyEvent*);
content::RenderWidgetHostImpl *m_host;
RasterWindow *m_view;
gfx::Size m_requestedSize;
};
#endif
\ No newline at end of file
#endif
#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;
}
#ifndef WEB_EVENT_FACTORY_H
#define WEB_EVENT_FACTORY_H
#include "content/public/browser/native_web_keyboard_event.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
class QMouseEvent;
class QKeyEvent;
class WebEventFactory {
public:
static WebKit::WebMouseEvent toWebMouseEvent(QMouseEvent*);
static content::NativeWebKeyboardEvent toWebKeyboardEvent(QKeyEvent*);
};
#endif
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment