diff --git a/app/dialog/projectproperties/projectproperties.cpp b/app/dialog/projectproperties/projectproperties.cpp index 7f90d2bd2..a845cc29f 100644 --- a/app/dialog/projectproperties/projectproperties.cpp +++ b/app/dialog/projectproperties/projectproperties.cpp @@ -187,7 +187,7 @@ void ProjectPropertiesDialog::OCIOFilenameUpdated() ocio_config_is_valid_ = true; // List input color spaces - QStringList input_cs = ColorManager::ListAvailableInputColorspaces(c); + QStringList input_cs = ColorManager::ListAvailableColorspaces(c); foreach (QString cs, input_cs) { default_input_colorspace_->addItem(cs); diff --git a/app/project/item/footage/imagestream.cpp b/app/project/item/footage/imagestream.cpp index 9b679bc5d..beb5f3b3b 100644 --- a/app/project/item/footage/imagestream.cpp +++ b/app/project/item/footage/imagestream.cpp @@ -132,7 +132,7 @@ void ImageStream::ColorConfigChanged() // Check if this colorspace is in the new config if (!colorspace_.isEmpty()) { - QStringList colorspaces = color_manager->ListAvailableInputColorspaces(); + QStringList colorspaces = color_manager->ListAvailableColorspaces(); if (!colorspaces.contains(colorspace_)) { // Set to empty if not colorspace_.clear(); diff --git a/app/render/colormanager.cpp b/app/render/colormanager.cpp index 5b2cc1838..7c713edd6 100644 --- a/app/render/colormanager.cpp +++ b/app/render/colormanager.cpp @@ -210,9 +210,9 @@ QStringList ColorManager::ListAvailableLooks() return looks; } -QStringList ColorManager::ListAvailableInputColorspaces() +QStringList ColorManager::ListAvailableColorspaces() { - return ListAvailableInputColorspaces(config_); + return ListAvailableColorspaces(config_); } const QString &ColorManager::GetDefaultInputColorSpace() const @@ -243,7 +243,7 @@ void ColorManager::SetReferenceColorSpace(const QString &s) QString ColorManager::GetCompliantColorSpace(const QString &s) { - if (ListAvailableInputColorspaces().contains(s)) { + if (ListAvailableColorspaces().contains(s)) { return s; } else { return GetDefaultInputColorSpace(); @@ -279,7 +279,7 @@ ColorTransform ColorManager::GetCompliantColorSpace(const ColorTransform &transf QString output = transform.output(); - if (!ListAvailableInputColorspaces().contains(output)) { + if (!ListAvailableColorspaces().contains(output)) { output = GetDefaultInputColorSpace(); } @@ -288,7 +288,7 @@ ColorTransform ColorManager::GetCompliantColorSpace(const ColorTransform &transf } } -QStringList ColorManager::ListAvailableInputColorspaces(OCIO::ConstConfigRcPtr config) +QStringList ColorManager::ListAvailableColorspaces(OCIO::ConstConfigRcPtr config) { QStringList spaces; diff --git a/app/render/colormanager.h b/app/render/colormanager.h index e4e6ff1d8..b8eecdda3 100644 --- a/app/render/colormanager.h +++ b/app/render/colormanager.h @@ -66,7 +66,7 @@ public: QStringList ListAvailableLooks(); - QStringList ListAvailableInputColorspaces(); + QStringList ListAvailableColorspaces(); const QString& GetDefaultInputColorSpace() const; @@ -80,7 +80,7 @@ public: ColorTransform GetCompliantColorSpace(const ColorTransform& transform, bool force_display = false); - static QStringList ListAvailableInputColorspaces(OCIO::ConstConfigRcPtr config); + static QStringList ListAvailableColorspaces(OCIO::ConstConfigRcPtr config); void GetDefaultLumaCoefs(float* rgb) const; Color GetDefaultLumaCoefs() const; diff --git a/app/widget/colorwheel/colorspacechooser.cpp b/app/widget/colorwheel/colorspacechooser.cpp index 14a58108c..6a0372566 100644 --- a/app/widget/colorwheel/colorspacechooser.cpp +++ b/app/widget/colorwheel/colorspacechooser.cpp @@ -52,7 +52,7 @@ ColorSpaceChooser::ColorSpaceChooser(ColorManager* color_manager, bool enable_in input_combobox_ = new QComboBox(); layout->addWidget(input_combobox_, row, 1); - QStringList input_spaces = color_manager->ListAvailableInputColorspaces(); + QStringList input_spaces = color_manager->ListAvailableColorspaces(); foreach (const QString& s, input_spaces) { input_combobox_->addItem(s); diff --git a/app/widget/manageddisplay/manageddisplay.cpp b/app/widget/manageddisplay/manageddisplay.cpp index 2208dfeb8..30574363a 100644 --- a/app/widget/manageddisplay/manageddisplay.cpp +++ b/app/widget/manageddisplay/manageddisplay.cpp @@ -72,6 +72,26 @@ const ColorTransform &ManagedDisplayWidget::GetColorTransform() const return color_transform_; } +Menu *ManagedDisplayWidget::GetColorSpaceMenu(QMenu *parent, bool auto_connect) +{ + QStringList colorspaces = color_manager()->ListAvailableColorspaces(); + + Menu* ocio_colorspace_menu = new Menu(tr("Color Space"), parent); + + if (auto_connect) { + connect(ocio_colorspace_menu, &Menu::triggered, this, &ManagedDisplayWidget::MenuColorspaceSelect); + } + + foreach (const QString& c, colorspaces) { + QAction* action = ocio_colorspace_menu->addAction(c); + action->setCheckable(true); + action->setChecked(color_transform_.output() == c); + action->setData(c); + } + + return ocio_colorspace_menu; +} + void ManagedDisplayWidget::ColorConfigChanged() { if (!color_manager_) { @@ -101,6 +121,8 @@ void ManagedDisplayWidget::ShowDefaultContextMenu() Menu m(this); if (color_manager_) { + m.addMenu(GetColorSpaceMenu(&m)); + m.addSeparator(); m.addMenu(GetDisplayMenu(&m)); m.addMenu(GetViewMenu(&m)); m.addMenu(GetLookMenu(&m)); @@ -145,6 +167,11 @@ void ManagedDisplayWidget::MenuLookSelect(QAction *action) SetColorTransform(new_transform); } +void ManagedDisplayWidget::MenuColorspaceSelect(QAction *action) +{ + SetColorTransform(color_manager()->GetCompliantColorSpace(ColorTransform(action->data().toString()))); +} + void ManagedDisplayWidget::SetColorTransform(const ColorTransform &transform) { makeCurrent(); diff --git a/app/widget/manageddisplay/manageddisplay.h b/app/widget/manageddisplay/manageddisplay.h index 697247129..c03d5ea71 100644 --- a/app/widget/manageddisplay/manageddisplay.h +++ b/app/widget/manageddisplay/manageddisplay.h @@ -52,6 +52,11 @@ public: */ const ColorTransform& GetColorTransform() const; + /** + * @brief Get menu that can be used to select the colorspace + */ + Menu* GetColorSpaceMenu(QMenu* parent, bool auto_connect = true); + /** * @brief Get menu that can be used to select the display transform */ @@ -169,6 +174,11 @@ private slots: */ void MenuLookSelect(QAction* action); + /** + * @brief If GetColorSpaceMenu() is called with `auto_connect` set to true, it will be connected to this + */ + void MenuColorspaceSelect(QAction* action); + }; OLIVE_NAMESPACE_EXIT