diff options
Diffstat (limited to 'src/quick/items/qquickdrag_p.h')
-rw-r--r-- | src/quick/items/qquickdrag_p.h | 108 |
1 files changed, 39 insertions, 69 deletions
diff --git a/src/quick/items/qquickdrag_p.h b/src/quick/items/qquickdrag_p.h index 1c49c0a79a..fa73e91485 100644 --- a/src/quick/items/qquickdrag_p.h +++ b/src/quick/items/qquickdrag_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QQUICKDRAG_P_H #define QQUICKDRAG_P_H @@ -55,6 +19,7 @@ #include <private/qintrusivelist_p.h> #include <private/qqmlguard_p.h> +#include <private/qtquickglobal_p.h> #include <QtCore/qmimedata.h> #include <QtCore/qstringlist.h> @@ -66,18 +31,17 @@ QT_BEGIN_NAMESPACE class QQuickItem; class QQuickDrag; -class QQuickDragPrivate; class QQuickDragGrabber { class Item : public QQmlGuard<QQuickItem> { public: - Item(QQuickItem *item) : QQmlGuard<QQuickItem>(item) {} + Item(QQuickItem *item) : QQmlGuard<QQuickItem>(Item::objectDestroyedImpl, item) {} QIntrusiveListNode node; - protected: - void objectDestroyed(QQuickItem *) override { delete this; } + private: + static void objectDestroyedImpl(QQmlGuardImpl *guard) { delete static_cast<Item *>(guard); } }; typedef QIntrusiveList<Item, &Item::node> ItemList; @@ -108,9 +72,12 @@ public: void grab(QQuickItem *item) { m_items.insert(new Item(item)); } iterator release(iterator at) { Item *item = *at; at = at.erase(); delete item; return at; } + auto& ignoreList() { return m_ignoreDragItems; } + private: ItemList m_items; + QVarLengthArray<QQuickItem *, 4> m_ignoreDragItems; QObject *m_target; }; @@ -152,24 +119,23 @@ private: friend class QQuickDragAttachedPrivate; }; -class QQmlV4Function; class QQuickDragAttached; -class Q_AUTOTEST_EXPORT QQuickDrag : public QObject +class Q_QUICK_EXPORT QQuickDrag : public QObject { Q_OBJECT - Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged RESET resetTarget) - Q_PROPERTY(Axis axis READ axis WRITE setAxis NOTIFY axisChanged) - Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged) - Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged) - Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged) - Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged) - Q_PROPERTY(bool active READ active NOTIFY activeChanged) - Q_PROPERTY(bool filterChildren READ filterChildren WRITE setFilterChildren NOTIFY filterChildrenChanged) - Q_PROPERTY(bool smoothed READ smoothed WRITE setSmoothed NOTIFY smoothedChanged) + Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged RESET resetTarget FINAL) + Q_PROPERTY(Axis axis READ axis WRITE setAxis NOTIFY axisChanged FINAL FINAL) + Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged FINAL) + Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged FINAL) + Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged FINAL) + Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged FINAL) + Q_PROPERTY(bool active READ active NOTIFY activeChanged FINAL) + Q_PROPERTY(bool filterChildren READ filterChildren WRITE setFilterChildren NOTIFY filterChildrenChanged FINAL) + Q_PROPERTY(bool smoothed READ smoothed WRITE setSmoothed NOTIFY smoothedChanged FINAL) // Note, threshold was added in QtQuick 2.2 but REVISION is not supported (or needed) for grouped // properties See QTBUG-33179 - Q_PROPERTY(qreal threshold READ threshold WRITE setThreshold NOTIFY thresholdChanged RESET resetThreshold) + Q_PROPERTY(qreal threshold READ threshold WRITE setThreshold NOTIFY thresholdChanged RESET resetThreshold FINAL) //### consider drag and drop QML_NAMED_ELEMENT(Drag) @@ -244,21 +210,23 @@ private: }; class QQuickDragAttachedPrivate; -class QQuickDragAttached : public QObject +class Q_QUICK_EXPORT QQuickDragAttached : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QQuickDragAttached) - Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged) - Q_PROPERTY(QObject *source READ source WRITE setSource NOTIFY sourceChanged RESET resetSource) - Q_PROPERTY(QObject *target READ target NOTIFY targetChanged) - Q_PROPERTY(QPointF hotSpot READ hotSpot WRITE setHotSpot NOTIFY hotSpotChanged) - Q_PROPERTY(QUrl imageSource READ imageSource WRITE setImageSource NOTIFY imageSourceChanged) - Q_PROPERTY(QStringList keys READ keys WRITE setKeys NOTIFY keysChanged) - Q_PROPERTY(QVariantMap mimeData READ mimeData WRITE setMimeData NOTIFY mimeDataChanged) - Q_PROPERTY(Qt::DropActions supportedActions READ supportedActions WRITE setSupportedActions NOTIFY supportedActionsChanged) - Q_PROPERTY(Qt::DropAction proposedAction READ proposedAction WRITE setProposedAction NOTIFY proposedActionChanged) - Q_PROPERTY(QQuickDrag::DragType dragType READ dragType WRITE setDragType NOTIFY dragTypeChanged) + Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged FINAL) + Q_PROPERTY(QObject *source READ source WRITE setSource NOTIFY sourceChanged RESET resetSource FINAL) + Q_PROPERTY(QObject *target READ target NOTIFY targetChanged FINAL) + Q_PROPERTY(QPointF hotSpot READ hotSpot WRITE setHotSpot NOTIFY hotSpotChanged FINAL) + Q_PROPERTY(QUrl imageSource READ imageSource WRITE setImageSource NOTIFY imageSourceChanged FINAL) + // imageSourceSize is new in Qt 6.8; revision omitted because of QTBUG-33179 + Q_PROPERTY(QSize imageSourceSize READ imageSourceSize WRITE setImageSourceSize NOTIFY imageSourceSizeChanged FINAL) + Q_PROPERTY(QStringList keys READ keys WRITE setKeys NOTIFY keysChanged FINAL) + Q_PROPERTY(QVariantMap mimeData READ mimeData WRITE setMimeData NOTIFY mimeDataChanged FINAL) + Q_PROPERTY(Qt::DropActions supportedActions READ supportedActions WRITE setSupportedActions NOTIFY supportedActionsChanged FINAL) + Q_PROPERTY(Qt::DropAction proposedAction READ proposedAction WRITE setProposedAction NOTIFY proposedActionChanged FINAL) + Q_PROPERTY(QQuickDrag::DragType dragType READ dragType WRITE setDragType NOTIFY dragTypeChanged FINAL) QML_ANONYMOUS QML_ADDED_IN_VERSION(2, 0) @@ -282,6 +250,9 @@ public: QUrl imageSource() const; void setImageSource(const QUrl &url); + QSize imageSourceSize() const; + void setImageSourceSize(const QSize &size); + QStringList keys() const; void setKeys(const QStringList &keys); @@ -302,8 +273,8 @@ public: bool event(QEvent *event) override; public Q_SLOTS: - void start(QQmlV4Function *); - void startDrag(QQmlV4Function *); + void start(QQmlV4FunctionPtr); + void startDrag(QQmlV4FunctionPtr); void cancel(); Q_SIGNALS: @@ -315,6 +286,7 @@ Q_SIGNALS: void targetChanged(); void hotSpotChanged(); void imageSourceChanged(); + void imageSourceSizeChanged(); // new in Qt 6.8 void keysChanged(); void mimeDataChanged(); void supportedActionsChanged(); @@ -324,6 +296,4 @@ Q_SIGNALS: QT_END_NAMESPACE -QML_DECLARE_TYPE(QQuickDrag) - #endif |