diff options
Diffstat (limited to 'src/quick/items/qquickitem.cpp')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index d90cc71997..4c20b7e2e1 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -4177,7 +4177,7 @@ void QQuickItem::hoverLeaveEvent(QHoverEvent *event) Q_UNUSED(event); } -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) /*! This event handler can be reimplemented in a subclass to receive drag-enter events for an item. The event information is provided by the @@ -4245,7 +4245,7 @@ void QQuickItem::dropEvent(QDropEvent *event) { Q_UNUSED(event); } -#endif // draganddrop +#endif // quick_draganddrop /*! Reimplement this method to filter the mouse events that are received by @@ -5097,7 +5097,7 @@ QQuickStateGroup *QQuickItemPrivate::_states() if (!componentComplete) _stateGroup->classBegin(); qmlobject_connect(_stateGroup, QQuickStateGroup, SIGNAL(stateChanged(QString)), - q, QQuickItem, SIGNAL(stateChanged(QString))) + q, QQuickItem, SIGNAL(stateChanged(QString))); } return _stateGroup; @@ -5136,6 +5136,40 @@ void QQuickItemPrivate::transformChanged() #endif } +QPointF QQuickItemPrivate::adjustedPosForTransform(const QPointF ¢roidParentPos, + const QPointF &startPos, + const QVector2D &activeTranslation, //[0,0] means no additional translation from startPos + qreal startScale, + qreal activeScale, // 1.0 means no additional scale from startScale + qreal startRotation, + qreal activeRotation) // 0.0 means no additional rotation from startRotation +{ + Q_Q(QQuickItem); + QVector3D xformOrigin(q->transformOriginPoint()); + QMatrix4x4 startMatrix; + startMatrix.translate(float(startPos.x()), float(startPos.y())); + startMatrix.translate(xformOrigin); + startMatrix.scale(float(startScale)); + startMatrix.rotate(float(startRotation), 0, 0, -1); + startMatrix.translate(-xformOrigin); + + const QVector3D centroidParentVector(centroidParentPos); + QMatrix4x4 mat; + mat.translate(centroidParentVector); + mat.rotate(float(activeRotation), 0, 0, 1); + mat.scale(float(activeScale)); + mat.translate(-centroidParentVector); + mat.translate(QVector3D(activeTranslation)); + + mat = mat * startMatrix; + + QPointF xformOriginPoint = q->transformOriginPoint(); + QPointF pos = mat * xformOriginPoint; + pos -= xformOriginPoint; + + return pos; +} + bool QQuickItemPrivate::filterKeyEvent(QKeyEvent *e, bool post) { if (!extra.isAllocated() || !extra->keyHandler) @@ -5666,6 +5700,7 @@ void QQuickItem::setRotation(qreal r) color: "red" x: 25; y: 25; width: 50; height: 50 scale: 1.4 + transformOrigin: Item.TopLeft } } \endqml @@ -8098,7 +8133,7 @@ bool QQuickItem::event(QEvent *ev) wheelEvent(static_cast<QWheelEvent*>(ev)); break; #endif -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) case QEvent::DragEnter: dragEnterEvent(static_cast<QDragEnterEvent*>(ev)); break; @@ -8111,7 +8146,7 @@ bool QQuickItem::event(QEvent *ev) case QEvent::Drop: dropEvent(static_cast<QDropEvent*>(ev)); break; -#endif // draganddrop +#endif // quick_draganddrop #if QT_CONFIG(gestures) case QEvent::NativeGesture: ev->ignore(); @@ -8373,7 +8408,7 @@ void QQuickItemLayer::activateEffect() m_effect->stackAfter(m_effectSource); } m_effect->setVisible(m_item->isVisible()); - m_effect->setProperty(m_name, qVariantFromValue<QObject *>(m_effectSource)); + m_effect->setProperty(m_name, QVariant::fromValue<QObject *>(m_effectSource)); QQuickItemPrivate::get(m_effect)->setTransparentForPositioner(true); m_effectComponent->completeCreate(); } @@ -8513,7 +8548,11 @@ void QQuickItemLayer::setSourceRect(const QRectF &sourceRect) /*! \qmlproperty bool QtQuick::Item::layer.smooth - Holds whether the layer is smoothly transformed. + Holds whether the layer is smoothly transformed. When enabled, sampling the + layer's texture is performed using \c linear interpolation, while + non-smooth results in using the \c nearest filtering mode. + + By default, this property is set to \c false. \sa {Item Layers} */ @@ -8670,7 +8709,7 @@ void QQuickItemLayer::setName(const QByteArray &name) { return; if (m_effect) { m_effect->setProperty(m_name, QVariant()); - m_effect->setProperty(name, qVariantFromValue<QObject *>(m_effectSource)); + m_effect->setProperty(name, QVariant::fromValue<QObject *>(m_effectSource)); } m_name = name; emit nameChanged(name); |