/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtQuick module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QQUICKITEM_H #define QQUICKITEM_H #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QQuickItem; class QQuickTransformPrivate; class Q_QUICK_EXPORT QQuickTransform : public QObject { Q_OBJECT QML_ANONYMOUS QML_ADDED_IN_VERSION(2, 0) public: explicit QQuickTransform(QObject *parent = nullptr); ~QQuickTransform() override; void appendToItem(QQuickItem *); void prependToItem(QQuickItem *); virtual void applyTo(QMatrix4x4 *matrix) const = 0; protected Q_SLOTS: void update(); protected: QQuickTransform(QQuickTransformPrivate &dd, QObject *parent); private: Q_DECLARE_PRIVATE(QQuickTransform) }; class QCursor; class QQuickItemLayer; class QQmlV4Function; class QQuickState; class QQuickAnchorLine; class QQuickTransition; class QQuickKeyEvent; class QQuickAnchors; class QQuickItemPrivate; class QQuickWindow; class QTouchEvent; class QSGNode; class QSGTransformNode; class QSGTextureProvider; class QQuickItemGrabResult; class QQuickPalette; class Q_QUICK_EXPORT QQuickItem : public QObject, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem NOTIFY parentChanged DESIGNABLE false FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty data READ data DESIGNABLE false) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty resources READ resources DESIGNABLE false) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty children READ children NOTIFY childrenChanged DESIGNABLE false) Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL) Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL) Q_PROPERTY(qreal z READ z WRITE setZ NOTIFY zChanged FINAL) Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL) Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL) Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickPalette *palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged REVISION(6, 0)) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty visibleChildren READ visibleChildren NOTIFY visibleChildrenChanged DESIGNABLE false) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty states READ states DESIGNABLE false) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty transitions READ transitions DESIGNABLE false) Q_PROPERTY(QString state READ state WRITE setState NOTIFY stateChanged) Q_PROPERTY(QRectF childrenRect READ childrenRect NOTIFY childrenRectChanged DESIGNABLE false FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchors * anchors READ anchors DESIGNABLE false CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine left READ left CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine right READ right CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine horizontalCenter READ horizontalCenter CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine top READ top CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine bottom READ bottom CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine verticalCenter READ verticalCenter CONSTANT FINAL) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickAnchorLine baseline READ baseline CONSTANT FINAL) Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged) Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged) Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL) Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged FINAL) Q_PROPERTY(bool activeFocusOnTab READ activeFocusOnTab WRITE setActiveFocusOnTab NOTIFY activeFocusOnTabChanged FINAL REVISION(2, 1)) Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged) Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin NOTIFY transformOriginChanged) Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint) // deprecated - see QTBUG-26423 Q_PROPERTY(QQmlListProperty transform READ transform DESIGNABLE false FINAL) Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged) Q_PROPERTY(bool antialiasing READ antialiasing WRITE setAntialiasing NOTIFY antialiasingChanged RESET resetAntialiasing) Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged) Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged) Q_PROPERTY(QObject *containmentMask READ containmentMask WRITE setContainmentMask NOTIFY containmentMaskChanged REVISION(2, 11)) Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickItemLayer *layer READ layer DESIGNABLE false CONSTANT FINAL) Q_CLASSINFO("DefaultProperty", "data") Q_CLASSINFO("qt_QmlJSWrapperFactoryMethod", "_q_createJSWrapper(QV4::ExecutionEngine*)") QML_NAMED_ELEMENT(Item) QML_ADDED_IN_VERSION(2, 0) public: enum Flag { ItemClipsChildrenToShape = 0x01, #if QT_CONFIG(im) ItemAcceptsInputMethod = 0x02, #endif ItemIsFocusScope = 0x04, ItemHasContents = 0x08, ItemAcceptsDrops = 0x10 // Remember to increment the size of QQuickItemPrivate::flags }; Q_DECLARE_FLAGS(Flags, Flag) Q_FLAG(Flags) enum ItemChange { ItemChildAddedChange, // value.item ItemChildRemovedChange, // value.item ItemSceneChange, // value.window ItemVisibleHasChanged, // value.boolValue ItemParentHasChanged, // value.item ItemOpacityHasChanged, // value.realValue ItemActiveFocusHasChanged, // value.boolValue ItemRotationHasChanged, // value.realValue ItemAntialiasingHasChanged, // value.boolValue ItemDevicePixelRatioHasChanged, // value.realValue ItemEnabledHasChanged // value.boolValue }; union ItemChangeData { ItemChangeData(QQuickItem *v) : item(v) {} ItemChangeData(QQuickWindow *v) : window(v) {} ItemChangeData(qreal v) : realValue(v) {} ItemChangeData(bool v) : boolValue(v) {} QQuickItem *item; QQuickWindow *window; qreal realValue; bool boolValue; }; enum TransformOrigin { TopLeft, Top, TopRight, Left, Center, Right, BottomLeft, Bottom, BottomRight }; Q_ENUM(TransformOrigin) explicit QQuickItem(QQuickItem *parent = nullptr); ~QQuickItem() override; QQuickWindow *window() const; QQuickItem *parentItem() const; void setParentItem(QQuickItem *parent); void stackBefore(const QQuickItem *); void stackAfter(const QQuickItem *); QRectF childrenRect(); QList childItems() const; bool clip() const; void setClip(bool); QString state() const; void setState(const QString &); qreal baselineOffset() const; void setBaselineOffset(qreal); QQmlListProperty transform(); qreal x() const; qreal y() const; QPointF position() const; void setX(qreal); void setY(qreal); void setPosition(const QPointF &); qreal width() const; void setWidth(qreal); void resetWidth(); void setImplicitWidth(qreal); qreal implicitWidth() const; qreal height() const; void setHeight(qreal); void resetHeight(); void setImplicitHeight(qreal); qreal implicitHeight() const; QSizeF size() const; void setSize(const QSizeF &size); TransformOrigin transformOrigin() const; void setTransformOrigin(TransformOrigin); QPointF transformOriginPoint() const; void setTransformOriginPoint(const QPointF &); qreal z() const; void setZ(qreal); qreal rotation() const; void setRotation(qreal); qreal scale() const; void setScale(qreal); qreal opacity() const; void setOpacity(qreal); bool isVisible() const; void setVisible(bool); bool isEnabled() const; void setEnabled(bool); bool smooth() const; void setSmooth(bool); bool activeFocusOnTab() const; void setActiveFocusOnTab(bool); bool antialiasing() const; void setAntialiasing(bool); void resetAntialiasing(); Flags flags() const; void setFlag(Flag flag, bool enabled = true); void setFlags(Flags flags); virtual QRectF boundingRect() const; virtual QRectF clipRect() const; bool hasActiveFocus() const; bool hasFocus() const; void setFocus(bool); void setFocus(bool focus, Qt::FocusReason reason); bool isFocusScope() const; QQuickItem *scopedFocusItem() const; bool isAncestorOf(const QQuickItem *child) const; Qt::MouseButtons acceptedMouseButtons() const; void setAcceptedMouseButtons(Qt::MouseButtons buttons); bool acceptHoverEvents() const; void setAcceptHoverEvents(bool enabled); bool acceptTouchEvents() const; void setAcceptTouchEvents(bool accept); #if QT_CONFIG(cursor) QCursor cursor() const; void setCursor(const QCursor &cursor); void unsetCursor(); #endif bool isUnderMouse() const; void grabMouse(); void ungrabMouse(); bool keepMouseGrab() const; void setKeepMouseGrab(bool); bool filtersChildMouseEvents() const; void setFiltersChildMouseEvents(bool filter); void grabTouchPoints(const QList &ids); void ungrabTouchPoints(); bool keepTouchGrab() const; void setKeepTouchGrab(bool); // implemented in qquickitemgrabresult.cpp Q_REVISION(2, 4) Q_INVOKABLE bool grabToImage(const QJSValue &callback, const QSize &targetSize = QSize()); QSharedPointer grabToImage(const QSize &targetSize = QSize()); Q_INVOKABLE virtual bool contains(const QPointF &point) const; QObject *containmentMask() const; void setContainmentMask(QObject *mask); QTransform itemTransform(QQuickItem *, bool *) const; QPointF mapToItem(const QQuickItem *item, const QPointF &point) const; QPointF mapToScene(const QPointF &point) const; QPointF mapToGlobal(const QPointF &point) const; QRectF mapRectToItem(const QQuickItem *item, const QRectF &rect) const; QRectF mapRectToScene(const QRectF &rect) const; QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const; QPointF mapFromScene(const QPointF &point) const; QPointF mapFromGlobal(const QPointF &point) const; QRectF mapRectFromItem(const QQuickItem *item, const QRectF &rect) const; QRectF mapRectFromScene(const QRectF &rect) const; void polish(); Q_INVOKABLE void mapFromItem(QQmlV4Function*) const; Q_INVOKABLE void mapToItem(QQmlV4Function*) const; Q_REVISION(2, 7) Q_INVOKABLE void mapFromGlobal(QQmlV4Function*) const; Q_REVISION(2, 7) Q_INVOKABLE void mapToGlobal(QQmlV4Function*) const; Q_INVOKABLE void forceActiveFocus(); Q_INVOKABLE void forceActiveFocus(Qt::FocusReason reason); Q_REVISION(2, 1) Q_INVOKABLE QQuickItem *nextItemInFocusChain(bool forward = true); Q_INVOKABLE QQuickItem *childAt(qreal x, qreal y) const; #if QT_CONFIG(im) virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; #endif struct UpdatePaintNodeData { QSGTransformNode *transformNode; private: friend class QQuickWindowPrivate; UpdatePaintNodeData(); }; virtual bool isTextureProvider() const; virtual QSGTextureProvider *textureProvider() const; public Q_SLOTS: void update(); Q_SIGNALS: void childrenRectChanged(const QRectF &); void baselineOffsetChanged(qreal); void stateChanged(const QString &); void focusChanged(bool); void activeFocusChanged(bool); Q_REVISION(2, 1) void activeFocusOnTabChanged(bool); void parentChanged(QQuickItem *); void transformOriginChanged(TransformOrigin); void smoothChanged(bool); void antialiasingChanged(bool); void clipChanged(bool); Q_REVISION(2, 1) void windowChanged(QQuickWindow* window); void childrenChanged(); void opacityChanged(); void enabledChanged(); void visibleChanged(); void visibleChildrenChanged(); void rotationChanged(); void scaleChanged(); void xChanged(); void yChanged(); void widthChanged(); void heightChanged(); void zChanged(); void implicitWidthChanged(); void implicitHeightChanged(); Q_REVISION(2, 11) void containmentMaskChanged(); Q_REVISION(6, 0) void paletteChanged(); Q_REVISION(6, 0) void paletteCreated(); protected: bool event(QEvent *) override; bool isComponentComplete() const; virtual void itemChange(ItemChange, const ItemChangeData &); virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry); #if QT_CONFIG(im) void updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput); #endif bool widthValid() const; // ### better name? bool heightValid() const; // ### better name? void setImplicitSize(qreal, qreal); void classBegin() override; void componentComplete() override; virtual void keyPressEvent(QKeyEvent *event); virtual void keyReleaseEvent(QKeyEvent *event); #if QT_CONFIG(im) virtual void inputMethodEvent(QInputMethodEvent *); #endif virtual void focusInEvent(QFocusEvent *); virtual void focusOutEvent(QFocusEvent *); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void mouseUngrabEvent(); // XXX todo - params? virtual void touchUngrabEvent(); #if QT_CONFIG(wheelevent) virtual void wheelEvent(QWheelEvent *event); #endif virtual void touchEvent(QTouchEvent *event); virtual void hoverEnterEvent(QHoverEvent *event); virtual void hoverMoveEvent(QHoverEvent *event); virtual void hoverLeaveEvent(QHoverEvent *event); #if QT_CONFIG(quick_draganddrop) virtual void dragEnterEvent(QDragEnterEvent *); virtual void dragMoveEvent(QDragMoveEvent *); virtual void dragLeaveEvent(QDragLeaveEvent *); virtual void dropEvent(QDropEvent *); #endif virtual bool childMouseEventFilter(QQuickItem *, QEvent *); virtual void windowDeactivateEvent(); virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); virtual void releaseResources(); virtual void updatePolish(); protected: QQuickItem(QQuickItemPrivate &dd, QQuickItem *parent = nullptr); private: Q_PRIVATE_SLOT(d_func(), void _q_resourceObjectDeleted(QObject *)) Q_PRIVATE_SLOT(d_func(), quint64 _q_createJSWrapper(QV4::ExecutionEngine *)) friend class QQuickEventPoint; friend class QQuickWindow; friend class QQuickWindowPrivate; friend class QSGRenderer; friend class QAccessibleQuickItem; friend class QQuickAccessibleAttached; Q_DISABLE_COPY(QQuickItem) Q_DECLARE_PRIVATE(QQuickItem) }; Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickItem::Flags) #ifndef QT_NO_DEBUG_STREAM QDebug Q_QUICK_EXPORT operator<<(QDebug debug, QQuickItem *item); #endif QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickItem) QML_DECLARE_TYPE(QQuickTransform) #endif // QQUICKITEM_H