From 006d1f6a1473f870e3999de7d35425ffdcb1aabd Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Sat, 21 Oct 2023 21:35:14 +0200 Subject: [PATCH] outputconfigurationstore: store icc profile paths --- src/backends/drm/drm_output.cpp | 1 + src/core/output.cpp | 6 ++++++ src/core/output.h | 2 ++ src/outputconfigurationstore.cpp | 9 +++++++++ src/outputconfigurationstore.h | 1 + 5 files changed, 19 insertions(+) diff --git a/src/backends/drm/drm_output.cpp b/src/backends/drm/drm_output.cpp index bb3690eab6..8cd19dd197 100644 --- a/src/backends/drm/drm_output.cpp +++ b/src/backends/drm/drm_output.cpp @@ -346,6 +346,7 @@ void DrmOutput::applyQueuedChanges(const std::shared_ptr &props next.wideColorGamut = props->wideColorGamut.value_or(m_state.wideColorGamut); next.autoRotatePolicy = props->autoRotationPolicy.value_or(m_state.autoRotatePolicy); if (props->iccProfilePath) { + next.iccProfilePath = *props->iccProfilePath; next.iccProfile = IccProfile::load(*props->iccProfilePath); m_pipeline->setIccProfile(next.iccProfile); } diff --git a/src/core/output.cpp b/src/core/output.cpp index 1b9e2dc82c..41d92d954e 100644 --- a/src/core/output.cpp +++ b/src/core/output.cpp @@ -335,6 +335,7 @@ void Output::applyChanges(const OutputConfiguration &config) next.scale = props->scale.value_or(m_state.scale); next.rgbRange = props->rgbRange.value_or(m_state.rgbRange); next.autoRotatePolicy = props->autoRotationPolicy.value_or(m_state.autoRotatePolicy); + next.iccProfilePath = props->iccProfilePath.value_or(m_state.iccProfilePath); if (props->iccProfilePath) { next.iccProfile = IccProfile::load(*props->iccProfilePath); } @@ -570,6 +571,11 @@ std::shared_ptr Output::iccProfile() const return m_state.iccProfile; } +QString Output::iccProfilePath() const +{ + return m_state.iccProfilePath; +} + bool Output::updateCursorLayer() { return false; diff --git a/src/core/output.h b/src/core/output.h index ed95f122cc..05ae7a924e 100644 --- a/src/core/output.h +++ b/src/core/output.h @@ -315,6 +315,7 @@ public: uint32_t sdrBrightness() const; AutoRotationPolicy autoRotationPolicy() const; std::shared_ptr iccProfile() const; + QString iccProfilePath() const; virtual bool setGammaRamp(const std::shared_ptr &transformation); virtual bool setChannelFactors(const QVector3D &rgb); @@ -415,6 +416,7 @@ protected: bool highDynamicRange = false; uint32_t sdrBrightness = 200; AutoRotationPolicy autoRotatePolicy = AutoRotationPolicy::InTabletMode; + QString iccProfilePath; std::shared_ptr iccProfile; }; diff --git a/src/outputconfigurationstore.cpp b/src/outputconfigurationstore.cpp index 810a13c3b0..6052228724 100644 --- a/src/outputconfigurationstore.cpp +++ b/src/outputconfigurationstore.cpp @@ -195,6 +195,7 @@ void OutputConfigurationStore::storeConfig(const QList &allOutputs, bo .sdrBrightness = changeSet->sdrBrightness.value_or(output->sdrBrightness()), .wideColorGamut = changeSet->wideColorGamut.value_or(output->wideColorGamut()), .autoRotation = changeSet->autoRotationPolicy.value_or(output->autoRotationPolicy()), + .iccProfilePath = changeSet->iccProfilePath.value_or(output->iccProfilePath()), }; *outputIt = SetupState{ .outputIndex = *outputIndex, @@ -221,6 +222,7 @@ void OutputConfigurationStore::storeConfig(const QList &allOutputs, bo .sdrBrightness = output->sdrBrightness(), .wideColorGamut = output->wideColorGamut(), .autoRotation = output->autoRotationPolicy(), + .iccProfilePath = output->iccProfilePath(), }; *outputIt = SetupState{ .outputIndex = *outputIndex, @@ -262,6 +264,7 @@ std::pair> OutputConfigurationStore::setupT .sdrBrightness = state.sdrBrightness, .wideColorGamut = state.wideColorGamut, .autoRotationPolicy = state.autoRotation, + .iccProfilePath = state.iccProfilePath, }; if (setupState.enabled) { priorities.push_back(std::make_pair(output, setupState.priority)); @@ -614,6 +617,9 @@ void OutputConfigurationStore::load() state.autoRotation = Output::AutoRotationPolicy::Always; } } + if (const auto it = data.find("iccProfilePath"); it != data.end()) { + state.iccProfilePath = it->toString(); + } outputDatas.push_back(state); } @@ -800,6 +806,9 @@ void OutputConfigurationStore::save() break; } } + if (output.iccProfilePath) { + o["iccProfilePath"] = *output.iccProfilePath; + } outputsData.append(o); } outputs["data"] = outputsData; diff --git a/src/outputconfigurationstore.h b/src/outputconfigurationstore.h index 125b9531df..408a34b767 100644 --- a/src/outputconfigurationstore.h +++ b/src/outputconfigurationstore.h @@ -73,6 +73,7 @@ private: std::optional sdrBrightness; std::optional wideColorGamut; std::optional autoRotation; + std::optional iccProfilePath; }; struct SetupState {