aboutsummaryrefslogtreecommitdiffstats
path: root/src/effects/qquickmultieffect_p_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/effects/qquickmultieffect_p_p.h')
-rw-r--r--src/effects/qquickmultieffect_p_p.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/effects/qquickmultieffect_p_p.h b/src/effects/qquickmultieffect_p_p.h
new file mode 100644
index 0000000000..7d635e2e25
--- /dev/null
+++ b/src/effects/qquickmultieffect_p_p.h
@@ -0,0 +1,192 @@
+// 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 QQUICKMULTIEFFECT_P_P_H
+#define QQUICKMULTIEFFECT_P_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 <private/qtquickglobal_p.h>
+
+QT_REQUIRE_CONFIG(quick_shadereffect);
+
+#include <private/qquickmultieffect_p.h>
+#include <private/qquickitem_p.h>
+#include <private/qgfxsourceproxy_p.h>
+#include <QtCore/qvector.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickShaderEffect;
+class QQuickShaderEffectSource;
+
+class QQuickMultiEffectPrivate : public QQuickItemPrivate
+{
+ Q_DECLARE_PUBLIC(QQuickMultiEffect)
+
+public:
+ QQuickMultiEffectPrivate();
+ ~QQuickMultiEffectPrivate();
+
+ QQuickItem *source() const;
+ void setSource(QQuickItem *item);
+
+ bool autoPaddingEnabled() const;
+ void setAutoPaddingEnabled(bool enabled);
+
+ QRectF paddingRect() const;
+ void setPaddingRect(const QRectF &rect);
+
+ qreal brightness() const;
+ void setBrightness(qreal brightness);
+
+ qreal contrast() const;
+ void setContrast(qreal contrast);
+
+ qreal saturation() const;
+ void setSaturation(qreal saturation);
+
+ qreal colorization() const;
+ void setColorization(qreal colorization);
+
+ QColor colorizationColor() const;
+ void setColorizationColor(const QColor &color);
+
+ bool blurEnabled() const;
+ void setBlurEnabled(bool enabled);
+
+ qreal blur() const;
+ void setBlur(qreal blur);
+
+ int blurMax() const;
+ void setBlurMax(int blurMax);
+
+ qreal blurMultiplier() const;
+ void setBlurMultiplier(qreal blurMultiplier);
+
+ bool shadowEnabled() const;
+ void setShadowEnabled(bool enabled);
+
+ qreal shadowOpacity() const;
+ void setShadowOpacity(qreal shadowOpacity);
+
+ qreal shadowBlur() const;
+ void setShadowBlur(qreal shadowBlur);
+
+ qreal shadowHorizontalOffset() const;
+ void setShadowHorizontalOffset(qreal offset);
+
+ qreal shadowVerticalOffset() const;
+ void setShadowVerticalOffset(qreal offset);
+
+ QColor shadowColor() const;
+ void setShadowColor(const QColor &color);
+
+ qreal shadowScale() const;
+ void setShadowScale(qreal shadowScale);
+
+ bool maskEnabled() const;
+ void setMaskEnabled(bool enabled);
+
+ QQuickItem *maskSource() const;
+ void setMaskSource(QQuickItem *item);
+
+ qreal maskThresholdMin() const;
+ void setMaskThresholdMin(qreal threshold);
+
+ qreal maskSpreadAtMin() const;
+ void setMaskSpreadAtMin(qreal spread);
+
+ qreal maskThresholdMax() const;
+ void setMaskThresholdMax(qreal threshold);
+
+ qreal maskSpreadAtMax() const;
+ void setMaskSpreadAtMax(qreal spread);
+
+ bool maskInverted() const;
+ void setMaskInverted(bool inverted);
+
+ QRectF itemRect() const;
+ QString fragmentShader() const;
+ QString vertexShader() const;
+ bool hasProxySource() const;
+
+ void handleGeometryChange(const QRectF &newGeometry, const QRectF &oldGeometry);
+ void handleItemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value);
+ void initialize();
+ void updateMaskThresholdSpread();
+ void updateCenterOffset();
+ void updateShadowOffset();
+ void updateColorizationColor();
+ void updateShadowColor();
+ float calculateLod(float blurAmount);
+ float blurWeight(float v);
+ void getBlurWeights(float blurLod, QVector4D &blurWeight1, QVector2D &blurWeight2);
+ void updateBlurWeights();
+ void updateShadowBlurWeights();
+ void updateBlurItemSizes(bool forceUpdate = false);
+ void updateEffectShaders();
+ void updateBlurLevel(bool forceUpdate = false);
+ void updateBlurItemsAmount(int blurLevel);
+ void updateSourcePadding();
+ void updateProxyActiveCheck();
+ void proxyOutputChanged();
+
+private:
+ bool m_initialized = false;
+ QQuickItem *m_sourceItem = nullptr;
+ QGfxSourceProxy *m_shaderSource = nullptr;
+ QQuickShaderEffect *m_shaderEffect = nullptr;
+ QQuickShaderEffectSource *m_dummyShaderSource = nullptr;
+ QVector<QQuickShaderEffect *> m_blurEffects;
+ bool m_autoPaddingEnabled = true;
+ QRectF m_paddingRect;
+ qreal m_brightness = 0.0;
+ qreal m_contrast = 0.0;
+ qreal m_saturation = 0.0;
+ qreal m_colorization = 0.0;
+ QColor m_colorizationColor = { 255, 0, 0, 255 };
+ bool m_blurEnabled = false;
+ qreal m_blur = 0.0;
+ int m_blurMax = 32;
+ qreal m_blurMultiplier = 0.0;
+ bool m_shadowEnabled = false;
+ qreal m_shadowOpacity = 1.0;
+ qreal m_shadowBlur = 1.0;
+ qreal m_shadowHorizontalOffset = 0.0;
+ qreal m_shadowVerticalOffset = 0.0;
+ QColor m_shadowColor = { 0, 0, 0, 255 };
+ qreal m_shadowScale = 1.0;
+ bool m_maskEnabled = false;
+ QQuickItem *m_maskSourceItem = nullptr;
+ qreal m_maskThresholdMin = 0.0;
+ qreal m_maskSpreadAtMin = 0.0;
+ qreal m_maskThresholdMax = 1.0;
+ qreal m_maskSpreadAtMax = 0.0;
+ bool m_maskInverted = false;
+
+ int m_blurLevel = 0;
+ QString m_vertShader;
+ QString m_fragShader;
+ QSizeF m_firstBlurItemSize;
+
+ QVector4D m_blurWeight1;
+ QVector2D m_blurWeight2;
+ QVector4D m_shadowBlurWeight1;
+ QVector2D m_shadowBlurWeight2;
+};
+
+
+
+QT_END_NAMESPACE
+
+#endif // QQUICKMULTIEFFECT_P_P_H