PlatformMouseEventQt.cpp [plain text]
#include "config.h"
#include "PlatformMouseEvent.h"
#include <QGraphicsSceneMouseEvent>
#include <QMouseEvent>
#include <wtf/CurrentTime.h>
namespace WebCore {
static void mouseEventModifiersFromQtKeyboardModifiers(Qt::KeyboardModifiers keyboardModifiers, bool& altKey, bool& ctrlKey, bool& metaKey, bool& shiftKey)
{
altKey = keyboardModifiers & Qt::AltModifier;
ctrlKey = keyboardModifiers & Qt::ControlModifier;
metaKey = keyboardModifiers & Qt::MetaModifier;
shiftKey = keyboardModifiers & Qt::ShiftModifier;
}
static void mouseEventTypeAndMouseButtonFromQEvent(const QEvent* event, MouseEventType& mouseEventType, MouseButton& mouseButton)
{
enum { MouseEvent, GraphicsSceneMouseEvent } frameworkMouseEventType;
switch (event->type()) {
case QEvent::MouseButtonDblClick:
case QEvent::MouseButtonPress:
frameworkMouseEventType = MouseEvent;
mouseEventType = MouseEventPressed;
break;
case QEvent::MouseButtonRelease:
frameworkMouseEventType = MouseEvent;
mouseEventType = MouseEventReleased;
break;
case QEvent::MouseMove:
frameworkMouseEventType = MouseEvent;
mouseEventType = MouseEventMoved;
break;
#if !defined(QT_NO_GRAPHICSVIEW)
case QEvent::GraphicsSceneMouseDoubleClick:
case QEvent::GraphicsSceneMousePress:
frameworkMouseEventType = GraphicsSceneMouseEvent;
mouseEventType = MouseEventPressed;
break;
case QEvent::GraphicsSceneMouseRelease:
frameworkMouseEventType = GraphicsSceneMouseEvent;
mouseEventType = MouseEventReleased;
break;
case QEvent::GraphicsSceneMouseMove:
frameworkMouseEventType = GraphicsSceneMouseEvent;
mouseEventType = MouseEventMoved;
break;
#endif
default:
ASSERT_NOT_REACHED();
frameworkMouseEventType = MouseEvent;
mouseEventType = MouseEventMoved;
break;
}
Qt::MouseButtons mouseButtons;
switch (frameworkMouseEventType) {
case MouseEvent: {
const QMouseEvent* mouseEvent = static_cast<const QMouseEvent*>(event);
mouseButtons = mouseEventType == MouseEventMoved ? mouseEvent->buttons() : mouseEvent->button();
break;
}
case GraphicsSceneMouseEvent: {
const QGraphicsSceneMouseEvent* mouseEvent = static_cast<const QGraphicsSceneMouseEvent*>(event);
mouseButtons = mouseEventType == MouseEventMoved ? mouseEvent->buttons() : mouseEvent->button();
break;
}
}
if (mouseButtons & Qt::LeftButton)
mouseButton = LeftButton;
else if (mouseButtons & Qt::RightButton)
mouseButton = RightButton;
else if (mouseButtons & Qt::MidButton)
mouseButton = MiddleButton;
else
mouseButton = NoButton;
}
#if !defined(QT_NO_GRAPHICSVIEW)
PlatformMouseEvent::PlatformMouseEvent(QGraphicsSceneMouseEvent* event, int clickCount)
{
m_timestamp = WTF::currentTime();
mouseEventTypeAndMouseButtonFromQEvent(event, m_eventType, m_button);
m_position = IntPoint(event->pos().toPoint());
m_globalPosition = IntPoint(event->screenPos());
m_clickCount = clickCount;
mouseEventModifiersFromQtKeyboardModifiers(event->modifiers(), m_altKey, m_ctrlKey, m_metaKey, m_shiftKey);
}
#endif // QT_NO_GRAPHICSVIEW
PlatformMouseEvent::PlatformMouseEvent(QInputEvent* event, int clickCount)
{
m_timestamp = WTF::currentTime();
bool isContextMenuEvent = false;
#ifndef QT_NO_CONTEXTMENU
if (event->type() == QEvent::ContextMenu) {
isContextMenuEvent = true;
m_eventType = MouseEventPressed;
QContextMenuEvent* ce = static_cast<QContextMenuEvent*>(event);
m_position = IntPoint(ce->pos());
m_globalPosition = IntPoint(ce->globalPos());
m_button = RightButton;
}
#endif
if (!isContextMenuEvent) {
mouseEventTypeAndMouseButtonFromQEvent(event, m_eventType, m_button);
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
m_position = IntPoint(mouseEvent->pos());
m_globalPosition = IntPoint(mouseEvent->globalPos());
}
m_clickCount = clickCount;
mouseEventModifiersFromQtKeyboardModifiers(event->modifiers(), m_altKey, m_ctrlKey, m_metaKey, m_shiftKey);
}
}