// 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 QSGSOFTWAREINTERNALIMAGENODE_H #define QSGSOFTWAREINTERNALIMAGENODE_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include QT_BEGIN_NAMESPACE namespace QSGSoftwareHelpers { typedef QVarLengthArray QPixmapFragmentsArray; struct QTileRules { inline QTileRules(Qt::TileRule horizontalRule, Qt::TileRule verticalRule) : horizontal(horizontalRule), vertical(verticalRule) {} inline QTileRules(Qt::TileRule rule = Qt::StretchTile) : horizontal(rule), vertical(rule) {} Qt::TileRule horizontal; Qt::TileRule vertical; }; #ifndef Q_QDOC // For internal use only. namespace QDrawBorderPixmap { enum DrawingHint { OpaqueTopLeft = 0x0001, OpaqueTop = 0x0002, OpaqueTopRight = 0x0004, OpaqueLeft = 0x0008, OpaqueCenter = 0x0010, OpaqueRight = 0x0020, OpaqueBottomLeft = 0x0040, OpaqueBottom = 0x0080, OpaqueBottomRight = 0x0100, OpaqueCorners = OpaqueTopLeft | OpaqueTopRight | OpaqueBottomLeft | OpaqueBottomRight, OpaqueEdges = OpaqueTop | OpaqueLeft | OpaqueRight | OpaqueBottom, OpaqueFrame = OpaqueCorners | OpaqueEdges, OpaqueAll = OpaqueCenter | OpaqueFrame }; Q_DECLARE_FLAGS(DrawingHints, DrawingHint) } #endif void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargins &targetMargins, const QPixmap &pixmap, const QRect &sourceRect,const QMargins &sourceMargins, const QTileRules &rules, QDrawBorderPixmap::DrawingHints hints); } // QSGSoftwareHelpers namespace class QSGSoftwareInternalImageNode : public QSGInternalImageNode { public: QSGSoftwareInternalImageNode(); void setTargetRect(const QRectF &rect) override; void setInnerTargetRect(const QRectF &rect) override; void setInnerSourceRect(const QRectF &rect) override; void setSubSourceRect(const QRectF &rect) override; void setTexture(QSGTexture *texture) override; void setMirror(bool mirrorHorizontally, bool mirrorVertically) override; void setMipmapFiltering(QSGTexture::Filtering filtering) override; void setFiltering(QSGTexture::Filtering filtering) override; void setHorizontalWrapMode(QSGTexture::WrapMode wrapMode) override; void setVerticalWrapMode(QSGTexture::WrapMode wrapMode) override; void update() override; void preprocess() override; void paint(QPainter *painter); QRectF rect() const; const QPixmap &pixmap() const; private: QRectF m_targetRect; QRectF m_innerTargetRect; QRectF m_innerSourceRect; QRectF m_subSourceRect; QPointer m_texture; QPixmap m_cachedMirroredPixmap; bool m_mirrorHorizontally; bool m_mirrorVertically; bool m_textureIsLayer; bool m_smooth; bool m_tileHorizontal; bool m_tileVertical; bool m_cachedMirroredPixmapIsDirty; }; QT_END_NAMESPACE #endif // QSGSOFTWAREINTERNALIMAGENODE_H