aboutsummaryrefslogtreecommitdiffstats
path: root/src/effects/qgfxsourceproxy_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/effects/qgfxsourceproxy_p.h')
-rw-r--r--src/effects/qgfxsourceproxy_p.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/effects/qgfxsourceproxy_p.h b/src/effects/qgfxsourceproxy_p.h
new file mode 100644
index 0000000000..600f750ad8
--- /dev/null
+++ b/src/effects/qgfxsourceproxy_p.h
@@ -0,0 +1,88 @@
+// Copyright (C) 2016 Jolla Ltd, author: <gunnar.sletta@jollamobile.com>
+// 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 <QtQuick/QQuickItem>
+#include <QtCore/private/qglobal_p.h>
+
+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