forked from qt-creator/qt-creator
Control type is used to determine the control presented for the property in UI. Currently only int and bool control types are supported. Also fixed the issue that changing define wouldn't update preview. This was because changing define requires rebaking shaders, which is not normally triggered on property change. Fixes: QDS-11770 Change-Id: I953d827195565f765df1a09550c4a49da9c93c29 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
117 lines
3.4 KiB
C++
117 lines
3.4 KiB
C++
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
#pragma once
|
|
|
|
#include <QObject>
|
|
#include <QVariant>
|
|
|
|
#include <qmldesigner/components/propertyeditor/propertyeditorvalue.h>
|
|
|
|
QT_FORWARD_DECLARE_CLASS(QColor)
|
|
QT_FORWARD_DECLARE_CLASS(QJsonObject)
|
|
QT_FORWARD_DECLARE_CLASS(QVector2D)
|
|
|
|
namespace EffectComposer {
|
|
|
|
class Uniform : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY(QString uniformName MEMBER m_displayName CONSTANT)
|
|
Q_PROPERTY(QString uniformType READ typeName CONSTANT)
|
|
Q_PROPERTY(QString uniformControlType READ controlTypeName CONSTANT)
|
|
Q_PROPERTY(QString uniformDescription READ description CONSTANT)
|
|
Q_PROPERTY(QVariant uniformValue READ value WRITE setValue NOTIFY uniformValueChanged)
|
|
Q_PROPERTY(QVariant uniformBackendValue READ backendValue NOTIFY uniformBackendValueChanged)
|
|
Q_PROPERTY(QVariant uniformMinValue MEMBER m_minValue CONSTANT)
|
|
Q_PROPERTY(QVariant uniformMaxValue MEMBER m_maxValue CONSTANT)
|
|
Q_PROPERTY(QVariant uniformDefaultValue MEMBER m_defaultValue CONSTANT)
|
|
Q_PROPERTY(QVariant uniformUseCustomValue MEMBER m_useCustomValue CONSTANT)
|
|
|
|
public:
|
|
enum class Type
|
|
{
|
|
Bool,
|
|
Int,
|
|
Float,
|
|
Vec2,
|
|
Vec3,
|
|
Vec4,
|
|
Color,
|
|
Sampler,
|
|
Define
|
|
};
|
|
|
|
Uniform(const QString &effectName, const QJsonObject &props, const QString &qenPath);
|
|
|
|
Type type() const;
|
|
Type controlType() const;
|
|
QString typeName() const;
|
|
QString controlTypeName() const;
|
|
|
|
QVariant value() const;
|
|
void setValue(const QVariant &newValue);
|
|
|
|
QVariant backendValue() const;
|
|
|
|
QVariant defaultValue() const;
|
|
|
|
QVariant minValue() const;
|
|
QVariant maxValue() const;
|
|
|
|
QString name() const;
|
|
QString description() const;
|
|
QString displayName() const;
|
|
|
|
QString customValue() const;
|
|
void setCustomValue(const QString &newCustomValue);
|
|
bool useCustomValue() const;
|
|
|
|
bool enabled() const;
|
|
void setEnabled(bool newEnabled);
|
|
|
|
bool enableMipmap() const;
|
|
|
|
static QString stringFromType(Uniform::Type type, bool isShader = false);
|
|
static Uniform::Type typeFromString(const QString &typeString);
|
|
static QString typeToProperty(Uniform::Type type);
|
|
|
|
signals:
|
|
void uniformValueChanged();
|
|
void uniformBackendValueChanged();
|
|
|
|
private:
|
|
QString mipmapPropertyName(const QString &name) const;
|
|
bool getBoolValue(const QJsonValue &jsonValue, bool defaultValue);
|
|
QString getResourcePath(const QString &effectName, const QString &value, const QString &qenPath) const;
|
|
void setValueData(const QString &value, const QString &defaultValue,
|
|
const QString &minValue, const QString &maxValue);
|
|
|
|
QVariant getInitializedVariant(bool maxValue);
|
|
QVariant valueStringToVariant(const QString &value);
|
|
|
|
QString m_qenPath;
|
|
Type m_type;
|
|
Type m_controlType;
|
|
QVariant m_value;
|
|
QVariant m_defaultValue;
|
|
QVariant m_minValue;
|
|
QVariant m_maxValue;
|
|
QString m_name;
|
|
QString m_displayName;
|
|
QString m_description;
|
|
QString m_customValue;
|
|
bool m_useCustomValue = false;
|
|
bool m_enabled = true;
|
|
bool m_enableMipmap = false;
|
|
QmlDesigner::PropertyEditorValue *m_backendValue = nullptr;
|
|
|
|
bool operator==(const Uniform &rhs) const noexcept
|
|
{
|
|
return this->m_name == rhs.m_name;
|
|
}
|
|
};
|
|
|
|
} // namespace EffectComposer
|