Krita Source Code Documentation
Loading...
Searching...
No Matches
LutDockerDock Class Reference

#include <lutdocker_dock.h>

+ Inheritance diagram for LutDockerDock:

Public Member Functions

bool canChangeExposureAndGamma () const override
 
qreal currentExposure () const override
 
qreal currentGamma () const override
 
 LutDockerDock ()
 
QString observerName () override
 
void setCanvas (KoCanvasBase *canvas) override
 reimplemented from KoCanvasObserverBase
 
void setCurrentExposure (qreal value) override
 
void setCurrentGamma (qreal value) override
 
void unsetCanvas () override
 
 ~LutDockerDock () override
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 
- Public Member Functions inherited from KisExposureGammaCorrectionInterface
virtual ~KisExposureGammaCorrectionInterface ()
 

Private Slots

void clearLut ()
 
void exposureValueChanged (double exposure)
 
void gammaValueChanged (double exposure)
 
void refillViewCombobox ()
 
void resetOcioConfiguration ()
 
void selectLut ()
 
void selectOcioConfiguration ()
 
void slotColorManagementModeChanged ()
 
void slotImageColorSpaceChanged ()
 
void slotShowBWConfiguration ()
 
void slotUpdateIcons ()
 
void updateDisplaySettings ()
 
void writeControls ()
 

Private Member Functions

void enableControls ()
 
void refillControls ()
 

Private Attributes

BlackWhitePointChooserm_bwPointChooser
 
QPointer< KisCanvas2m_canvas
 
QSharedPointer< KisDisplayFilterm_displayFilter
 
QScopedPointer< KisSignalCompressorWithParam< qreal > > m_exposureCompressor
 
QScopedPointer< KisSignalCompressorWithParam< qreal > > m_gammaCompressor
 
OCIO::ConstConfigRcPtr m_ocioConfig
 
QWidget * m_page
 

Additional Inherited Members

Detailed Description

Definition at line 46 of file lutdocker_dock.h.

Constructor & Destructor Documentation

◆ LutDockerDock()

LutDockerDock::LutDockerDock ( )

Definition at line 81 of file lutdocker_dock.cpp.

82 : QDockWidget(i18n("LUT Management"))
83 , m_canvas(0)
84{
85 using namespace std::placeholders; // For _1
90
91 m_page = new QWidget(this);
92 setupUi(m_page);
93 setWidget(m_page);
94
95 KisConfig cfg(true);
96 m_chkUseOcio->setChecked(cfg.useOcio());
97 connect(m_chkUseOcio, SIGNAL(toggled(bool)), SLOT(updateDisplaySettings()));
98 connect(m_colorManagement, SIGNAL(currentIndexChanged(int)), SLOT(slotColorManagementModeChanged()));
99
100 m_bnSelectConfigurationFile->setToolTip(i18n("Select custom configuration file."));
101 connect(m_bnSelectConfigurationFile,SIGNAL(clicked()), SLOT(selectOcioConfiguration()));
102
103 KisOcioConfiguration ocioOptions = cfg.ocioConfiguration();
104 m_txtConfigurationPath->setText(ocioOptions.configurationPath);
105 m_txtLut->setText(ocioOptions.lutPath);
106
107 m_bnSelectLut->setToolTip(i18n("Select LUT file"));
108 connect(m_bnSelectLut, SIGNAL(clicked()), SLOT(selectLut()));
109 connect(m_bnClearLut, SIGNAL(clicked()), SLOT(clearLut()));
110
111 // See https://groups.google.com/group/ocio-dev/browse_thread/thread/ec95c5f54a74af65 -- maybe need to be reinstated
112 // when people ask for it.
113 m_lblLut->hide();
114 m_txtLut->hide();
115 m_bnSelectLut->hide();
116 m_bnClearLut->hide();
117
118 connect(m_cmbDisplayDevice, SIGNAL(currentIndexChanged(int)), SLOT(refillViewCombobox()));
119
120 m_exposureDoubleWidget->setToolTip(i18n("Select the exposure (stops) for HDR images."));
121 m_exposureDoubleWidget->setRange(-10.0, 10.0, 2);
122 m_exposureDoubleWidget->setValue(0.0);
123 m_exposureDoubleWidget->setSingleStep(0.25);
124
125 connect(m_exposureDoubleWidget, QOverload<double>::of(&KisDoubleSliderSpinBox::valueChanged),
126 [this](double value){ m_exposureCompressor->start(value); });
127
128 // Gamma needs to be exponential (gamma *= 1.1f, gamma /= 1.1f as steps)
129
130 m_gammaDoubleWidget->setToolTip(i18n("Select the amount of gamma modification for display. This does not affect the pixels of your image."));
131 m_gammaDoubleWidget->setRange(0.1, 5.0, 2);
132 m_gammaDoubleWidget->setValue(1.0);
133 m_gammaDoubleWidget->setSingleStep(0.1);
134
135 connect(m_gammaDoubleWidget, QOverload<double>::of(&KisDoubleSliderSpinBox::valueChanged),
136 [this](double value){ m_gammaCompressor->start(value); });
137
139
140 connect(m_bwPointChooser, SIGNAL(sigBlackPointChanged(qreal)), SLOT(updateDisplaySettings()));
141 connect(m_bwPointChooser, SIGNAL(sigWhitePointChanged(qreal)), SLOT(updateDisplaySettings()));
142
143 connect(m_btnConvertCurrentColor, SIGNAL(toggled(bool)), SLOT(updateDisplaySettings()));
144 connect(m_btmShowBWConfiguration, SIGNAL(clicked()), SLOT(slotShowBWConfiguration()));
146
147 connect(m_cmbInputColorSpace, SIGNAL(currentIndexChanged(int)), SLOT(updateDisplaySettings()));
148 connect(m_cmbDisplayDevice, SIGNAL(currentIndexChanged(int)), SLOT(updateDisplaySettings()));
149 connect(m_cmbView, SIGNAL(currentIndexChanged(int)), SLOT(updateDisplaySettings()));
150 connect(m_cmbLook, SIGNAL(currentIndexChanged(int)), SLOT(updateDisplaySettings()));
151 connect(m_cmbComponents, SIGNAL(currentIndexChanged(int)), SLOT(updateDisplaySettings()));
152
153 connect(KisConfigNotifier::instance(), SIGNAL(configChanged()), SLOT(resetOcioConfiguration()));
154
156}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
static KisConfigNotifier * instance()
void exposureValueChanged(double exposure)
void resetOcioConfiguration()
BlackWhitePointChooser * m_bwPointChooser
QPointer< KisCanvas2 > m_canvas
QScopedPointer< KisSignalCompressorWithParam< qreal > > m_exposureCompressor
void updateDisplaySettings()
QScopedPointer< KisSignalCompressorWithParam< qreal > > m_gammaCompressor
QWidget * m_page
void selectOcioConfiguration()
void slotShowBWConfiguration()
void gammaValueChanged(double exposure)
void slotColorManagementModeChanged()

References clearLut(), KisOcioConfiguration::configurationPath, connect(), exposureValueChanged(), gammaValueChanged(), KisConfigNotifier::instance(), KisOcioConfiguration::lutPath, m_bwPointChooser, m_exposureCompressor, m_gammaCompressor, m_page, KisConfig::ocioConfiguration(), refillViewCombobox(), resetOcioConfiguration(), selectLut(), selectOcioConfiguration(), slotColorManagementModeChanged(), slotShowBWConfiguration(), slotUpdateIcons(), updateDisplaySettings(), KisConfig::useOcio(), and value().

◆ ~LutDockerDock()

LutDockerDock::~LutDockerDock ( )
override

Definition at line 158 of file lutdocker_dock.cpp.

159{
160}

Member Function Documentation

◆ canChangeExposureAndGamma()

bool LutDockerDock::canChangeExposureAndGamma ( ) const
overridevirtual

Implements KisExposureGammaCorrectionInterface.

Definition at line 221 of file lutdocker_dock.cpp.

222{
223 if (!m_chkUseOcio->isChecked() || !m_ocioConfig) return false;
224
225 const bool externalColorManagementEnabled =
226 m_colorManagement->currentIndex() != (int)KisOcioConfiguration::INTERNAL;
227
228
229#ifdef HAVE_HDR
230 KisSurfaceColorSpaceWrapper currentColorSpace =
232 KisOpenGLModeProber::instance()->surfaceformatInUse().colorSpace());
233#endif
234
235 const bool exposureManagementEnabled =
236 externalColorManagementEnabled
237#ifdef HAVE_HDR
239#endif
240 ;
241
242 return exposureManagementEnabled;
243}
static KisOpenGLModeProber * instance()
static KisSurfaceColorSpaceWrapper fromQtColorSpace(const QColorSpace &colorSpace)
OCIO::ConstConfigRcPtr m_ocioConfig

References KisSurfaceColorSpaceWrapper::fromQtColorSpace(), KisOpenGLModeProber::instance(), KisOcioConfiguration::INTERNAL, m_ocioConfig, and KisSurfaceColorSpaceWrapper::scRGBColorSpace.

◆ clearLut

void LutDockerDock::clearLut ( )
privateslot

Definition at line 624 of file lutdocker_dock.cpp.

625{
626 m_txtLut->clear();
628}

References updateDisplaySettings().

◆ currentExposure()

qreal LutDockerDock::currentExposure ( ) const
overridevirtual

Implements KisExposureGammaCorrectionInterface.

Definition at line 245 of file lutdocker_dock.cpp.

246{
247 if (!m_displayFilter) return 0.0;
248 OcioDisplayFilter *displayFilter = qobject_cast<OcioDisplayFilter*>(m_displayFilter.data());
249 return canChangeExposureAndGamma() ? displayFilter->exposure : 0.0;
250}
QSharedPointer< KisDisplayFilter > m_displayFilter
bool canChangeExposureAndGamma() const override

References canChangeExposureAndGamma(), OcioDisplayFilter::exposure, and m_displayFilter.

◆ currentGamma()

qreal LutDockerDock::currentGamma ( ) const
overridevirtual

Implements KisExposureGammaCorrectionInterface.

Definition at line 264 of file lutdocker_dock.cpp.

265{
266 if (!m_displayFilter) return 1.0;
267 OcioDisplayFilter *displayFilter = qobject_cast<OcioDisplayFilter*>(m_displayFilter.data());
268 return canChangeExposureAndGamma() ? displayFilter->gamma : 1.0;
269}

References canChangeExposureAndGamma(), OcioDisplayFilter::gamma, and m_displayFilter.

◆ enableControls()

void LutDockerDock::enableControls ( )
private

Definition at line 306 of file lutdocker_dock.cpp.

307{
308 bool canDoExternalColorCorrection = false;
309
310 if (m_canvas) {
311 KisImageSP image = m_canvas->viewManager()->image();
312 canDoExternalColorCorrection =
314 }
315
316 if (!canDoExternalColorCorrection) {
317 KisSignalsBlocker colorManagementBlocker(m_colorManagement);
318 Q_UNUSED(colorManagementBlocker);
319 m_colorManagement->setCurrentIndex((int) KisOcioConfiguration::INTERNAL);
320 }
321
322 const bool ocioEnabled = m_chkUseOcio->isChecked();
323 m_colorManagement->setEnabled(ocioEnabled && canDoExternalColorCorrection);
324
325 const bool externalColorManagementEnabled =
326 m_colorManagement->currentIndex() != (int)KisOcioConfiguration::INTERNAL;
327
328 m_lblInputColorSpace->setEnabled(ocioEnabled && externalColorManagementEnabled);
329 m_cmbInputColorSpace->setEnabled(ocioEnabled && externalColorManagementEnabled);
330 m_lblDisplayDevice->setEnabled(ocioEnabled && externalColorManagementEnabled);
331 m_cmbDisplayDevice->setEnabled(ocioEnabled && externalColorManagementEnabled);
332 m_lblView->setEnabled(ocioEnabled && externalColorManagementEnabled);
333 m_cmbView->setEnabled(ocioEnabled && externalColorManagementEnabled);
334 m_lblLook->setEnabled(ocioEnabled && externalColorManagementEnabled);
335 m_cmbLook->setEnabled(ocioEnabled && externalColorManagementEnabled);
336
337 const bool exposureManagementEnabled = canChangeExposureAndGamma();
338
339 m_exposureDoubleWidget->setEnabled(exposureManagementEnabled);
340 m_gammaDoubleWidget->setEnabled(exposureManagementEnabled);
341 m_lblExposure->setEnabled(exposureManagementEnabled);
342 m_lblGamma->setEnabled(exposureManagementEnabled);
343
344 QString exposureToolTip;
345
346 if (!exposureManagementEnabled) {
347 exposureToolTip = i18nc("@info:tooltip", "Exposure and Gamma corrections are disabled in Internal mode. Switch to OCIO mode to use them");
348 }
349 m_exposureDoubleWidget->setToolTip(exposureToolTip);
350 m_gammaDoubleWidget->setToolTip(exposureToolTip);
351 m_lblExposure->setToolTip(exposureToolTip);
352 m_lblGamma->setToolTip(exposureToolTip);
353
354 bool enableConfigPath = m_colorManagement->currentIndex() == (int) KisOcioConfiguration::OCIO_CONFIG;
355
356 lblConfig->setEnabled(ocioEnabled && enableConfigPath);
357 m_txtConfigurationPath->setEnabled(ocioEnabled && enableConfigPath);
358 m_bnSelectConfigurationFile->setEnabled(ocioEnabled && enableConfigPath);
359}
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
const KoColorSpace * colorSpace() const
virtual KoID colorModelId() const =0

References canChangeExposureAndGamma(), KoColorSpace::colorModelId(), KisImage::colorSpace(), KisOcioConfiguration::INTERNAL, m_canvas, KisOcioConfiguration::OCIO_CONFIG, and RGBAColorModelID.

◆ exposureValueChanged

void LutDockerDock::exposureValueChanged ( double exposure)
privateslot

Definition at line 290 of file lutdocker_dock.cpp.

291{
292 if (m_canvas) {
293 m_canvas->viewManager()->canvasResourceProvider()->setHDRExposure(exposure);
295 }
296}

References m_canvas, and updateDisplaySettings().

◆ gammaValueChanged

void LutDockerDock::gammaValueChanged ( double exposure)
privateslot

Definition at line 298 of file lutdocker_dock.cpp.

299{
300 if (m_canvas) {
301 m_canvas->viewManager()->canvasResourceProvider()->setHDRGamma(gamma);
303 }
304}

References m_canvas, and updateDisplaySettings().

◆ observerName()

QString LutDockerDock::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 54 of file lutdocker_dock.h.

55 {
56 return "LutDockerDock";
57 }

◆ refillControls()

void LutDockerDock::refillControls ( )
private

Definition at line 483 of file lutdocker_dock.cpp.

484{
485 if (!m_canvas) return;
486 if (!m_canvas->viewManager()) return;
487 if (!m_canvas->viewManager()->canvasResourceProvider()) return;
488 if (!m_canvas->viewManager()->image()) return;
489
491
492 KisConfig cfg(true);
493 KisOcioConfiguration ocioOptions = cfg.ocioConfiguration();
494
495 { // Color Management Mode
496 KisSignalsBlocker modeBlocker(m_colorManagement);
497 m_colorManagement->setCurrentIndex((int) ocioOptions.mode);
498 }
499
500 { // Exposure
501 KisSignalsBlocker exposureBlocker(m_exposureDoubleWidget);
502 m_exposureDoubleWidget->setValue(m_canvas->viewManager()->canvasResourceProvider()->HDRExposure());
503 }
504
505 { // Gamma
506 KisSignalsBlocker gammaBlocker(m_gammaDoubleWidget);
507 m_gammaDoubleWidget->setValue(m_canvas->viewManager()->canvasResourceProvider()->HDRGamma());
508 }
509
510 { // Components
511 const KoColorSpace *cs = m_canvas->viewManager()->image()->colorSpace();
512
513 QStringList itemsList;
514 itemsList << i18n("Luminance");
515 itemsList << i18n("All Channels");
516 Q_FOREACH (KoChannelInfo *channel, KoChannelInfo::displayOrderSorted(cs->channels())) {
517 itemsList << channel->name();
518 }
519
520 if (m_cmbComponents->originalTexts() != itemsList) {
521 KisSignalsBlocker componentsBlocker(m_cmbComponents);
522 m_cmbComponents->resetOriginalTexts(itemsList);
523 m_cmbComponents->setCurrentIndex(1); // All Channels...
524 }
525 }
526
527 { // Input Color Space
528 QStringList itemsList;
529 int numOcioColorSpaces = m_ocioConfig->getNumColorSpaces();
530 for(int i = 0; i < numOcioColorSpaces; ++i) {
531 const char *cs = m_ocioConfig->getColorSpaceNameByIndex(i);
532 OCIO::ConstColorSpaceRcPtr colorSpace = m_ocioConfig->getColorSpace(cs);
533 itemsList << QString::fromUtf8(colorSpace->getName());
534 }
535
536 KisSignalsBlocker inputCSBlocker(m_cmbInputColorSpace);
537
538 if (itemsList != m_cmbInputColorSpace->originalTexts()) {
539 m_cmbInputColorSpace->resetOriginalTexts(itemsList);
540 }
541
542 m_cmbInputColorSpace->setCurrent(ocioOptions.inputColorSpace);
543 }
544
545 { // Display Device
546 QStringList itemsList;
547 int numDisplays = m_ocioConfig->getNumDisplays();
548 for (int i = 0; i < numDisplays; ++i) {
549 itemsList << QString::fromUtf8(m_ocioConfig->getDisplay(i));
550 }
551
552 KisSignalsBlocker displayDeviceLocker(m_cmbDisplayDevice);
553
554 if (itemsList != m_cmbDisplayDevice->originalTexts()) {
555 m_cmbDisplayDevice->resetOriginalTexts(itemsList);
556 }
557
558 m_cmbDisplayDevice->setCurrent(ocioOptions.displayDevice);
559 }
560
561 { // Lock Current Color
562 KisSignalsBlocker locker(m_btnConvertCurrentColor);
563 m_btnConvertCurrentColor->setChecked(cfg.ocioLockColorVisualRepresentation());
564 }
565
567
568 {
569 QStringList itemsList;
570 int numLooks = m_ocioConfig->getNumLooks();
571 for (int k = 0; k < numLooks; k++) {
572 itemsList << QString::fromUtf8(m_ocioConfig->getLookNameByIndex(k));
573 }
574 itemsList << i18nc("Item to indicate no look transform being selected","None");
575
576 KisSignalsBlocker LookComboLocker(m_cmbLook);
577
578 if (itemsList != m_cmbLook->originalTexts()) {
579 m_cmbLook->resetOriginalTexts(itemsList);
580 }
581
582 m_cmbLook->setCurrent(ocioOptions.look);
583 }
585}
QString name() const
static QList< KoChannelInfo * > displayOrderSorted(const QList< KoChannelInfo * > &channels)
QList< KoChannelInfo * > channels
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75

References KoColorSpace::channels, KisOcioConfiguration::displayDevice, KoChannelInfo::displayOrderSorted(), KisOcioConfiguration::inputColorSpace, KIS_ASSERT_RECOVER_RETURN, KisOcioConfiguration::look, m_canvas, m_ocioConfig, KisOcioConfiguration::mode, KoChannelInfo::name(), KisConfig::ocioConfiguration(), KisConfig::ocioLockColorVisualRepresentation(), refillViewCombobox(), and updateDisplaySettings().

◆ refillViewCombobox

void LutDockerDock::refillViewCombobox ( )
privateslot

Definition at line 587 of file lutdocker_dock.cpp.

588{
589 KisSignalsBlocker viewComboLocker(m_cmbView);
590 m_cmbView->clear();
591
592 if (!m_canvas || !m_ocioConfig) return;
593
594 const char *display = m_ocioConfig->getDisplay(m_cmbDisplayDevice->currentIndex());
595 int numViews = m_ocioConfig->getNumViews(display);
596
597 for (int j = 0; j < numViews; ++j) {
598 m_cmbView->addSqueezedItem(QString::fromUtf8(m_ocioConfig->getView(display, j)));
599 }
600
601 KisConfig cfg(true);
602 KisOcioConfiguration ocioOptions = cfg.ocioConfiguration();
603 m_cmbView->setCurrent(ocioOptions.displayView);
604}

References KisOcioConfiguration::displayView, m_canvas, m_ocioConfig, and KisConfig::ocioConfiguration().

◆ resetOcioConfiguration

void LutDockerDock::resetOcioConfiguration ( )
privateslot

Definition at line 449 of file lutdocker_dock.cpp.

450{
451 KisConfig cfg(true);
452 KisOcioConfiguration ocioOptions = cfg.ocioConfiguration();
453 m_ocioConfig.reset();
454
455 try {
456 if (ocioOptions.mode == KisOcioConfiguration::INTERNAL) {
458 } else if (ocioOptions.mode == KisOcioConfiguration::OCIO_ENVIRONMENT) {
459 m_ocioConfig = OCIO::Config::CreateFromEnv();
460 }
461 else if (ocioOptions.mode == KisOcioConfiguration::OCIO_CONFIG) {
462 QString configFile = ocioOptions.configurationPath;
463
464 if (QFile::exists(configFile)) {
465 m_ocioConfig = OCIO::Config::CreateFromFile(configFile.toUtf8());
466 } else {
468 }
469 }
470 if (m_ocioConfig) {
471 OCIO::SetCurrentConfig(m_ocioConfig);
472 }
473 } catch (OCIO::Exception &exception) {
474 errKrita << "OpenColorIO Error:" << exception.what() << "Cannot create the LUT docker";
475 }
476
477
478 if (m_ocioConfig) {
480 }
481}
#define errKrita
Definition kis_debug.h:107
OCIO::ConstConfigRcPtr defaultRawProfile()

References KisOcioConfiguration::configurationPath, defaultRawProfile(), errKrita, KisOcioConfiguration::INTERNAL, m_ocioConfig, KisOcioConfiguration::mode, KisOcioConfiguration::OCIO_CONFIG, KisOcioConfiguration::OCIO_ENVIRONMENT, KisConfig::ocioConfiguration(), and refillControls().

◆ selectLut

void LutDockerDock::selectLut ( )
privateslot

Definition at line 606 of file lutdocker_dock.cpp.

607{
608 QString filename = m_txtLut->text();
609
610 KoFileDialog dialog(this, KoFileDialog::OpenFile, "lutdocker");
611 dialog.setCaption(i18n("Select LUT file"));
612 dialog.setDefaultDir(QDir::cleanPath(filename));
613 dialog.setMimeTypeFilters(QStringList() << "application/octet-stream", "application/octet-stream");
614 filename = dialog.filename();
615
616 QFile f(filename);
617 if (f.exists() && filename != m_txtLut->text()) {
618 m_txtLut->setText(filename);
621 }
622}
QList< QString > QStringList

References KoFileDialog::OpenFile, updateDisplaySettings(), and writeControls().

◆ selectOcioConfiguration

void LutDockerDock::selectOcioConfiguration ( )
privateslot

Definition at line 432 of file lutdocker_dock.cpp.

433{
434 QString filename = m_txtConfigurationPath->text();
435
436 KoFileDialog dialog(this, KoFileDialog::OpenFile, "lutdocker");
437 dialog.setCaption(i18n("Select OpenColorIO Configuration"));
438 dialog.setDefaultDir(QDir::cleanPath(filename.isEmpty() ? QDir::homePath() : filename));
439 dialog.setMimeTypeFilters(QStringList() << "application/x-opencolorio-configuration");
440 filename = dialog.filename();
441 QFile f(filename);
442 if (f.exists()) {
443 m_txtConfigurationPath->setText(filename);
446 }
447}

References KoFileDialog::OpenFile, resetOcioConfiguration(), and writeControls().

◆ setCanvas()

void LutDockerDock::setCanvas ( KoCanvasBase * canvas)
overridevirtual

reimplemented from KoCanvasObserverBase

Implements KoCanvasObserverBase.

Definition at line 162 of file lutdocker_dock.cpp.

163{
164 if (m_canvas) {
165 m_canvas->disconnect(this);
166 }
167
168 setEnabled(_canvas != 0);
169
170 if (KisCanvas2* canvas = dynamic_cast<KisCanvas2*>(_canvas)) {
171 m_canvas = canvas;
172 if (m_canvas) {
173 if (!m_canvas->displayFilter()) {
176 }
177 else {
178 m_displayFilter = m_canvas->displayFilter();
179 OcioDisplayFilter *displayFilter = qobject_cast<OcioDisplayFilter*>(m_displayFilter.data());
180 Q_ASSERT(displayFilter);
181 m_ocioConfig = displayFilter->config;
182 KisSignalsBlocker exposureBlocker(m_exposureDoubleWidget);
183 m_exposureDoubleWidget->setValue(displayFilter->exposure);
184 KisSignalsBlocker gammaBlocker(m_gammaDoubleWidget);
185 m_gammaDoubleWidget->setValue(displayFilter->gamma);
186 KisSignalsBlocker componentsBlocker(m_cmbComponents);
187 m_cmbComponents->setCurrentIndex((int)displayFilter->swizzle);
191 }
192
193 connect(m_canvas->image(), SIGNAL(sigColorSpaceChanged(const KoColorSpace*)), SLOT(slotImageColorSpaceChanged()), Qt::UniqueConnection);
194 connect(m_canvas->viewManager()->mainWindow(), SIGNAL(themeChanged()), SLOT(slotUpdateIcons()), Qt::UniqueConnection);
195
196 }
197 }
198}
void slotImageColorSpaceChanged()
OCIO::ConstConfigRcPtr config
OCIO_CHANNEL_SWIZZLE swizzle

References OcioDisplayFilter::blackPoint, OcioDisplayFilter::config, connect(), OcioDisplayFilter::exposure, OcioDisplayFilter::gamma, m_bwPointChooser, m_canvas, m_displayFilter, m_ocioConfig, resetOcioConfiguration(), BlackWhitePointChooser::setBlackPoint(), BlackWhitePointChooser::setWhitePoint(), slotImageColorSpaceChanged(), slotUpdateIcons(), OcioDisplayFilter::swizzle, updateDisplaySettings(), and OcioDisplayFilter::whitePoint.

◆ setCurrentExposure()

void LutDockerDock::setCurrentExposure ( qreal value)
overridevirtual

Implements KisExposureGammaCorrectionInterface.

Definition at line 252 of file lutdocker_dock.cpp.

253{
254 if (!canChangeExposureAndGamma()) return;
255 m_exposureDoubleWidget->setValue(value);
256 if(m_canvas) {
257 m_canvas->viewManager()->showFloatingMessage(
258 i18nc("floating message about exposure", "Exposure: %1",
259 KritaUtils::prettyFormatReal(m_exposureDoubleWidget->value())),
260 QIcon(), 500, KisFloatingMessage::Low);
261 }
262}
QString KRITAIMAGE_EXPORT prettyFormatReal(qreal value)

References canChangeExposureAndGamma(), KisFloatingMessage::Low, m_canvas, KritaUtils::prettyFormatReal(), and value().

◆ setCurrentGamma()

void LutDockerDock::setCurrentGamma ( qreal value)
overridevirtual

Implements KisExposureGammaCorrectionInterface.

Definition at line 271 of file lutdocker_dock.cpp.

272{
273 if (!canChangeExposureAndGamma()) return;
274 m_gammaDoubleWidget->setValue(value);
275 if (m_canvas) {
276 m_canvas->viewManager()->showFloatingMessage(
277 i18nc("floating message about gamma", "Gamma: %1",
278 KritaUtils::prettyFormatReal(m_gammaDoubleWidget->value())),
279 QIcon(), 500, KisFloatingMessage::Low);
280 }
281}

References canChangeExposureAndGamma(), KisFloatingMessage::Low, m_canvas, KritaUtils::prettyFormatReal(), and value().

◆ slotColorManagementModeChanged

void LutDockerDock::slotColorManagementModeChanged ( )
privateslot

Definition at line 425 of file lutdocker_dock.cpp.

426{
430}

References enableControls(), resetOcioConfiguration(), and writeControls().

◆ slotImageColorSpaceChanged

void LutDockerDock::slotImageColorSpaceChanged ( )
privateslot

Definition at line 283 of file lutdocker_dock.cpp.

284{
288}

References enableControls(), resetOcioConfiguration(), and writeControls().

◆ slotShowBWConfiguration

void LutDockerDock::slotShowBWConfiguration ( )
privateslot

Definition at line 216 of file lutdocker_dock.cpp.

217{
218 m_bwPointChooser->showPopup(m_btmShowBWConfiguration->mapToGlobal(QPoint()));
219}
void showPopup(const QPoint &basePoint)

References m_bwPointChooser, and BlackWhitePointChooser::showPopup().

◆ slotUpdateIcons

void LutDockerDock::slotUpdateIcons ( )
privateslot

Definition at line 207 of file lutdocker_dock.cpp.

208{
209 m_btnConvertCurrentColor->setIcon(KisIconUtils::loadIcon("krita_tool_freehand"));
210 m_btmShowBWConfiguration->setIcon(KisIconUtils::loadIcon("settings-button"));
211 m_lblOcioVersion->setText(QString("OCIO: %1 | %2").arg(OCIO_VERSION_FULL_STR, KisOpenGL::currentDriver()));
212 m_lblOcioVersion->setWordWrap(true);
213 m_lblOcioVersion->setEnabled(false);
214}
static QString currentDriver()
#define OCIO_VERSION_FULL_STR
QIcon loadIcon(const QString &name)

References KisOpenGL::currentDriver(), KisIconUtils::loadIcon(), and OCIO_VERSION_FULL_STR.

◆ unsetCanvas()

void LutDockerDock::unsetCanvas ( )
overridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 200 of file lutdocker_dock.cpp.

201{
202 m_canvas = 0;
203 setEnabled(false);
205}

References m_canvas, and m_displayFilter.

◆ updateDisplaySettings

void LutDockerDock::updateDisplaySettings ( )
privateslot

Definition at line 361 of file lutdocker_dock.cpp.

362{
363 if (!m_canvas || !m_canvas->viewManager() || !m_canvas->viewManager()->image()) {
364 return;
365 }
366
369
370 if (m_chkUseOcio->isChecked() && m_ocioConfig) {
371 KIS_SAFE_ASSERT_RECOVER_NOOP(!m_canvas->displayFilter() ||
372 m_canvas->displayFilter() == m_displayFilter);
373
374 if (!m_displayFilter) {
376 m_canvas->displayFilter() ?
377 m_canvas->displayFilter() :
379 }
380
381 OcioDisplayFilter *displayFilter = qobject_cast<OcioDisplayFilter*>(m_displayFilter.data());
382 displayFilter->config = m_ocioConfig;
383 displayFilter->inputColorSpaceName = m_ocioConfig->getColorSpaceNameByIndex(m_cmbInputColorSpace->currentIndex());
384 displayFilter->displayDevice = m_ocioConfig->getDisplay(m_cmbDisplayDevice->currentIndex());
385 displayFilter->view = m_ocioConfig->getView(displayFilter->displayDevice, m_cmbView->currentIndex());
386 displayFilter->look = m_ocioConfig->getLookNameByIndex(m_cmbLook->currentIndex());
387 displayFilter->gamma = m_gammaDoubleWidget->isEnabled() ? m_gammaDoubleWidget->value() : 1.0;
388 displayFilter->exposure = m_exposureDoubleWidget->isEnabled() ? m_exposureDoubleWidget->value() : 0.0;
389 displayFilter->swizzle = (OCIO_CHANNEL_SWIZZLE)m_cmbComponents->currentIndex();
390
391 displayFilter->blackPoint = m_bwPointChooser->blackPoint();
392 displayFilter->whitePoint = m_bwPointChooser->whitePoint();
393
394 displayFilter->forceInternalColorManagement =
395 m_colorManagement->currentIndex() == (int)KisOcioConfiguration::INTERNAL;
396
397 displayFilter->setLockCurrentColorVisualRepresentation(m_btnConvertCurrentColor->isChecked());
398
399 displayFilter->updateProcessor();
400 m_canvas->setDisplayFilter(m_displayFilter);
401 }
402 else {
403 m_canvas->setDisplayFilter(QSharedPointer<KisDisplayFilter>(0));
404 }
405 m_canvas->updateCanvas();
406}
void setLockCurrentColorVisualRepresentation(bool value)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References BlackWhitePointChooser::blackPoint(), OcioDisplayFilter::blackPoint, OcioDisplayFilter::config, OcioDisplayFilter::displayDevice, enableControls(), OcioDisplayFilter::exposure, OcioDisplayFilter::forceInternalColorManagement, OcioDisplayFilter::gamma, OcioDisplayFilter::inputColorSpaceName, KisOcioConfiguration::INTERNAL, KIS_SAFE_ASSERT_RECOVER_NOOP, OcioDisplayFilter::look, m_bwPointChooser, m_canvas, m_displayFilter, m_ocioConfig, OcioDisplayFilter::setLockCurrentColorVisualRepresentation(), OcioDisplayFilter::swizzle, OcioDisplayFilter::updateProcessor(), OcioDisplayFilter::view, BlackWhitePointChooser::whitePoint(), OcioDisplayFilter::whitePoint, and writeControls().

◆ writeControls

void LutDockerDock::writeControls ( )
privateslot

Definition at line 408 of file lutdocker_dock.cpp.

409{
410 KisOcioConfiguration ocioOptions;
411 ocioOptions.mode = (KisOcioConfiguration::Mode)m_colorManagement->currentIndex();
412 ocioOptions.configurationPath = m_txtConfigurationPath->text();
413 ocioOptions.lutPath = m_txtLut->text();
414 ocioOptions.inputColorSpace = m_cmbInputColorSpace->currentUnsqueezedText();
415 ocioOptions.displayDevice = m_cmbDisplayDevice->currentUnsqueezedText();
416 ocioOptions.displayView = m_cmbView->currentUnsqueezedText();
417 ocioOptions.look = m_cmbLook->currentUnsqueezedText();
418
419 KisConfig cfg(false);
420 cfg.setUseOcio(m_chkUseOcio->isChecked());
421 cfg.setOcioConfiguration(ocioOptions);
422 cfg.setOcioLockColorVisualRepresentation(m_btnConvertCurrentColor->isChecked());
423}

References KisOcioConfiguration::configurationPath, KisOcioConfiguration::displayDevice, KisOcioConfiguration::displayView, KisOcioConfiguration::inputColorSpace, KisOcioConfiguration::look, KisOcioConfiguration::lutPath, KisOcioConfiguration::mode, KisConfig::setOcioConfiguration(), KisConfig::setOcioLockColorVisualRepresentation(), and KisConfig::setUseOcio().

Member Data Documentation

◆ m_bwPointChooser

BlackWhitePointChooser* LutDockerDock::m_bwPointChooser
private

Definition at line 105 of file lutdocker_dock.h.

◆ m_canvas

QPointer<KisCanvas2> LutDockerDock::m_canvas
private

Definition at line 98 of file lutdocker_dock.h.

◆ m_displayFilter

QSharedPointer<KisDisplayFilter> LutDockerDock::m_displayFilter
private

Definition at line 100 of file lutdocker_dock.h.

◆ m_exposureCompressor

QScopedPointer<KisSignalCompressorWithParam<qreal> > LutDockerDock::m_exposureCompressor
private

Definition at line 102 of file lutdocker_dock.h.

◆ m_gammaCompressor

QScopedPointer<KisSignalCompressorWithParam<qreal> > LutDockerDock::m_gammaCompressor
private

Definition at line 103 of file lutdocker_dock.h.

◆ m_ocioConfig

OCIO::ConstConfigRcPtr LutDockerDock::m_ocioConfig
private

Definition at line 99 of file lutdocker_dock.h.

◆ m_page

QWidget* LutDockerDock::m_page
private

Definition at line 96 of file lutdocker_dock.h.


The documentation for this class was generated from the following files: