colordialog: various improvements that should ultimately be near completion

This commit is contained in:
itsmattkc
2020-04-04 04:22:55 +11:00
parent 730b94c471
commit 98e5b175e9
2 changed files with 80 additions and 10 deletions
+45 -9
View File
@@ -6,12 +6,16 @@
#include "common/qtutils.h"
ColorDialog::ColorDialog(ColorManager* color_manager, Color start, QWidget *parent) :
ColorDialog::ColorDialog(ColorManager* color_manager, Color start, QString input_cs, QWidget *parent) :
QDialog(parent),
color_manager_(color_manager)
{
setWindowTitle(tr("Select Color"));
if (input_cs.isEmpty()) {
input_cs = color_manager_->GetDefaultInputColorSpace();
}
QVBoxLayout* layout = new QVBoxLayout(this);
QSplitter* splitter = new QSplitter(Qt::Horizontal);
@@ -37,8 +41,9 @@ ColorDialog::ColorDialog(ColorManager* color_manager, Color start, QWidget *pare
color_values_widget_ = new ColorValuesWidget();
value_layout->addWidget(color_values_widget_);
ColorSpaceChooser* chooser = new ColorSpaceChooser(color_manager_);
value_layout->addWidget(chooser);
chooser_ = new ColorSpaceChooser(color_manager_);
chooser_->set_input(input_cs);
value_layout->addWidget(chooser_);
splitter->setSizes({INT_MAX, 0});
@@ -56,12 +61,23 @@ ColorDialog::ColorDialog(ColorManager* color_manager, Color start, QWidget *pare
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
layout->addWidget(buttons);
color_wheel_->SetSelectedColor(start);
hsv_value_gradient_->SetSelectedColor(start);
color_values_widget_->SetColor(start);
{
// Convert reference color to the input space
ColorProcessorPtr linear_to_input = ColorProcessor::Create(color_manager_->GetConfig(),
color_manager_->GetReferenceColorSpace(),
input_cs);
connect(chooser, &ColorSpaceChooser::ColorSpaceChanged, this, &ColorDialog::ColorSpaceChanged);
ColorSpaceChanged(chooser->input(), chooser->display(), chooser->view(), chooser->look());
Color managed_start = linear_to_input->ConvertColor(start);
color_wheel_->SetSelectedColor(managed_start);
hsv_value_gradient_->SetSelectedColor(managed_start);
color_values_widget_->SetColor(managed_start);
}
connect(chooser_, &ColorSpaceChooser::ColorSpaceChanged, this, &ColorDialog::ColorSpaceChanged);
ColorSpaceChanged(chooser_->input(), chooser_->display(), chooser_->view(), chooser_->look());
resize(sizeHint().height() * 2, sizeHint().height());
}
Color ColorDialog::GetSelectedColor() const
@@ -77,9 +93,29 @@ Color ColorDialog::GetSelectedColor() const
return selected;
}
QString ColorDialog::GetColorSpaceInput() const
{
return chooser_->input();
}
QString ColorDialog::GetColorSpaceDisplay() const
{
return chooser_->display();
}
QString ColorDialog::GetColorSpaceView() const
{
return chooser_->view();
}
QString ColorDialog::GetColorSpaceLook() const
{
return chooser_->look();
}
void ColorDialog::ColorSpaceChanged(const QString &input, const QString &display, const QString &view, const QString &look)
{
ColorProcessorPtr to_linear_processor_ = ColorProcessor::Create(color_manager_->GetConfig(), input, color_manager_->GetReferenceColorSpace());
to_linear_processor_ = ColorProcessor::Create(color_manager_->GetConfig(), input, color_manager_->GetReferenceColorSpace());
ColorProcessorPtr to_display = ColorProcessor::Create(color_manager_->GetConfig(),
color_manager_->GetReferenceColorSpace(),
+35 -1
View File
@@ -14,10 +14,42 @@ class ColorDialog : public QDialog
{
Q_OBJECT
public:
ColorDialog(ColorManager* color_manager, Color start = Color(1.0f, 1.0f, 1.0f), QWidget* parent = nullptr);
/**
* @brief ColorDialog Constructor
*
* @param color_manager
*
* The ColorManager to use for color management. This must be valid.
*
* @param start
*
* The color to start with. This must be in the color_manager's reference space
*
* @param input_cs
*
* The input range that the user should see. The start color will be converted to this for UI object.
*
* @param parent
*
* QWidget parent.
*/
ColorDialog(ColorManager* color_manager, Color start = Color(1.0f, 1.0f, 1.0f), QString input_cs = QString(), QWidget* parent = nullptr);
/**
* @brief Retrieves the color selected by the user
*
* The color is always returned in the ColorManager's reference space (usually scene linear).
*/
Color GetSelectedColor() const;
QString GetColorSpaceInput() const;
QString GetColorSpaceDisplay() const;
QString GetColorSpaceView() const;
QString GetColorSpaceLook() const;
private:
ColorManager* color_manager_;
@@ -29,6 +61,8 @@ private:
ColorProcessorPtr to_linear_processor_;
ColorSpaceChooser* chooser_;
private slots:
void ColorSpaceChanged(const QString& input, const QString& display, const QString& view, const QString& look);