From 08b40b9be75242505a773dc5b2a96a5ef481d6e6 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 15 May 2019 09:39:45 -0500 Subject: Update Qt3D color handling There have been a number of updates to QtQuick color handing that were not similarly updated on the Qt3D side (for example the addition of hsl* and hsv* properties). This led to different behavior depending on the imports used, where the Qt3D behavior did not match the basic color documentation. [ChangeLog][Quick3D] Update Qt3D color handing to match QtQuick. Task-number: QTBUG-75551 Change-Id: I13d163c2ada39dd8941351cb0cfa991618333ee1 Reviewed-by: Paul Lemire --- src/quick3d/quick3d/qt3dquick_global.cpp | 5 ++ src/quick3d/quick3d/qt3dquickvaluetypes.cpp | 74 ++++++++++++++++++++++++++++- src/quick3d/quick3d/qt3dquickvaluetypes_p.h | 18 +++++++ 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/src/quick3d/quick3d/qt3dquick_global.cpp b/src/quick3d/quick3d/qt3dquick_global.cpp index aa2a94860..8c88feef1 100644 --- a/src/quick3d/quick3d/qt3dquick_global.cpp +++ b/src/quick3d/quick3d/qt3dquick_global.cpp @@ -98,6 +98,11 @@ public: return QVariant(QColor::fromHslF(h, s, l, a)); } + QVariant fromHsvF(double h, double s, double v, double a) override + { + return QVariant(QColor::fromHsvF(h, s, v, a)); + } + QVariant lighter(const QVariant &var, qreal factor) { QColor color = var.value(); diff --git a/src/quick3d/quick3d/qt3dquickvaluetypes.cpp b/src/quick3d/quick3d/qt3dquickvaluetypes.cpp index 1cdc3844b..7cc1a4a0c 100644 --- a/src/quick3d/quick3d/qt3dquickvaluetypes.cpp +++ b/src/quick3d/quick3d/qt3dquickvaluetypes.cpp @@ -54,8 +54,7 @@ namespace Quick3DValueTypes { QString Quick3DColorValueType::toString() const { - // to maintain behaviour with QtQuick 1.0, we just output normal toString() value. - return QVariant(v).toString(); + return v.name(v.alpha() != 255 ? QColor::HexArgb : QColor::HexRgb); } qreal Quick3DColorValueType::r() const @@ -78,6 +77,36 @@ qreal Quick3DColorValueType::a() const return v.alphaF(); } +qreal Quick3DColorValueType::hsvHue() const +{ + return v.hsvHueF(); +} + +qreal Quick3DColorValueType::hsvSaturation() const +{ + return v.hsvSaturationF(); +} + +qreal Quick3DColorValueType::hsvValue() const +{ + return v.valueF(); +} + +qreal Quick3DColorValueType::hslHue() const +{ + return v.hslHueF(); +} + +qreal Quick3DColorValueType::hslSaturation() const +{ + return v.hslSaturationF(); +} + +qreal Quick3DColorValueType::hslLightness() const +{ + return v.lightnessF(); +} + void Quick3DColorValueType::setR(qreal r) { v.setRedF(r); @@ -98,6 +127,47 @@ void Quick3DColorValueType::setA(qreal a) v.setAlphaF(a); } +void Quick3DColorValueType::setHsvHue(qreal hsvHue) +{ + qreal hue, saturation, value, alpha; + v.getHsvF(&hue, &saturation, &value, &alpha); + v.setHsvF(hsvHue, saturation, value, alpha); +} + +void Quick3DColorValueType::setHsvSaturation(qreal hsvSaturation) +{ + qreal hue, saturation, value, alpha; + v.getHsvF(&hue, &saturation, &value, &alpha); + v.setHsvF(hue, hsvSaturation, value, alpha); +} + +void Quick3DColorValueType::setHsvValue(qreal hsvValue) +{ + qreal hue, saturation, value, alpha; + v.getHsvF(&hue, &saturation, &value, &alpha); + v.setHsvF(hue, saturation, hsvValue, alpha); +} + +void Quick3DColorValueType::setHslHue(qreal hslHue) +{ + qreal hue, saturation, lightness, alpha; + v.getHslF(&hue, &saturation, &lightness, &alpha); + v.setHslF(hslHue, saturation, lightness, alpha); +} + +void Quick3DColorValueType::setHslSaturation(qreal hslSaturation) +{ + qreal hue, saturation, lightness, alpha; + v.getHslF(&hue, &saturation, &lightness, &alpha); + v.setHslF(hue, hslSaturation, lightness, alpha); +} + +void Quick3DColorValueType::setHslLightness(qreal hslLightness) +{ + qreal hue, saturation, lightness, alpha; + v.getHslF(&hue, &saturation, &lightness, &alpha); + v.setHslF(hue, saturation, hslLightness, alpha); +} QString Quick3DVector2DValueType::toString() const { diff --git a/src/quick3d/quick3d/qt3dquickvaluetypes_p.h b/src/quick3d/quick3d/qt3dquickvaluetypes_p.h index 46500b935..d1b4a4d5d 100644 --- a/src/quick3d/quick3d/qt3dquickvaluetypes_p.h +++ b/src/quick3d/quick3d/qt3dquickvaluetypes_p.h @@ -79,6 +79,12 @@ class QT3DQUICKSHARED_PRIVATE_EXPORT Quick3DColorValueType Q_PROPERTY(qreal g READ g WRITE setG FINAL) Q_PROPERTY(qreal b READ b WRITE setB FINAL) Q_PROPERTY(qreal a READ a WRITE setA FINAL) + Q_PROPERTY(qreal hsvHue READ hsvHue WRITE setHsvHue FINAL) + Q_PROPERTY(qreal hsvSaturation READ hsvSaturation WRITE setHsvSaturation FINAL) + Q_PROPERTY(qreal hsvValue READ hsvValue WRITE setHsvValue FINAL) + Q_PROPERTY(qreal hslHue READ hslHue WRITE setHslHue FINAL) + Q_PROPERTY(qreal hslSaturation READ hslSaturation WRITE setHslSaturation FINAL) + Q_PROPERTY(qreal hslLightness READ hslLightness WRITE setHslLightness FINAL) Q_GADGET public: Q_INVOKABLE QString toString() const; @@ -87,10 +93,22 @@ public: qreal g() const; qreal b() const; qreal a() const; + qreal hsvHue() const; + qreal hsvSaturation() const; + qreal hsvValue() const; + qreal hslHue() const; + qreal hslSaturation() const; + qreal hslLightness() const; void setR(qreal); void setG(qreal); void setB(qreal); void setA(qreal); + void setHsvHue(qreal); + void setHsvSaturation(qreal); + void setHsvValue(qreal); + void setHslHue(qreal); + void setHslSaturation(qreal); + void setHslLightness(qreal); }; class QT3DQUICKSHARED_PRIVATE_EXPORT Quick3DVector2DValueType -- cgit v1.2.3