diff --git a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp index 74098f5e7..536dd62fc 100644 --- a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp +++ b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp @@ -42,10 +42,13 @@ OCIOGradingTransformLinearNode::OCIOGradingTransformLinearNode() { AddInput(kContrastInput, NodeValue::kVec4, QVector4D{1.0, 1.0, 1.0, 1.0}); SetInputProperty(kContrastInput, QStringLiteral("min"), QVector4D{0.001f, 0.001f, 0.001f, 0.001f}); + SetVec4InputColors(kContrastInput); AddInput(kOffsetInput, NodeValue::kVec4, QVector4D{0.0, 0.0, 0.0, 0.0}); + SetVec4InputColors(kOffsetInput); AddInput(kExposureInput, NodeValue::kVec4, QVector4D{0.0, 0.0, 0.0, 0.0}); + SetVec4InputColors(kExposureInput); AddInput(kSaturationInput, NodeValue::kFloat, 1.0); SetInputProperty(kSaturationInput, QStringLiteral("min"), 0.0); @@ -124,4 +127,12 @@ void OCIOGradingTransformLinearNode::ConfigChanged() GenerateProcessor(); } +void OCIOGradingTransformLinearNode::SetVec4InputColors(const QString &input) +{ + SetInputProperty(input, QStringLiteral("color0"), QColor(255, 0, 0).name()); + SetInputProperty(input, QStringLiteral("color1"), QColor(0, 255, 0).name()); + SetInputProperty(input, QStringLiteral("color2"), QColor(0, 0, 255).name()); + SetInputProperty(input, QStringLiteral("color3"), QColor(192, 192, 192).name()); +} + } diff --git a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h index 883432a15..11e65ed85 100644 --- a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h +++ b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h @@ -55,6 +55,9 @@ class OCIOGradingTransformLinearNode : public OCIOBaseNode protected slots: virtual void ConfigChanged() override; +private: + void SetVec4InputColors(const QString &input); + }; } // olive diff --git a/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp b/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp index e030d1b15..0a5f091d8 100644 --- a/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp +++ b/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp @@ -654,6 +654,23 @@ void NodeParamViewWidgetBridge::SetProperty(const QString &key, const QVariant & } UpdateWidgetValues(); + } else if (key.startsWith(QStringLiteral("color"))) { + QColor c(value.toString()); + + int tracks = NodeValue::get_number_of_keyframe_tracks(data_type); + + if (key.size() == 5) { + // Set for all tracks + for (int i=0; i(widgets_.at(i))->SetColor(c); + } + } else { + bool ok; + int element = key.mid(5).toInt(&ok); + if (ok && element >= 0 && element < tracks) { + static_cast(widgets_.at(element))->SetColor(c); + } + } } } diff --git a/app/widget/slider/base/sliderbase.h b/app/widget/slider/base/sliderbase.h index 64d4ed2f4..4663525d9 100644 --- a/app/widget/slider/base/sliderbase.h +++ b/app/widget/slider/base/sliderbase.h @@ -55,6 +55,11 @@ public: UpdateLabel(); } + void SetColor(const QColor &c) + { + label_->SetColor(c); + } + public slots: void ShowEditor(); diff --git a/app/widget/slider/base/sliderlabel.cpp b/app/widget/slider/base/sliderlabel.cpp index b5c851515..4271bd1e5 100644 --- a/app/widget/slider/base/sliderlabel.cpp +++ b/app/widget/slider/base/sliderlabel.cpp @@ -27,7 +27,8 @@ namespace olive { SliderLabel::SliderLabel(QWidget *parent) : - QLabel(parent) + QLabel(parent), + override_color_enabled_(false) { QPalette p = palette(); @@ -52,6 +53,26 @@ SliderLabel::SliderLabel(QWidget *parent) : setContextMenuPolicy(Qt::CustomContextMenu); } +void SliderLabel::SetColor(const QColor &c) +{ + // Prevent infinite loop in changeEvent when we set the stylesheet + override_color_enabled_ = false; + override_color_ = c; + + // Different colors will look different depending on the theme (light/dark mode). We abstract + // that away here so that other classes can simply choose a color and we will handle making it + // more legible based on the background + QColor adjusted; + if (palette().window().color().lightness() < 128) { + adjusted = override_color_.lighter(150); + } else { + adjusted = override_color_.darker(150); + } + + setStyleSheet(QStringLiteral("color: %1").arg(adjusted.name())); + override_color_enabled_ = true; +} + void SliderLabel::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { @@ -81,4 +102,13 @@ void SliderLabel::focusInEvent(QFocusEvent *event) } } +void SliderLabel::changeEvent(QEvent *event) +{ + QWidget::changeEvent(event); + + if (override_color_enabled_ && event->type() == QEvent::StyleChange) { + SetColor(override_color_); + } +} + } diff --git a/app/widget/slider/base/sliderlabel.h b/app/widget/slider/base/sliderlabel.h index 747ad44ce..948b0d77a 100644 --- a/app/widget/slider/base/sliderlabel.h +++ b/app/widget/slider/base/sliderlabel.h @@ -33,6 +33,8 @@ class SliderLabel : public QLabel public: SliderLabel(QWidget* parent); + void SetColor(const QColor &c); + protected: virtual void mousePressEvent(QMouseEvent *e) override; @@ -40,6 +42,8 @@ protected: virtual void focusInEvent(QFocusEvent *event) override; + virtual void changeEvent(QEvent *event) override; + signals: void LabelPressed(); @@ -51,6 +55,10 @@ signals: void ChangeSliderType(); +private: + bool override_color_enabled_; + QColor override_color_; + }; }