aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/nativestyle/items/qquickstyleitem.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/nativestyle/items/qquickstyleitem.h')
-rw-r--r--src/imports/nativestyle/items/qquickstyleitem.h311
1 files changed, 0 insertions, 311 deletions
diff --git a/src/imports/nativestyle/items/qquickstyleitem.h b/src/imports/nativestyle/items/qquickstyleitem.h
deleted file mode 100644
index 3148cc7c..00000000
--- a/src/imports/nativestyle/items/qquickstyleitem.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** 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 http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QQUICKSTYLEITEM_H
-#define QQUICKSTYLEITEM_H
-
-#include <QtCore/qdebug.h>
-#include <QtQml/qqml.h>
-#include <QtQml/qqmlinfo.h>
-#include <QtQuick/private/qquickitem_p.h>
-#include <QtQuickTemplates2/private/qquickcontrol_p.h>
-
-#include "qquicknativestyle.h"
-#include "qquickstyle.h"
-#include "qquickstyleoption.h"
-
-// Work-around for now, to avoid creator getting confused
-// about missing macros. Should eventually be defined
-// in qt declarative somewhere I assume.
-#ifndef QML_NAMED_ELEMENT
-#define QML_NAMED_ELEMENT(NAME)
-#define QML_UNCREATABLE(NAME)
-#endif
-
-#ifdef QT_DEBUG
-#define qqc2Debug() if (m_debugFlags.testFlag(Debug)) qDebug() << __FUNCTION__ << ":"
-#define qqc2Info() if (m_debugFlags.testFlag(Info)) qDebug() << __FUNCTION__ << ":"
-#define qqc2InfoHeading(HEADING) if (m_debugFlags.testFlag(Info)) qDebug() << "--------" << HEADING << "--------"
-#else
-#define qqc2Debug() if (false) qDebug()
-#define qqc2Info() if (false) qDebug()
-#define qqc2InfoHeading(HEADING) if (false) qDebug()
-#endif
-
-QT_BEGIN_NAMESPACE
-
-using namespace QQC2;
-
-class QQuickStyleMargins
-{
- Q_GADGET
-
- Q_PROPERTY(int left READ left())
- Q_PROPERTY(int top READ top())
- Q_PROPERTY(int right READ right())
- Q_PROPERTY(int bottom READ bottom())
-
- QML_NAMED_ELEMENT(stylemargins)
- QML_UNCREATABLE("")
-
-public:
- QQuickStyleMargins() {}
- QQuickStyleMargins(const QQuickStyleMargins &other) : m_margins(other.m_margins) {}
- QQuickStyleMargins(const QMargins &margins) : m_margins(margins) {}
- QQuickStyleMargins(const QRect &outer, const QRect &inner)
- {
- const int left = inner.left() - outer.left();
- const int top = inner.top() - outer.top();
- const int right = outer.right() - inner.right();
- const int bottom = outer.bottom() - inner.bottom();
- m_margins = QMargins(left, top, right, bottom);
- }
-
- inline void operator=(const QQuickStyleMargins &other) { m_margins = other.m_margins; }
- inline bool operator==(const QQuickStyleMargins &other) const { return other.m_margins == m_margins; }
- inline bool operator!=(const QQuickStyleMargins &other) const { return other.m_margins != m_margins; }
-
- inline int left() const { return m_margins.left(); }
- inline int right() const { return m_margins.right(); }
- inline int top() const { return m_margins.top(); }
- inline int bottom() const { return m_margins.bottom(); }
-
- QMargins m_margins;
-};
-
-QDebug operator<<(QDebug debug, const QQuickStyleMargins &padding);
-
-struct StyleItemGeometry
-{
- /*
- A QQuickItem is responsible for drawing a control, or a part of it.
-
- 'minimumSize' should be the minimum possible size that the item can
- have _without_ taking content size into consideration (and still render
- correctly). This will also be the size of the image that the item is drawn
- to, unless QQuickStyleItem::useNinePatchImage is set to false. In that
- case, the size of the image will be set to the size of the item instead
- (which is set from QML, and will typically be the same as the size of the control).
- The default way to calculate minimumSize is to call style()->sizeFromContents()
- with an empty content size. This is not always well supported by the legacy QStyle
- implementations, which means that you might e.g get an empty size in return).
- For those cases, the correct solution is to go into the specific platform style
- and change it so that it returns a valid size also for this special case.
-
- 'implicitSize' should reflect the preferred size of the item, taking the
- given content size (as set from QML) into account. But not all controls
- have contents (slider), and for many controls, the content/label is instead
- placed outside the item/background image (radiobutton). In both cases, the
- size of the item will not include the content size, and implicitSize can
- usually be set equal to minimumSize instead.
-
- 'contentRect' should be the free space where the contents can be placed. Note that
- this rect doesn't need to have the same size as the contentSize provided as input
- to the style item. Instead, QStyle can typically calculate a rect that is bigger, to
- e.g center the contents inside the control.
-
- 'layoutRect' can be set to shift the position of the whole control so
- that aligns correctly with the other controls. This is important for
- controls that draws e.g shadows or focus rings. Such adornments should
- be painted, but not be included when aligning the controls.
- */
-
- QSize minimumSize;
- QSize implicitSize;
- QRect contentRect;
- QRect layoutRect; //If invalid, there are no layout margins!
- QMargins ninePatchMargins;
- qreal focusFrameRadius;
-};
-
-QDebug operator<<(QDebug debug, const StyleItemGeometry &cg);
-
-class QQuickStyleItem : public QQuickItem
-{
- Q_OBJECT
-
- // Input
- Q_PROPERTY(QQuickItem *control MEMBER m_control NOTIFY controlChanged)
- Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth)
- Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight)
- Q_PROPERTY(bool useNinePatchImage MEMBER m_useNinePatchImage)
- Q_PROPERTY(OverrideState overrideState MEMBER m_overrideState)
-
- // Output
- Q_PROPERTY(QQuickStyleMargins contentPadding READ contentPadding() NOTIFY contentPaddingChanged)
- Q_PROPERTY(QQuickStyleMargins layoutMargins READ layoutMargins() NOTIFY layoutMarginsChanged)
- Q_PROPERTY(QSize minimumSize READ minimumSize() NOTIFY minimumSizeChanged)
- Q_PROPERTY(int transitionDuration MEMBER m_transitionDuration CONSTANT)
-
- QML_NAMED_ELEMENT(StyleItem)
- QML_UNCREATABLE("StyleItem is an abstract base class.")
-
-public:
- enum DirtyFlag {
- Nothing = 0,
- Geometry,
- Image,
- Everything = 255
- };
- Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
-
- enum OverrideState {
- None = 0,
- AlwaysHovered,
- NeverHovered,
- AlwaysSunken
- };
- Q_ENUM(OverrideState)
-
-
-#ifdef QT_DEBUG
- enum DebugFlag {
- NoDebug = 0x000,
- Debug = 0x001,
- Info = 0x002,
- ImageRect = 0x004,
- ContentRect = 0x008,
- LayoutRect = 0x010,
- Unscaled = 0x020,
- InputContentSize = 0x040,
- DontUseNinePatchImage = 0x080,
- NinePatchMargins = 0x100,
- SaveImage = 0x200,
- };
- Q_FLAG(DebugFlag)
- Q_DECLARE_FLAGS(DebugFlags, DebugFlag)
-#endif
-
- explicit QQuickStyleItem(QQuickItem *parent = nullptr);
- ~QQuickStyleItem() override;
-
- qreal contentWidth();
- void setContentWidth(qreal contentWidth);
- qreal contentHeight();
- void setContentHeight(qreal contentHeight);
-
- QQuickStyleMargins contentPadding() const;
- QQuickStyleMargins layoutMargins() const;
- QSize minimumSize() const;
- QSize imageSize() const;
- qreal focusFrameRadius() const;
-
- Q_INVOKABLE virtual QFont styleFont(QQuickItem *control) const;
-
- void markGeometryDirty();
- void markImageDirty();
-
-signals:
- void controlChanged();
- void contentPaddingChanged();
- void layoutMarginsChanged();
- void fontChanged();
- void minimumSizeChanged();
-
-protected:
- void componentComplete() override;
- QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData) override;
- void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
- void itemChange(ItemChange change, const ItemChangeData &data) override;
- void updatePolish() override;
-
- virtual void connectToControl() const;
- virtual void paintEvent(QPainter *painter) const = 0;
- virtual StyleItemGeometry calculateGeometry() = 0;
-
- static QStyle::State controlSize(QQuickItem *item);
- void initStyleOptionBase(QStyleOption &styleOption) const;
-
- inline QSize contentSize() const { return QSize(qCeil(m_contentSize.width()), qCeil(m_contentSize.height())); }
- inline static QStyle *style() { return QQuickNativeStyle::style(); }
-
- template <class T> inline const T* control() const {
-#ifdef QT_DEBUG
- if (!dynamic_cast<T *>(m_control.data())) {
- qmlWarning(this) << "control property is not of correct type";
- Q_UNREACHABLE();
- }
-#endif
- return static_cast<T *>(m_control.data());
- }
-
-#ifdef QT_DEBUG
- DebugFlags m_debugFlags = NoDebug;
-#endif
- OverrideState m_overrideState = None;
-
-private:
- inline void updateGeometry();
- inline void paintControlToImage();
-
- int dprAlignedSize(const int size) const;
-
-#ifdef QT_DEBUG
- void addDebugInfo();
-#endif
-
-private:
- QPointer<QQuickItem> m_control;
- QImage m_paintedImage;
- StyleItemGeometry m_styleItemGeometry;
- QSizeF m_contentSize;
-
- DirtyFlags m_dirty = Everything;
- bool m_useNinePatchImage = true;
- bool m_polishing = false;
- mutable QQuickWindow *m_connectedWindow = nullptr;
-
-#ifdef Q_OS_MACOS
- int m_transitionDuration = 150;
-#else
- int m_transitionDuration = 400;
-#endif
-
-private:
- friend class QtQuickControls2MacOSStylePlugin;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickStyleItem::DirtyFlags)
-
-#ifdef QT_DEBUG
-Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickStyleItem::DebugFlags)
-#endif
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QQuickStyleItem)
-
-#endif // QQUICKSTYLEITEM_H