// Copyright (C) 2016 Jolla Ltd, author: // Copyright (C) 2022 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 QGFXSOURCEPROXY_P_H #define QGFXSOURCEPROXY_P_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 QT_BEGIN_NAMESPACE class QQuickShaderEffectSource; class QGfxSourceProxy : public QQuickItem { Q_OBJECT Q_PROPERTY(QQuickItem *input READ input WRITE setInput NOTIFY inputChanged RESET resetInput FINAL) Q_PROPERTY(QQuickItem *output READ output NOTIFY outputChanged FINAL) Q_PROPERTY(QRectF sourceRect READ sourceRect WRITE setSourceRect NOTIFY sourceRectChanged FINAL) Q_PROPERTY(bool active READ isActive NOTIFY activeChanged FINAL) Q_PROPERTY(Interpolation interpolation READ interpolation WRITE setInterpolation NOTIFY interpolationChanged FINAL) public: enum class Interpolation { Any, Nearest, Linear }; Q_ENUM(Interpolation) QGfxSourceProxy(QQuickItem *parentItem = nullptr); ~QGfxSourceProxy(); QQuickItem *input() const { return m_input; } void setInput(QQuickItem *input); void resetInput() { setInput(nullptr); } QQuickItem *output() const { return m_output; } QRectF sourceRect() const { return m_sourceRect; } void setSourceRect(const QRectF &sourceRect); bool isActive() const { return m_output && m_output != m_input; } void setInterpolation(Interpolation i); Interpolation interpolation() const { return m_interpolation; } protected: void updatePolish() override; Q_SIGNALS: void inputChanged(); void outputChanged(); void sourceRectChanged(); void activeChanged(); void interpolationChanged(); private Q_SLOTS: void repolish(); private: void setOutput(QQuickItem *output); void useProxy(); static QObject *findLayer(QQuickItem *); QRectF m_sourceRect; QQuickItem *m_input = nullptr; QQuickItem *m_output = nullptr; QQuickShaderEffectSource *m_proxy = nullptr; Interpolation m_interpolation = Interpolation::Any; }; QT_END_NAMESPACE #endif // QGFXSOURCEPROXY_P_H