nodes: color management when setting color parameters is now preserved
This commit is contained in:
@@ -27,21 +27,22 @@ OLIVE_NAMESPACE_ENTER
|
||||
ColorButton::ColorButton(ColorManager* color_manager, QWidget *parent) :
|
||||
QPushButton(parent),
|
||||
color_manager_(color_manager),
|
||||
color_(1.0f, 1.0f, 1.0f),
|
||||
color_processor_(nullptr)
|
||||
{
|
||||
color_ = Color(1.0f, 1.0f, 1.0f);
|
||||
setAutoFillBackground(true);
|
||||
|
||||
connect(this, &ColorButton::clicked, this, &ColorButton::ShowColorDialog);
|
||||
|
||||
UpdateColor();
|
||||
}
|
||||
|
||||
const Color &ColorButton::GetColor() const
|
||||
const ManagedColor &ColorButton::GetColor() const
|
||||
{
|
||||
return color_;
|
||||
}
|
||||
|
||||
void ColorButton::SetColor(const Color &c)
|
||||
void ColorButton::SetColor(const ManagedColor &c)
|
||||
{
|
||||
color_ = c;
|
||||
|
||||
@@ -50,19 +51,11 @@ void ColorButton::SetColor(const Color &c)
|
||||
|
||||
void ColorButton::ShowColorDialog()
|
||||
{
|
||||
ColorDialog cd(color_manager_, color_, cm_input_, this);
|
||||
ColorDialog cd(color_manager_, color_, this);
|
||||
|
||||
if (cd.exec() == QDialog::Accepted) {
|
||||
color_ = cd.GetSelectedColor();
|
||||
|
||||
cm_input_ = cd.GetColorSpaceInput();
|
||||
|
||||
color_processor_ = ColorProcessor::Create(color_manager_->GetConfig(),
|
||||
cd.GetColorSpaceInput(),
|
||||
cd.GetColorSpaceDisplay(),
|
||||
cd.GetColorSpaceView(),
|
||||
cd.GetColorSpaceLook());
|
||||
|
||||
UpdateColor();
|
||||
|
||||
emit ColorChanged(color_);
|
||||
@@ -71,15 +64,15 @@ void ColorButton::ShowColorDialog()
|
||||
|
||||
void ColorButton::UpdateColor()
|
||||
{
|
||||
QColor managed;
|
||||
color_processor_ = ColorProcessor::Create(color_manager_,
|
||||
color_.color_input(),
|
||||
color_.color_display(),
|
||||
color_.color_view(),
|
||||
color_.color_look());
|
||||
|
||||
if (color_processor_) {
|
||||
managed = color_processor_->ConvertColor(color_).toQColor();
|
||||
} else {
|
||||
managed = color_.toQColor();
|
||||
}
|
||||
QColor managed = color_processor_->ConvertColor(color_).toQColor();
|
||||
|
||||
setStyleSheet(QStringLiteral("ColorButton {background: %1;}").arg(managed.name()));
|
||||
setStyleSheet(QStringLiteral("%1--ColorButton {background: %2;}").arg(MACRO_VAL_AS_STR(OLIVE_NAMESPACE), managed.name()));
|
||||
}
|
||||
|
||||
OLIVE_NAMESPACE_EXIT
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
#include <QPushButton>
|
||||
|
||||
#include "render/color.h"
|
||||
#include "render/colormanager.h"
|
||||
#include "render/managedcolor.h"
|
||||
|
||||
OLIVE_NAMESPACE_ENTER
|
||||
|
||||
@@ -34,13 +34,13 @@ class ColorButton : public QPushButton
|
||||
public:
|
||||
ColorButton(ColorManager* color_manager, QWidget* parent = nullptr);
|
||||
|
||||
const Color& GetColor() const;
|
||||
const ManagedColor& GetColor() const;
|
||||
|
||||
public slots:
|
||||
void SetColor(const Color& c);
|
||||
void SetColor(const ManagedColor& c);
|
||||
|
||||
signals:
|
||||
void ColorChanged(const Color& c);
|
||||
void ColorChanged(const ManagedColor& c);
|
||||
|
||||
private slots:
|
||||
void ShowColorDialog();
|
||||
@@ -50,9 +50,7 @@ private:
|
||||
|
||||
ColorManager* color_manager_;
|
||||
|
||||
Color color_;
|
||||
|
||||
QString cm_input_;
|
||||
ManagedColor color_;
|
||||
|
||||
ColorProcessorPtr color_processor_;
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@ void NodeParamViewWidgetBridge::WidgetCallback()
|
||||
case NodeParam::kColor:
|
||||
{
|
||||
// Sender is a ColorButton
|
||||
Color c = static_cast<ColorButton*>(sender())->GetColor();
|
||||
ManagedColor c = static_cast<ColorButton*>(sender())->GetColor();
|
||||
|
||||
QUndoCommand* command = new QUndoCommand();
|
||||
|
||||
@@ -359,6 +359,13 @@ void NodeParamViewWidgetBridge::WidgetCallback()
|
||||
SetInputValueInternal(c.blue(), 2, command);
|
||||
SetInputValueInternal(c.alpha(), 3, command);
|
||||
|
||||
input_->blockSignals(true);
|
||||
input_->set_property(QStringLiteral("col_input"), c.color_input());
|
||||
input_->set_property(QStringLiteral("col_display"), c.color_display());
|
||||
input_->set_property(QStringLiteral("col_view"), c.color_view());
|
||||
input_->set_property(QStringLiteral("col_look"), c.color_look());
|
||||
input_->blockSignals(false);
|
||||
|
||||
Core::instance()->undo_stack()->pushIfHasChildren(command);
|
||||
break;
|
||||
}
|
||||
@@ -461,7 +468,14 @@ void NodeParamViewWidgetBridge::UpdateWidgetValues()
|
||||
break;
|
||||
case NodeParam::kColor:
|
||||
{
|
||||
static_cast<ColorButton*>(widgets_.first())->SetColor(input_->get_value_at_time(node_time).value<Color>());
|
||||
ManagedColor mc = input_->get_value_at_time(node_time).value<Color>();
|
||||
|
||||
mc.set_color_input(input_->get_property(QStringLiteral("col_input")).toString());
|
||||
mc.set_color_display(input_->get_property(QStringLiteral("col_display")).toString());
|
||||
mc.set_color_view(input_->get_property(QStringLiteral("col_view")).toString());
|
||||
mc.set_color_look(input_->get_property(QStringLiteral("col_look")).toString());
|
||||
|
||||
static_cast<ColorButton*>(widgets_.first())->SetColor(mc);
|
||||
break;
|
||||
}
|
||||
case NodeParam::kText:
|
||||
|
||||
@@ -404,7 +404,7 @@ void ViewerGLWidget::SetupColorProcessor()
|
||||
|
||||
try {
|
||||
|
||||
color_service_ = OpenGLColorProcessor::Create(color_manager_->GetConfig(),
|
||||
color_service_ = OpenGLColorProcessor::Create(color_manager_,
|
||||
color_manager_->GetReferenceColorSpace(),
|
||||
ocio_display_,
|
||||
ocio_view_,
|
||||
|
||||
Reference in New Issue
Block a user