aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/items/qsgcanvas.cpp85
-rw-r--r--src/declarative/items/qsgcanvas_p.h6
-rw-r--r--src/declarative/items/qsgitem.cpp14
-rw-r--r--src/declarative/items/qsgitem.h6
-rw-r--r--src/declarative/items/qsgitem_p.h2
-rw-r--r--src/declarative/items/qsgmousearea.cpp16
-rw-r--r--src/declarative/items/qsgmousearea_p.h6
7 files changed, 55 insertions, 80 deletions
diff --git a/src/declarative/items/qsgcanvas.cpp b/src/declarative/items/qsgcanvas.cpp
index c9f3285492..b009ec5010 100644
--- a/src/declarative/items/qsgcanvas.cpp
+++ b/src/declarative/items/qsgcanvas.cpp
@@ -567,25 +567,6 @@ void QSGCanvasPrivate::sceneMouseEventFromMouseEvent(QGraphicsSceneMouseEvent &s
}
/*!
-Fill in the data in \a hoverEvent based on \a mouseEvent. This method leaves the item local positions in
-\a hoverEvent untouched (these are filled in later).
-*/
-void QSGCanvasPrivate::sceneHoverEventFromMouseEvent(QGraphicsSceneHoverEvent &hoverEvent, QMouseEvent *mouseEvent)
-{
- Q_Q(QSGCanvas);
- hoverEvent.setWidget(q);
- hoverEvent.setScenePos(mouseEvent->pos());
- hoverEvent.setScreenPos(mouseEvent->globalPos());
- if (lastMousePosition.isNull()) lastMousePosition = mouseEvent->pos();
- hoverEvent.setLastScenePos(lastMousePosition);
- hoverEvent.setLastScreenPos(q->mapToGlobal(lastMousePosition));
- hoverEvent.setModifiers(mouseEvent->modifiers());
- hoverEvent.setAccepted(mouseEvent->isAccepted());
-
- lastMousePosition = mouseEvent->pos();
-}
-
-/*!
Translates the data in \a touchEvent to this canvas. This method leaves the item local positions in
\a touchEvent untouched (these are filled in later).
*/
@@ -980,18 +961,11 @@ void QSGCanvasPrivate::clearHover()
if (!hoverItem)
return;
- QGraphicsSceneHoverEvent hoverEvent;
- hoverEvent.setWidget(q);
-
- QPoint cursorPos = QCursor::pos();
- hoverEvent.setScenePos(q->mapFromGlobal(cursorPos));
- hoverEvent.setLastScenePos(hoverEvent.scenePos());
- hoverEvent.setScreenPos(cursorPos);
- hoverEvent.setLastScreenPos(hoverEvent.screenPos());
+ QPointF pos = q->mapFromGlobal(QCursor::pos());
QSGItem *item = hoverItem;
hoverItem = 0;
- sendHoverEvent(QEvent::GraphicsSceneHoverLeave, item, &hoverEvent);
+ sendHoverEvent(QEvent::HoverLeave, item, pos, pos, QApplication::keyboardModifiers(), true);
}
@@ -1197,25 +1171,20 @@ void QSGCanvas::mouseDoubleClickEvent(QMouseEvent *event)
event->setAccepted(sceneEvent.isAccepted());
}
-void QSGCanvasPrivate::sendHoverEvent(QEvent::Type type, QSGItem *item,
- QGraphicsSceneHoverEvent *event)
+bool QSGCanvasPrivate::sendHoverEvent(QEvent::Type type, QSGItem *item,
+ const QPointF &scenePos, const QPointF &lastScenePos,
+ Qt::KeyboardModifiers modifiers, bool accepted)
{
Q_Q(QSGCanvas);
const QTransform transform = QSGItemPrivate::get(item)->canvasToItemTransform();
//create copy of event
- QGraphicsSceneHoverEvent hoverEvent(type);
- hoverEvent.setWidget(event->widget());
- hoverEvent.setPos(transform.map(event->scenePos()));
- hoverEvent.setScenePos(event->scenePos());
- hoverEvent.setScreenPos(event->screenPos());
- hoverEvent.setLastPos(transform.map(event->lastScenePos()));
- hoverEvent.setLastScenePos(event->lastScenePos());
- hoverEvent.setLastScreenPos(event->lastScreenPos());
- hoverEvent.setModifiers(event->modifiers());
- hoverEvent.setAccepted(event->isAccepted());
+ QHoverEvent hoverEvent(type, transform.map(scenePos), transform.map(lastScenePos), modifiers);
+ hoverEvent.setAccepted(accepted);
q->sendEvent(item, &hoverEvent);
+
+ return hoverEvent.isAccepted();
}
void QSGCanvas::mouseMoveEvent(QMouseEvent *event)
@@ -1227,19 +1196,22 @@ void QSGCanvas::mouseMoveEvent(QMouseEvent *event)
#endif
if (!d->mouseGrabberItem) {
- QGraphicsSceneHoverEvent hoverEvent;
- d->sceneHoverEventFromMouseEvent(hoverEvent, event);
+ if (d->lastMousePosition.isNull())
+ d->lastMousePosition = event->pos();
+ QPointF last = d->lastMousePosition;
+ d->lastMousePosition = event->pos();
- bool delivered = d->deliverHoverEvent(d->rootItem, &hoverEvent);
+ bool accepted = event->isAccepted();
+ bool delivered = d->deliverHoverEvent(d->rootItem, event->pos(), last, event->modifiers(), accepted);
if (!delivered) {
//take care of any exits
if (d->hoverItem) {
QSGItem *item = d->hoverItem;
d->hoverItem = 0;
- d->sendHoverEvent(QEvent::GraphicsSceneHoverLeave, item, &hoverEvent);
+ accepted = d->sendHoverEvent(QEvent::HoverLeave, item, event->pos(), last, event->modifiers(), accepted);
}
}
- event->setAccepted(hoverEvent.isAccepted());
+ event->setAccepted(accepted);
return;
}
@@ -1250,14 +1222,15 @@ void QSGCanvas::mouseMoveEvent(QMouseEvent *event)
event->setAccepted(sceneEvent.isAccepted());
}
-bool QSGCanvasPrivate::deliverHoverEvent(QSGItem *item, QGraphicsSceneHoverEvent *event)
+bool QSGCanvasPrivate::deliverHoverEvent(QSGItem *item, const QPointF &scenePos, const QPointF &lastScenePos,
+ Qt::KeyboardModifiers modifiers, bool &accepted)
{
QSGItemPrivate *itemPrivate = QSGItemPrivate::get(item);
if (itemPrivate->opacity == 0.0)
return false;
if (itemPrivate->flags & QSGItem::ItemClipsChildrenToShape) {
- QPointF p = item->mapFromScene(event->scenePos());
+ QPointF p = item->mapFromScene(scenePos);
if (!QRectF(0, 0, item->width(), item->height()).contains(p))
return false;
}
@@ -1267,27 +1240,27 @@ bool QSGCanvasPrivate::deliverHoverEvent(QSGItem *item, QGraphicsSceneHoverEvent
QSGItem *child = children.at(ii);
if (!child->isEnabled())
continue;
- if (deliverHoverEvent(child, event))
+ if (deliverHoverEvent(child, scenePos, lastScenePos, modifiers, accepted))
return true;
}
if (itemPrivate->hoverEnabled) {
- QPointF p = item->mapFromScene(event->scenePos());
+ QPointF p = item->mapFromScene(scenePos);
if (QRectF(0, 0, item->width(), item->height()).contains(p)) {
if (hoverItem == item) {
//move
- sendHoverEvent(QEvent::GraphicsSceneHoverMove, item, event);
+ accepted = sendHoverEvent(QEvent::HoverMove, item, scenePos, lastScenePos, modifiers, accepted);
} else {
//exit from previous
if (hoverItem) {
QSGItem *item = hoverItem;
hoverItem = 0;
- sendHoverEvent(QEvent::GraphicsSceneHoverLeave, item, event);
+ accepted = sendHoverEvent(QEvent::HoverLeave, item, scenePos, lastScenePos, modifiers, accepted);
}
//enter new item
hoverItem = item;
- sendHoverEvent(QEvent::GraphicsSceneHoverEnter, item, event);
+ accepted = sendHoverEvent(QEvent::HoverEnter, item, scenePos, lastScenePos, modifiers, accepted);
}
return true;
}
@@ -1630,10 +1603,10 @@ bool QSGCanvas::sendEvent(QSGItem *item, QEvent *e)
case QEvent::Wheel:
QSGItemPrivate::get(item)->deliverWheelEvent(static_cast<QWheelEvent *>(e));
break;
- case QEvent::GraphicsSceneHoverEnter:
- case QEvent::GraphicsSceneHoverLeave:
- case QEvent::GraphicsSceneHoverMove:
- QSGItemPrivate::get(item)->deliverHoverEvent(static_cast<QGraphicsSceneHoverEvent *>(e));
+ case QEvent::HoverEnter:
+ case QEvent::HoverLeave:
+ case QEvent::HoverMove:
+ QSGItemPrivate::get(item)->deliverHoverEvent(static_cast<QHoverEvent *>(e));
break;
case QEvent::TouchBegin:
case QEvent::TouchUpdate:
diff --git a/src/declarative/items/qsgcanvas_p.h b/src/declarative/items/qsgcanvas_p.h
index a5baba6f1b..dfe189cabe 100644
--- a/src/declarative/items/qsgcanvas_p.h
+++ b/src/declarative/items/qsgcanvas_p.h
@@ -114,9 +114,9 @@ public:
bool deliverTouchPoints(QSGItem *, QTouchEvent *, const QList<QTouchEvent::TouchPoint> &, QSet<int> *,
QHash<QSGItem *, QList<QTouchEvent::TouchPoint> > *);
bool deliverTouchEvent(QTouchEvent *);
- void sceneHoverEventFromMouseEvent(QGraphicsSceneHoverEvent &, QMouseEvent *);
- bool deliverHoverEvent(QSGItem *, QGraphicsSceneHoverEvent *);
- void sendHoverEvent(QEvent::Type, QSGItem *, QGraphicsSceneHoverEvent *);
+ bool deliverHoverEvent(QSGItem *, const QPointF &scenePos, const QPointF &lastScenePos, Qt::KeyboardModifiers modifiers, bool &accepted);
+ bool sendHoverEvent(QEvent::Type, QSGItem *, const QPointF &scenePos, const QPointF &lastScenePos,
+ Qt::KeyboardModifiers modifiers, bool accepted);
void clearHover();
void deliverDragEvent(QSGDragEvent *);
bool deliverDragEvent(QSGItem *item, QSGDragEvent *);
diff --git a/src/declarative/items/qsgitem.cpp b/src/declarative/items/qsgitem.cpp
index 84e57053eb..4778275560 100644
--- a/src/declarative/items/qsgitem.cpp
+++ b/src/declarative/items/qsgitem.cpp
@@ -1674,17 +1674,17 @@ void QSGItem::touchEvent(QTouchEvent *event)
event->ignore();
}
-void QSGItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
+void QSGItem::hoverEnterEvent(QHoverEvent *event)
{
Q_UNUSED(event);
}
-void QSGItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+void QSGItem::hoverMoveEvent(QHoverEvent *event)
{
Q_UNUSED(event);
}
-void QSGItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+void QSGItem::hoverLeaveEvent(QHoverEvent *event)
{
Q_UNUSED(event);
}
@@ -2152,19 +2152,19 @@ void QSGItemPrivate::deliverTouchEvent(QTouchEvent *e)
q->touchEvent(e);
}
-void QSGItemPrivate::deliverHoverEvent(QGraphicsSceneHoverEvent *e)
+void QSGItemPrivate::deliverHoverEvent(QHoverEvent *e)
{
Q_Q(QSGItem);
switch(e->type()) {
default:
Q_ASSERT(!"Unknown event type");
- case QEvent::GraphicsSceneHoverEnter:
+ case QEvent::HoverEnter:
q->hoverEnterEvent(e);
break;
- case QEvent::GraphicsSceneHoverLeave:
+ case QEvent::HoverLeave:
q->hoverLeaveEvent(e);
break;
- case QEvent::GraphicsSceneHoverMove:
+ case QEvent::HoverMove:
q->hoverMoveEvent(e);
break;
}
diff --git a/src/declarative/items/qsgitem.h b/src/declarative/items/qsgitem.h
index 0505a36e85..86396dc2b1 100644
--- a/src/declarative/items/qsgitem.h
+++ b/src/declarative/items/qsgitem.h
@@ -361,9 +361,9 @@ protected:
virtual void mouseUngrabEvent(); // XXX todo - params?
virtual void wheelEvent(QWheelEvent *event);
virtual void touchEvent(QTouchEvent *event);
- virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
- virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ virtual void hoverEnterEvent(QHoverEvent *event);
+ virtual void hoverMoveEvent(QHoverEvent *event);
+ virtual void hoverLeaveEvent(QHoverEvent *event);
virtual void dragMoveEvent(QSGDragEvent *event);
virtual void dragEnterEvent(QSGDragEvent *event);
virtual void dragExitEvent(QSGDragEvent *event);
diff --git a/src/declarative/items/qsgitem_p.h b/src/declarative/items/qsgitem_p.h
index 062df2b8ea..0c1b3f1bbf 100644
--- a/src/declarative/items/qsgitem_p.h
+++ b/src/declarative/items/qsgitem_p.h
@@ -323,7 +323,7 @@ public:
void deliverMouseEvent(QGraphicsSceneMouseEvent *);
void deliverWheelEvent(QWheelEvent *);
void deliverTouchEvent(QTouchEvent *);
- void deliverHoverEvent(QGraphicsSceneHoverEvent *);
+ void deliverHoverEvent(QHoverEvent *);
void deliverDragEvent(QSGDragEvent *);
bool calcEffectiveVisible() const;
diff --git a/src/declarative/items/qsgmousearea.cpp b/src/declarative/items/qsgmousearea.cpp
index 6886ccca35..7335980869 100644
--- a/src/declarative/items/qsgmousearea.cpp
+++ b/src/declarative/items/qsgmousearea.cpp
@@ -653,27 +653,29 @@ void QSGMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
}
}
-void QSGMouseArea::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
+void QSGMouseArea::hoverEnterEvent(QHoverEvent *event)
{
Q_D(QSGMouseArea);
if (!d->absorb) {
QSGItem::hoverEnterEvent(event);
} else {
- d->lastPos = event->pos();
+ d->lastPos = event->posF();
+ d->lastModifiers = event->modifiers();
setHovered(true);
- QSGMouseEvent me(d->lastPos.x(), d->lastPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers(), false, false);
+ QSGMouseEvent me(d->lastPos.x(), d->lastPos.y(), Qt::NoButton, Qt::NoButton, d->lastModifiers, false, false);
emit mousePositionChanged(&me);
}
}
-void QSGMouseArea::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+void QSGMouseArea::hoverMoveEvent(QHoverEvent *event)
{
Q_D(QSGMouseArea);
if (!d->absorb) {
QSGItem::hoverMoveEvent(event);
} else {
- d->lastPos = event->pos();
- QSGMouseEvent me(d->lastPos.x(), d->lastPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers(), false, false);
+ d->lastPos = event->posF();
+ d->lastModifiers = event->modifiers();
+ QSGMouseEvent me(d->lastPos.x(), d->lastPos.y(), Qt::NoButton, Qt::NoButton, d->lastModifiers, false, false);
emit mousePositionChanged(&me);
me.setX(d->lastPos.x());
me.setY(d->lastPos.y());
@@ -681,7 +683,7 @@ void QSGMouseArea::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
}
}
-void QSGMouseArea::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+void QSGMouseArea::hoverLeaveEvent(QHoverEvent *event)
{
Q_D(QSGMouseArea);
if (!d->absorb)
diff --git a/src/declarative/items/qsgmousearea_p.h b/src/declarative/items/qsgmousearea_p.h
index d7248bca37..3255210eed 100644
--- a/src/declarative/items/qsgmousearea_p.h
+++ b/src/declarative/items/qsgmousearea_p.h
@@ -220,9 +220,9 @@ protected:
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseUngrabEvent();
- virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
- virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ virtual void hoverEnterEvent(QHoverEvent *event);
+ virtual void hoverMoveEvent(QHoverEvent *event);
+ virtual void hoverLeaveEvent(QHoverEvent *event);
virtual bool childMouseEventFilter(QSGItem *i, QEvent *e);
virtual void timerEvent(QTimerEvent *event);