bool PicItem::mouseReleaseEvent( const EventInfo &info ) { QMouseEvent *e = info.mouseReleaseEvent( 0, 0 ); if ( !m_pressed ) { delete e; return CNItem::mouseReleaseEvent( info ); } const PinItemList::iterator end = m_pinItemList.end(); for ( PinItemList::iterator it = m_pinItemList.begin(); it != end; ++it ) if ( !e->isAccepted() ) { continue; } else if ( (*it)->boundingRect().contains(m_pos) && (*it)->boundingRect().contains( info.pos ) ) { if ( m_dragged ) { (*it)->dragged( m_dx ); } else { (*it)->switchState(); } m_pressed = false; m_dragged = false; m_pos = QPoint(); m_dx = 0; delete e; return true; } delete e; return CNItem::mouseReleaseEvent( info ); }
RMouseEvent::RMouseEvent(const QMouseEvent& mouseEvent, RGraphicsScene& s, RGraphicsView& v, qreal devicePixelRatio) : QMouseEvent(mouseEvent), RInputEvent(RVector(mouseEvent.posF().x(), mouseEvent.posF().y()), s, v, devicePixelRatio) { setAccepted(mouseEvent.isAccepted()); }
void CurveEditorItem::mouseReleaseEvent(QMouseEvent* event) { QMouseEvent* mouseEvent = new QMouseEvent(event->type(), event->pos(), event->button(), event->buttons(), event->modifiers()); d->curveWidget->mouseReleaseEvent(mouseEvent); if(mouseEvent->isAccepted()) { event->accept(); } d->repaint(); }
void CurveEditorItem::mousePressEvent(QGraphicsSceneMouseEvent* event) { QMouseEvent* mouseEvent = new QMouseEvent(event->type(), event->pos().toPoint(), event->button(), event->buttons(), event->modifiers()); d->curveWidget->mousePressEvent(mouseEvent); if(mouseEvent->isAccepted()) { event->accept(); } d->repaint(); }
bool KisToolProxy::forwardEvent(ActionState state, KisTool::ToolAction action, QEvent *event, QEvent *originalEvent, QTabletEvent *lastTabletEvent, const QPoint &canvasOriginWorkaround) { bool retval = true; QTabletEvent *tabletEvent = dynamic_cast<QTabletEvent*>(event); QTouchEvent *touchEvent = dynamic_cast<QTouchEvent*>(event); QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event); if (tabletEvent) { QPointF docPoint = tabletToDocument(tabletEvent->hiResGlobalPos(), canvasOriginWorkaround); tabletEvent->accept(); this->tabletEvent(tabletEvent, docPoint); forwardToTool(state, action, tabletEvent, docPoint); retval = tabletEvent->isAccepted(); } else if (touchEvent) { if (state == END && touchEvent->type() != QEvent::TouchEnd) { //Fake a touch end if we are "upgrading" a single-touch gesture to a multi-touch gesture. QTouchEvent fakeEvent(QEvent::TouchEnd, touchEvent->deviceType(), touchEvent->modifiers(), touchEvent->touchPointStates(), touchEvent->touchPoints()); this->touchEvent(&fakeEvent); } else { this->touchEvent(touchEvent); } } else if (mouseEvent) { if (lastTabletEvent) { QPointF docPoint = tabletToDocument(lastTabletEvent->hiResGlobalPos(), canvasOriginWorkaround); lastTabletEvent->accept(); this->tabletEvent(lastTabletEvent, docPoint); forwardToTool(state, action, lastTabletEvent, docPoint); retval = lastTabletEvent->isAccepted(); } else { QPointF docPoint = widgetToDocument(mouseEvent->posF()); mouseEvent->accept(); if (mouseEvent->type() == QEvent::MouseButtonPress) { mousePressEvent(mouseEvent, docPoint); } else if (mouseEvent->type() == QEvent::MouseButtonDblClick) { mouseDoubleClickEvent(mouseEvent, docPoint); } else if (mouseEvent->type() == QEvent::MouseButtonRelease) { mouseReleaseEvent(mouseEvent, docPoint); } else if (mouseEvent->type() == QEvent::MouseMove) { mouseMoveEvent(mouseEvent, docPoint); } forwardToTool(state, action, originalEvent, docPoint); retval = mouseEvent->isAccepted(); } } else if(event->type() == QEvent::KeyPress) { QKeyEvent* kevent = static_cast<QKeyEvent*>(event); keyPressEvent(kevent); } else if(event->type() == QEvent::KeyRelease) { QKeyEvent* kevent = static_cast<QKeyEvent*>(event); keyReleaseEvent(kevent); } return retval; }
bool PicItem::mouseMoveEvent( const EventInfo &info ) { QMouseEvent *e = info.mouseMoveEvent( 0, 0 ); const PinItemList::iterator end = m_pinItemList.end(); for ( PinItemList::iterator it = m_pinItemList.begin(); it != end; ++it ) if ( e->isAccepted() && (*it)->boundingRect().contains( info.pos ) ) { QPoint vec = info.pos - m_pos; if ( m_pressed && vec.manhattanLength() > 4 ) { m_dragged = true; m_dx = vec.x(); } delete e; return true; } delete e; return CNItem::mouseMoveEvent( info ); }
bool PicItem::mousePressEvent( const EventInfo &info ) { QMouseEvent *e = info.mousePressEvent( 0, 0 ); const PinItemList::iterator end = m_pinItemList.end(); for ( PinItemList::iterator it = m_pinItemList.begin(); it != end; ++it ) if ( e->isAccepted() && (*it)->boundingRect().contains( info.pos ) ) { //reset mouse-gesture state m_pressed = true; m_pos = info.pos; m_dragged = false; m_dx = 0; delete e; return true; } m_pressed = false; delete e; return CNItem::mousePressEvent( info ); }
/*! \internal */ void QGraphicsProxyWidgetPrivate::sendWidgetMouseEvent(QGraphicsSceneMouseEvent *event) { if (!event || !widget || !widget->isVisible()) return; Q_Q(QGraphicsProxyWidget); // Find widget position and receiver. QPointF pos = event->pos(); QPointer<QWidget> alienWidget = widget->childAt(pos.toPoint()); QPointer<QWidget> receiver = alienWidget ? alienWidget : widget; if (QWidgetPrivate::nearestGraphicsProxyWidget(receiver) != q) return; //another proxywidget will handle the events // Translate QGraphicsSceneMouse events to QMouseEvents. QEvent::Type type = QEvent::None; switch (event->type()) { case QEvent::GraphicsSceneMousePress: type = QEvent::MouseButtonPress; if (!embeddedMouseGrabber) embeddedMouseGrabber = receiver; else receiver = embeddedMouseGrabber; break; case QEvent::GraphicsSceneMouseRelease: type = QEvent::MouseButtonRelease; if (embeddedMouseGrabber) receiver = embeddedMouseGrabber; break; case QEvent::GraphicsSceneMouseDoubleClick: type = QEvent::MouseButtonDblClick; if (!embeddedMouseGrabber) embeddedMouseGrabber = receiver; else receiver = embeddedMouseGrabber; break; case QEvent::GraphicsSceneMouseMove: type = QEvent::MouseMove; if (embeddedMouseGrabber) receiver = embeddedMouseGrabber; break; default: Q_ASSERT_X(false, "QGraphicsProxyWidget", "internal error"); break; } if (!lastWidgetUnderMouse) { QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : widget, 0); lastWidgetUnderMouse = widget; } // Map event position from us to the receiver pos = mapToReceiver(pos, receiver); // Send mouse event. QMouseEvent *mouseEvent = QMouseEvent::createExtendedMouseEvent(type, pos, receiver->mapToGlobal(pos.toPoint()), event->button(), event->buttons(), event->modifiers()); QWidget *embeddedMouseGrabberPtr = (QWidget *)embeddedMouseGrabber; QApplicationPrivate::sendMouseEvent(receiver, mouseEvent, alienWidget, widget, &embeddedMouseGrabberPtr, lastWidgetUnderMouse, event->spontaneous()); embeddedMouseGrabber = embeddedMouseGrabberPtr; // Handle enter/leave events when last button is released from mouse // grabber child widget. if (embeddedMouseGrabber && type == QEvent::MouseButtonRelease && !event->buttons()) { Q_Q(QGraphicsProxyWidget); if (q->rect().contains(event->pos()) && q->acceptsHoverEvents()) lastWidgetUnderMouse = alienWidget ? alienWidget : widget; else // released on the frame our outside the item, or doesn't accept hover events. lastWidgetUnderMouse = 0; QApplicationPrivate::dispatchEnterLeave(lastWidgetUnderMouse, embeddedMouseGrabber); embeddedMouseGrabber = 0; #ifndef QT_NO_CURSOR // ### Restore the cursor, don't override it. if (!lastWidgetUnderMouse) q->unsetCursor(); #endif } event->setAccepted(mouseEvent->isAccepted()); delete mouseEvent; }