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

#include <kis_dlg_preferences.h>

+ Inheritance diagram for ColorSettingsTab:

Public Types

using CanvasSurfaceBitDepthMode = KisConfig::CanvasSurfaceBitDepthMode
 
using CanvasSurfaceMode = KisConfig::CanvasSurfaceMode
 
enum  PreferredSpaceType { PreferredSpace , MasteringSpace }
 

Public Member Functions

 ColorSettingsTab (QWidget *parent=0, const char *name=0)
 
void setDefault ()
 

Public Attributes

QPointer< KisSqueezedComboBoxm_canvasSurfaceBitDepth
 
QPointer< KisSqueezedComboBoxm_canvasSurfaceColorSpace
 
QPointer< QCheckBox > m_chkEnableCanvasColorSpaceManagement
 
bool m_colorManagedByOS {false}
 
QList< QLabel * > m_monitorProfileLabels
 
QList< KisSqueezedComboBox * > m_monitorProfileWidgets
 
WdgColorSettingsm_page
 
QButtonGroup m_pasteBehaviourGroup
 
QPointer< KisCIETongueWidgetm_preferredSpaceGraphic
 
QButtonGroup m_preferredSpaceGraphicMode
 
QScopedPointer< KisProofingConfigModelm_proofModel
 
QScopedPointer< KisScreenMigrationTrackerm_screenMigrationTracker
 

Private Slots

void installProfile ()
 
void refillMonitorProfiles (const KoID &s)
 
void toggleAllowMonitorProfileSelection (bool useSystemProfile)
 
void toggleUseDefaultColorSpace (bool useDefColorSpace)
 
void updatePreferredSpaceGraphic ()
 
void updateProofingDisplayInfo ()
 

Detailed Description

Definition at line 193 of file kis_dlg_preferences.h.

Member Typedef Documentation

◆ CanvasSurfaceBitDepthMode

◆ CanvasSurfaceMode

Member Enumeration Documentation

◆ PreferredSpaceType

Enumerator
PreferredSpace 
MasteringSpace 

Definition at line 201 of file kis_dlg_preferences.h.

Constructor & Destructor Documentation

◆ ColorSettingsTab()

ColorSettingsTab::ColorSettingsTab ( QWidget * parent = 0,
const char * name = 0 )

Default proofing config

Definition at line 1252 of file kis_dlg_preferences.cc.

1253 : QWidget(parent)
1255{
1256 setObjectName(name);
1257
1258 // XXX: Make sure only profiles that fit the specified color model
1259 // are shown in the profile combos
1260
1261 QGridLayout * l = new QGridLayout(this);
1262 l->setContentsMargins(0, 0, 0, 0);
1263 m_page = new WdgColorSettings(this);
1264 l->addWidget(m_page, 0, 0);
1265
1266 KisConfig cfg(true);
1267
1269
1270 if (!m_colorManagedByOS) {
1271 m_page->chkUseSystemMonitorProfile->setChecked(cfg.useSystemMonitorProfile());
1272 connect(m_page->chkUseSystemMonitorProfile, SIGNAL(toggled(bool)), this, SLOT(toggleAllowMonitorProfileSelection(bool)));
1273 }
1274 m_page->chkUseSystemMonitorProfile->setVisible(!m_colorManagedByOS);
1275
1276 m_page->useDefColorSpace->setChecked(cfg.useDefaultColorSpace());
1277 connect(m_page->useDefColorSpace, SIGNAL(toggled(bool)), this, SLOT(toggleUseDefaultColorSpace(bool)));
1279 for (QList<KoID>::iterator id = colorSpaces.begin(); id != colorSpaces.end(); /* nop */) {
1281 id = colorSpaces.erase(id);
1282 } else {
1283 ++id;
1284 }
1285 }
1286 m_page->cmbWorkingColorSpace->setIDList(colorSpaces);
1287 m_page->cmbWorkingColorSpace->setCurrent(cfg.workingColorSpace());
1288 m_page->cmbWorkingColorSpace->setEnabled(cfg.useDefaultColorSpace());
1289
1290 if (!m_colorManagedByOS) {
1291 m_page->bnAddColorProfile->setIcon(koIcon("document-import-16"));
1292 connect(m_page->bnAddColorProfile, SIGNAL(clicked()), SLOT(installProfile()));
1293 }
1294 m_page->bnAddColorProfile->setVisible(!m_colorManagedByOS);
1295
1296 {
1297 QStringList profiles;
1298 QMap<QString, const KoColorProfile *> profileList;
1299 Q_FOREACH(const KoColorProfile *profile, KoColorSpaceRegistry::instance()->profilesFor(RGBAColorModelID.id())) {
1300 profileList[profile->name()] = profile;
1301 profiles.append(profile->name());
1302 }
1303
1304 std::sort(profiles.begin(), profiles.end());
1305 Q_FOREACH (const QString profile, profiles) {
1306 m_page->cmbColorProfileForEXR->addSqueezedItem(profile);
1307 }
1308
1310 const QString defaultProfile = KoColorSpaceRegistry::instance()->defaultProfileForColorSpace(colorSpaceId);
1311 const QString userProfile = cfg.readEntry("ExrDefaultColorProfile", defaultProfile);
1312
1313 m_page->cmbColorProfileForEXR->setCurrent(profiles.contains(userProfile) ? userProfile : defaultProfile);
1314 }
1315
1316
1317 if (!m_colorManagedByOS) {
1318 QFormLayout *monitorProfileGrid = new QFormLayout(m_page->monitorprofileholder);
1319 monitorProfileGrid->setContentsMargins(0, 0, 0, 0);
1320 for(int i = 0; i < QGuiApplication::screens().count(); ++i) {
1321 QLabel *lbl = new QLabel(i18nc("The number of the screen (ordinal) and shortened 'name' of the screen (model + resolution)", "Screen %1 (%2):", i + 1, shortNameOfDisplay(i)));
1322 lbl->setWordWrap(true);
1325 cmb->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
1326 monitorProfileGrid->addRow(lbl, cmb);
1328 }
1329
1330 // disable if not Linux as KisColorManager is not yet implemented outside Linux
1331#ifndef Q_OS_LINUX
1332 m_page->chkUseSystemMonitorProfile->setChecked(false);
1333 m_page->chkUseSystemMonitorProfile->setDisabled(true);
1334 m_page->chkUseSystemMonitorProfile->setHidden(true);
1335#endif
1336
1337 refillMonitorProfiles(KoID("RGBA"));
1338
1339 for(int i = 0; i < QApplication::screens().count(); ++i) {
1340 if (m_monitorProfileWidgets[i]->contains(cfg.monitorProfile(i))) {
1341 m_monitorProfileWidgets[i]->setCurrent(cfg.monitorProfile(i));
1342 }
1343 }
1344 } else {
1345 QVBoxLayout *vboxLayout = new QVBoxLayout(m_page->monitorprofileholder);
1346 vboxLayout->setContentsMargins(0, 0, 0, 0);
1347 vboxLayout->addItem(new QSpacerItem(20,20));
1348
1349 QGroupBox *groupBox = new QGroupBox(i18n("Display's color space is managed by the operating system"));
1350 vboxLayout->addWidget(groupBox);
1351
1352 QFormLayout *monitorProfileGrid = new QFormLayout(groupBox);
1353 monitorProfileGrid->setContentsMargins(0, 0, 0, 0);
1354
1356 new QCheckBox(i18n("Enable canvas color management"), this);
1357
1359 i18n("<p>Enabling canvas color management automatically creates "
1360 "a separate native surface for the canvas. It might cause "
1361 "performance issues on some systems.</p>"
1362 ""
1363 "<p>If color management is disabled, Krita will render "
1364 "the canvas into the surface of the main window, which "
1365 "is considered sRGB. It will cause two limitations:"
1366 ""
1367 "<ol>"
1368 " <li>the color gamut will be limited to sRGB</li>"
1369 " <li>color proofing mode will be limited to \"use global display settings\", "
1370 " i.e. paper white proofing will become impossible</li>"
1371 "</ol>"
1372 "</p>"));
1373
1374 monitorProfileGrid->addRow(m_chkEnableCanvasColorSpaceManagement);
1375
1376 // surface color space
1378 m_canvasSurfaceColorSpace->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
1379 QLabel *canvasSurfaceColorSpaceLbl = new QLabel(i18n("Canvas surface color space:"), this);
1380 monitorProfileGrid->addRow(canvasSurfaceColorSpaceLbl, m_canvasSurfaceColorSpace);
1381
1382 m_canvasSurfaceColorSpace->addSqueezedItem(i18n("Preferred by operating system"), QVariant::fromValue(CanvasSurfaceMode::Preferred));
1383 m_canvasSurfaceColorSpace->addSqueezedItem(i18n("Rec 709 Gamma 2.2"), QVariant::fromValue(CanvasSurfaceMode::Rec709g22));
1384 m_canvasSurfaceColorSpace->addSqueezedItem(i18n("Rec 709 Linear"), QVariant::fromValue(CanvasSurfaceMode::Rec709g10));
1385 m_canvasSurfaceColorSpace->addSqueezedItem(i18n("Rec 2020 PQ"), QVariant::fromValue(CanvasSurfaceMode::Rec2020pq));
1386 m_canvasSurfaceColorSpace->addSqueezedItem(i18n("Unmanaged (testing only)"), QVariant::fromValue(CanvasSurfaceMode::Unmanaged));
1387
1388 m_canvasSurfaceColorSpace->setToolTip(
1389 i18n("<p>Color space of the pixels that are transferred to the "
1390 "window compositor. Use \"preferred\" space unless you know "
1391 "what you are doing</p>"));
1392
1393 // surface bit depth
1395 m_canvasSurfaceBitDepth->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
1396 QLabel *canvasSurfaceBitDepthLbl = new QLabel(i18n("Canvas surface bit depth (needs restart):"), this);
1397 monitorProfileGrid->addRow(canvasSurfaceBitDepthLbl, m_canvasSurfaceBitDepth);
1398
1399 m_canvasSurfaceBitDepth->addSqueezedItem(i18n("Auto"), QVariant::fromValue(CanvasSurfaceBitDepthMode::DepthAuto));
1400 m_canvasSurfaceBitDepth->addSqueezedItem(i18n("8-bit"), QVariant::fromValue(CanvasSurfaceBitDepthMode::Depth8Bit));
1401 m_canvasSurfaceBitDepth->addSqueezedItem(i18n("10-bit"), QVariant::fromValue(CanvasSurfaceBitDepthMode::Depth10Bit));
1402
1403 m_canvasSurfaceBitDepth->setToolTip(
1404 i18n("<p>The bit depth of the color that is passed to the window "
1405 "compositor. You should switch into 10-bit mode if you want to use "
1406 "HDR capabilities of your display</p>"));
1407
1408 const QString currentBitBepthString = QSurfaceFormat::defaultFormat().redBufferSize() == 10 ? i18n("10-bit") : i18n("8-bit");
1409 QLabel *currentCanvasSurfaceBitDepthLbl = new QLabel(i18n("Current canvas surface bit depth:"), this);
1410 QLabel *currentCanvasSurfaceBitDepth = new QLabel(currentBitBepthString, this);
1411 monitorProfileGrid->addRow(currentCanvasSurfaceBitDepthLbl, currentCanvasSurfaceBitDepth);
1412
1413 vboxLayout->addItem(new QSpacerItem(20,20));
1414
1416 QTextBrowser *preferredLbl = new QTextBrowser(this);
1417 preferredLbl->setText(i18n("Color space preferred by the operating system:\n%1", KisPlatformPluginInterfaceFactory::instance()->osPreferredColorSpaceReport(mainWindow)));
1418 preferredLbl->setReadOnly(true);
1419
1420 QHBoxLayout *colorDescriptionChoice = new QHBoxLayout();
1421 vboxLayout->addLayout(colorDescriptionChoice);
1422
1423 QLabel *descriptionChoiceLabel = new QLabel(i18n("Diagram:"));
1424 colorDescriptionChoice->addWidget(descriptionChoiceLabel);
1425
1426 QRadioButton *containerSpace = new QRadioButton(i18nc("@info:radiobutton", "Preferred Space"), this);
1427 colorDescriptionChoice->addWidget(containerSpace);
1428 containerSpace->setToolTip(i18nc("@info:tooltip", "This is the space preferred by the operating system."));
1429 m_preferredSpaceGraphicMode.addButton(containerSpace, PreferredSpace);
1430
1431 QRadioButton *masteringSpace = new QRadioButton(i18nc("@info:radiobutton", "Current Display"), this);
1432 colorDescriptionChoice->addWidget(masteringSpace);
1433 m_preferredSpaceGraphicMode.addButton(masteringSpace, MasteringSpace);
1434 masteringSpace->setToolTip(i18nc("@info:tooltip", "This is the space representing the currently active display."));
1435
1436 QHBoxLayout *colorDescriptionLayout = new QHBoxLayout();
1437 vboxLayout->addLayout(colorDescriptionLayout);
1439 colorDescriptionLayout->addWidget(m_preferredSpaceGraphic);
1440 colorDescriptionLayout->addWidget(preferredLbl);
1441
1442 containerSpace->setChecked(true);
1443 colorDescriptionChoice->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
1444
1445 m_preferredSpaceGraphic->setFixedSize(QSize(200, 200));
1447 connect(&m_preferredSpaceGraphicMode, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(updatePreferredSpaceGraphic()));
1451
1452 m_chkEnableCanvasColorSpaceManagement->setChecked(cfg.enableCanvasSurfaceColorSpaceManagement());
1453
1454 {
1455 auto mode = cfg.canvasSurfaceColorSpaceManagementMode();
1456 int index = m_canvasSurfaceColorSpace->findData(QVariant::fromValue(mode));
1457 KIS_SAFE_ASSERT_RECOVER(index >= 0) {
1458 index = 0;
1459 }
1460 m_canvasSurfaceColorSpace->setCurrentIndex(index);
1461 }
1462
1463 {
1464 auto mode = cfg.canvasSurfaceBitDepthMode();
1465 int index = m_canvasSurfaceBitDepth->findData(QVariant::fromValue(mode));
1466 KIS_SAFE_ASSERT_RECOVER(index >= 0) {
1467 index = 0;
1468 }
1469 m_canvasSurfaceBitDepth->setCurrentIndex(index);
1470 }
1471
1472 connect(m_chkEnableCanvasColorSpaceManagement, &QCheckBox::toggled, m_canvasSurfaceColorSpace, &QWidget::setEnabled);
1474
1475 connect(m_chkEnableCanvasColorSpaceManagement, &QCheckBox::toggled, canvasSurfaceColorSpaceLbl, &QWidget::setEnabled);
1476 canvasSurfaceColorSpaceLbl->setEnabled(m_chkEnableCanvasColorSpaceManagement->isChecked());
1477
1478 connect(m_chkEnableCanvasColorSpaceManagement, &QCheckBox::toggled, m_canvasSurfaceBitDepth, &QWidget::setEnabled);
1480
1481 connect(m_chkEnableCanvasColorSpaceManagement, &QCheckBox::toggled, canvasSurfaceBitDepthLbl, &QWidget::setEnabled);
1482 canvasSurfaceBitDepthLbl->setEnabled(m_chkEnableCanvasColorSpaceManagement->isChecked());
1483 }
1484
1485 m_page->chkBlackpoint->setChecked(cfg.useBlackPointCompensation());
1486 m_page->chkAllowLCMSOptimization->setChecked(cfg.allowLCMSOptimization());
1487 m_page->chkForcePaletteColor->setChecked(cfg.forcePaletteColors());
1488 m_page->cmbMonitorIntent->setCurrentIndex(cfg.monitorRenderIntent());
1489 KisImageConfig cfgImage(true);
1490
1494 KisProofingConfigurationSP proofingConfig = cfgImage.defaultProofingconfiguration();
1495
1496 m_page->wdgProofingOptions->setProofingConfig(proofingConfig);
1497
1498 m_proofModel->data.set(*proofingConfig.data());
1499
1500 connect(m_page->chkBlackpoint, SIGNAL(toggled(bool)), this, SLOT(updateProofingDisplayInfo()));
1501 connect(m_page->cmbMonitorIntent, SIGNAL(currentIndexChanged(int)), this, SLOT(updateProofingDisplayInfo()));
1503
1506 m_pasteBehaviourGroup.addButton(m_page->radioPasteAsk, KisClipboard::PASTE_ASK);
1507
1508 QAbstractButton *button = m_pasteBehaviourGroup.button(cfg.pasteBehaviour());
1509 Q_ASSERT(button);
1510
1511 if (button) {
1512 button->setChecked(true);
1513 }
1514
1515 if (!m_colorManagedByOS) {
1516 toggleAllowMonitorProfileSelection(cfg.useSystemMonitorProfile());
1517 }
1518}
const KoID AlphaColorModelID("A", ki18n("Alpha mask"))
const KoID Float16BitsColorDepthID("F16", ki18n("16-bit float/channel"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
void toggleUseDefaultColorSpace(bool useDefColorSpace)
QList< QLabel * > m_monitorProfileLabels
void toggleAllowMonitorProfileSelection(bool useSystemProfile)
QPointer< KisCIETongueWidget > m_preferredSpaceGraphic
QButtonGroup m_pasteBehaviourGroup
QPointer< QCheckBox > m_chkEnableCanvasColorSpaceManagement
QPointer< KisSqueezedComboBox > m_canvasSurfaceBitDepth
QScopedPointer< KisProofingConfigModel > m_proofModel
QPointer< KisSqueezedComboBox > m_canvasSurfaceColorSpace
QList< KisSqueezedComboBox * > m_monitorProfileWidgets
void refillMonitorProfiles(const KoID &s)
QButtonGroup m_preferredSpaceGraphicMode
WdgColorSettings * m_page
QScopedPointer< KisScreenMigrationTracker > m_screenMigrationTracker
Main window for Krita.
static KisPart * instance()
Definition KisPart.cpp:131
KisMainWindow * currentMainwindow() const
Definition KisPart.cpp:459
static KisPlatformPluginInterfaceFactory * instance()
The KisProofingConfigModel class.
void sigScreenChanged(QScreen *screen)
Definition KoID.h:30
QString id() const
Definition KoID.cpp:63
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
QString shortNameOfDisplay(int index)
#define koIcon(name)
Use these macros for icons without any issues.
Definition kis_icon.h:25
QString button(const QWheelEvent &ev)
QString colorSpaceId(const QString &colorModelId, const QString &colorDepthId) const
static KoColorSpaceRegistry * instance()
QString defaultProfileForColorSpace(const QString &colorSpaceId) const
KoID colorSpaceColorModelId(const QString &_colorSpaceId) const
QList< KoID > listKeys() const

References KisConfig::allowLCMSOptimization(), AlphaColorModelID, button(), KisConfig::canvasSurfaceBitDepthMode(), KisConfig::canvasSurfaceColorSpaceManagementMode(), KoColorSpaceRegistry::colorSpaceColorModelId(), KoColorSpaceRegistry::colorSpaceId(), KisPart::currentMainwindow(), KoColorSpaceRegistry::defaultProfileForColorSpace(), KisImageConfig::defaultProofingconfiguration(), KisConfig::enableCanvasSurfaceColorSpaceManagement(), Float16BitsColorDepthID, KisConfig::forcePaletteColors(), KoID::id(), installProfile(), KoColorSpaceRegistry::instance(), KisPart::instance(), KisPlatformPluginInterfaceFactory::instance(), KIS_SAFE_ASSERT_RECOVER, koIcon, KoColorSpaceRegistry::listKeys(), m_canvasSurfaceBitDepth, m_canvasSurfaceColorSpace, m_chkEnableCanvasColorSpaceManagement, m_colorManagedByOS, m_monitorProfileLabels, m_monitorProfileWidgets, m_page, m_pasteBehaviourGroup, m_preferredSpaceGraphic, m_preferredSpaceGraphicMode, m_proofModel, m_screenMigrationTracker, MasteringSpace, KisConfig::monitorProfile(), KisConfig::monitorRenderIntent(), KoColorProfile::name, KisClipboard::PASTE_ASK, KisClipboard::PASTE_ASSUME_MONITOR, KisClipboard::PASTE_ASSUME_WEB, KisConfig::pasteBehaviour(), PreferredSpace, KisConfig::readEntry(), refillMonitorProfiles(), RGBAColorModelID, shortNameOfDisplay(), KisScreenMigrationTracker::sigScreenChanged(), KisPlatformPluginInterfaceFactory::surfaceColorManagedByOS(), toggleAllowMonitorProfileSelection(), toggleUseDefaultColorSpace(), updatePreferredSpaceGraphic(), updateProofingDisplayInfo(), KisConfig::useBlackPointCompensation(), KisConfig::useDefaultColorSpace(), KisConfig::useSystemMonitorProfile(), and KisConfig::workingColorSpace().

Member Function Documentation

◆ installProfile

void ColorSettingsTab::installProfile ( )
privateslot

Definition at line 1520 of file kis_dlg_preferences.cc.

1521{
1523
1524 KoFileDialog dialog(this, KoFileDialog::OpenFiles, "OpenDocumentICC");
1525 dialog.setCaption(i18n("Install Color Profiles"));
1526 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
1527 dialog.setMimeTypeFilters(QStringList() << "application/vnd.iccprofile", "application/vnd.iccprofile");
1528 QStringList profileNames = dialog.filenames();
1529
1531 Q_ASSERT(iccEngine);
1532
1533 QString saveLocation = KoResourcePaths::saveLocation("icc_profiles");
1534
1535 Q_FOREACH (const QString &profileName, profileNames) {
1536 if (!QFile::copy(profileName, saveLocation + QFileInfo(profileName).fileName())) {
1537 qWarning() << "Could not install profile!" << saveLocation + QFileInfo(profileName).fileName();
1538 continue;
1539 }
1540 iccEngine->addProfile(saveLocation + QFileInfo(profileName).fileName());
1541 }
1542
1543 KisConfig cfg(true);
1544 refillMonitorProfiles(KoID("RGBA"));
1545
1546 for(int i = 0; i < QApplication::screens().count(); ++i) {
1547 if (m_monitorProfileWidgets[i]->contains(cfg.monitorProfile(i))) {
1548 m_monitorProfileWidgets[i]->setCurrent(cfg.monitorProfile(i));
1549 }
1550 }
1551
1552}
QList< QString > QStringList
static KoColorSpaceEngineRegistry * instance()
T get(const QString &id) const
static QString saveLocation(const QString &type, const QString &suffix=QString(), bool create=true)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
virtual const KoColorProfile * addProfile(const QString &filename)=0

References KoColorSpaceEngine::addProfile(), KoGenericRegistry< T >::get(), KoColorSpaceEngineRegistry::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_colorManagedByOS, m_monitorProfileWidgets, KisConfig::monitorProfile(), KoFileDialog::OpenFiles, refillMonitorProfiles(), and KoResourcePaths::saveLocation().

◆ refillMonitorProfiles

void ColorSettingsTab::refillMonitorProfiles ( const KoID & s)
privateslot

Definition at line 1645 of file kis_dlg_preferences.cc.

1646{
1648
1649 for (int i = 0; i < QApplication::screens().count(); ++i) {
1650 m_monitorProfileWidgets[i]->clear();
1651 }
1652
1653 QMap<QString, const KoColorProfile *> profileList;
1654 Q_FOREACH(const KoColorProfile *profile, KoColorSpaceRegistry::instance()->profilesFor(colorSpaceId.id())) {
1655 profileList[profile->name()] = profile;
1656 }
1657
1658 Q_FOREACH (const KoColorProfile *profile, profileList.values()) {
1659 //qDebug() << "Profile" << profile->name() << profile->isSuitableForDisplay() << csf->defaultProfile();
1660 if (profile->isSuitableForDisplay()) {
1661 for (int i = 0; i < QApplication::screens().count(); ++i) {
1662 m_monitorProfileWidgets[i]->addSqueezedItem(profile->name());
1663 }
1664 }
1665 }
1666
1667 for (int i = 0; i < QApplication::screens().count(); ++i) {
1668 m_monitorProfileLabels[i]->setText(i18nc("The number of the screen (ordinal) and shortened 'name' of the screen (model + resolution)", "Screen %1 (%2):", i + 1, shortNameOfDisplay(i)));
1670 }
1671}
virtual bool isSuitableForDisplay() const =0

References KoColorSpaceRegistry::defaultProfileForColorSpace(), KoID::id(), KoColorSpaceRegistry::instance(), KoColorProfile::isSuitableForDisplay(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_colorManagedByOS, m_monitorProfileLabels, m_monitorProfileWidgets, KoColorProfile::name, and shortNameOfDisplay().

◆ setDefault()

void ColorSettingsTab::setDefault ( )

Definition at line 1592 of file kis_dlg_preferences.cc.

1593{
1594 m_page->cmbWorkingColorSpace->setCurrent("RGBA");
1595
1597 const QString defaultProfile = KoColorSpaceRegistry::instance()->defaultProfileForColorSpace(colorSpaceId);
1598 m_page->cmbColorProfileForEXR->setCurrent(defaultProfile);
1599
1600 KisConfig cfg(true);
1601
1602 if (!m_colorManagedByOS) {
1603 refillMonitorProfiles(KoID("RGBA"));
1604 } else {
1605 m_chkEnableCanvasColorSpaceManagement->setChecked(cfg.enableCanvasSurfaceColorSpaceManagement(true));
1606
1607 {
1608 auto mode = cfg.canvasSurfaceColorSpaceManagementMode(true);
1609 int index = m_canvasSurfaceColorSpace->findData(QVariant::fromValue(mode));
1610 KIS_SAFE_ASSERT_RECOVER(index >= 0) {
1611 index = 0;
1612 }
1613 m_canvasSurfaceColorSpace->setCurrentIndex(index);
1614 }
1615
1616 {
1617 auto mode = cfg.canvasSurfaceBitDepthMode(true);
1618 int index = m_canvasSurfaceBitDepth->findData(QVariant::fromValue(mode));
1619 KIS_SAFE_ASSERT_RECOVER(index >= 0) {
1620 index = 0;
1621 }
1622 m_canvasSurfaceBitDepth->setCurrentIndex(index);
1623 }
1624 }
1625
1626 KisImageConfig cfgImage(true);
1627 KisProofingConfigurationSP proofingConfig = cfgImage.defaultProofingconfiguration(true);
1628 m_page->wdgProofingOptions->setProofingConfig(proofingConfig);
1629
1630 m_page->chkBlackpoint->setChecked(cfg.useBlackPointCompensation(true));
1631 m_page->chkAllowLCMSOptimization->setChecked(cfg.allowLCMSOptimization(true));
1632 m_page->chkForcePaletteColor->setChecked(cfg.forcePaletteColors(true));
1633 m_page->cmbMonitorIntent->setCurrentIndex(cfg.monitorRenderIntent(true));
1634 if (!m_colorManagedByOS) {
1635 m_page->chkUseSystemMonitorProfile->setChecked(cfg.useSystemMonitorProfile(true));
1636 }
1637 QAbstractButton *button = m_pasteBehaviourGroup.button(cfg.pasteBehaviour(true));
1638 Q_ASSERT(button);
1639 if (button) {
1640 button->setChecked(true);
1641 }
1642}

References KisConfig::allowLCMSOptimization(), button(), KisConfig::canvasSurfaceBitDepthMode(), KisConfig::canvasSurfaceColorSpaceManagementMode(), KoColorSpaceRegistry::colorSpaceId(), KoColorSpaceRegistry::defaultProfileForColorSpace(), KisImageConfig::defaultProofingconfiguration(), KisConfig::enableCanvasSurfaceColorSpaceManagement(), Float16BitsColorDepthID, KisConfig::forcePaletteColors(), KoID::id(), KoColorSpaceRegistry::instance(), KIS_SAFE_ASSERT_RECOVER, m_canvasSurfaceBitDepth, m_canvasSurfaceColorSpace, m_chkEnableCanvasColorSpaceManagement, m_colorManagedByOS, m_page, m_pasteBehaviourGroup, KisConfig::monitorRenderIntent(), KisConfig::pasteBehaviour(), refillMonitorProfiles(), RGBAColorModelID, KisConfig::useBlackPointCompensation(), and KisConfig::useSystemMonitorProfile().

◆ toggleAllowMonitorProfileSelection

void ColorSettingsTab::toggleAllowMonitorProfileSelection ( bool useSystemProfile)
privateslot

Definition at line 1554 of file kis_dlg_preferences.cc.

1555{
1557
1558 KisConfig cfg(true);
1559
1560 if (useSystemProfile) {
1562 if (devices.size() == QApplication::screens().count()) {
1563 for(int i = 0; i < QApplication::screens().count(); ++i) {
1564 m_monitorProfileWidgets[i]->clear();
1565 QString monitorForScreen = cfg.monitorForScreen(i, devices[i]);
1566 Q_FOREACH (const QString &device, devices) {
1567 m_monitorProfileLabels[i]->setText(i18nc("The number of the screen (ordinal) and shortened 'name' of the screen (model + resolution)", "Screen %1 (%2):", i + 1, shortNameOfDisplay(i)));
1568 m_monitorProfileWidgets[i]->addSqueezedItem(KisColorManager::instance()->deviceName(device), device);
1569 if (devices[i] == monitorForScreen) {
1570 m_monitorProfileWidgets[i]->setCurrentIndex(i);
1571 }
1572 }
1573 }
1574 }
1575 }
1576 else {
1577 refillMonitorProfiles(KoID("RGBA"));
1578
1579 for(int i = 0; i < QApplication::screens().count(); ++i) {
1580 if (m_monitorProfileWidgets[i]->contains(cfg.monitorProfile(i))) {
1581 m_monitorProfileWidgets[i]->setCurrent(cfg.monitorProfile(i));
1582 }
1583 }
1584 }
1585}
QStringList devices(DeviceType type=screen) const
Return a list of device id's for the specified type.
static KisColorManager * instance()

References KisColorManager::devices(), KisColorManager::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_colorManagedByOS, m_monitorProfileLabels, m_monitorProfileWidgets, KisConfig::monitorForScreen(), KisConfig::monitorProfile(), refillMonitorProfiles(), and shortNameOfDisplay().

◆ toggleUseDefaultColorSpace

void ColorSettingsTab::toggleUseDefaultColorSpace ( bool useDefColorSpace)
privateslot

Definition at line 1587 of file kis_dlg_preferences.cc.

1588{
1589 m_page->cmbWorkingColorSpace->setEnabled(useDefColorSpace);
1590}

References m_page.

◆ updatePreferredSpaceGraphic

void ColorSettingsTab::updatePreferredSpaceGraphic ( )
privateslot

Definition at line 1681 of file kis_dlg_preferences.cc.

1682{
1683 if (!m_preferredSpaceGraphic) return;
1684 if (!KisPlatformPluginInterfaceFactory::instance()->surfaceColorManagedByOS()) return;
1687 KoColorimetryUtils::xyY whitePoint;
1688
1689#ifdef Q_OS_LINUX
1690#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
1691 KisRootSurfaceInfoProxy proxy(mainWindow);
1692 std::optional<KisSurfaceColorimetry::SurfaceDescription> currentDescription = proxy.currentSurfaceDescription();
1693 if (m_preferredSpaceGraphicMode.checkedId() == PreferredSpace) {
1694 if (currentDescription) {
1695 if (std::holds_alternative<KisSurfaceColorimetry::Colorimetry>(currentDescription->colorSpace.primaries)) {
1696 auto col = std::get<KisSurfaceColorimetry::Colorimetry>(currentDescription->colorSpace.primaries);
1697 colorants << col.red().toxyY() << col.green().toxyY() << col.blue().toxyY();
1698 whitePoint = col.white().toxyY();
1699 m_preferredSpaceGraphic->setRGBData(whitePoint, colorants);
1700 } else {
1701 bool enable = true;
1702 auto named = std::get<KisSurfaceColorimetry::NamedPrimaries>(currentDescription->colorSpace.primaries);
1714 } else {
1715 enable = false;
1716 }
1717
1718 if (enable) {
1719 colorants << col.red().toxyY() << col.green().toxyY() << col.blue().toxyY();
1720 whitePoint = col.white().toxyY();
1721 m_preferredSpaceGraphic->setRGBData(whitePoint, colorants);
1722 } else {
1723 m_preferredSpaceGraphic->setProfileDataAvailable(false);
1724 }
1725
1726 }
1727 } else {
1728 m_preferredSpaceGraphic->setProfileDataAvailable(false);
1729 }
1730 } else if(m_preferredSpaceGraphicMode.checkedId() == MasteringSpace) {
1731 if (currentDescription && currentDescription->masteringInfo) {
1732 auto col = currentDescription->masteringInfo->primaries;
1733 colorants << col.red().toxyY() << col.green().toxyY() << col.blue().toxyY();
1734 whitePoint = col.white().toxyY();
1735
1736 m_preferredSpaceGraphic->setRGBData(whitePoint, colorants);
1737 } else {
1738 m_preferredSpaceGraphic->setProfileDataAvailable(false);
1739 }
1740 }
1741#endif
1742#endif
1743 m_preferredSpaceGraphic->update();
1744}
static const Colorimetry DCIP3
static const Colorimetry BT2020
static const Colorimetry BT709
static const Colorimetry DisplayP3
static const Colorimetry AdobeRGB

References KoColorimetryUtils::Colorimetry::AdobeRGB, KoColorimetryUtils::Colorimetry::blue(), KoColorimetryUtils::Colorimetry::BT2020, KoColorimetryUtils::Colorimetry::BT709, KisPart::currentMainwindow(), KisRootSurfaceInfoProxy::currentSurfaceDescription(), KoColorimetryUtils::Colorimetry::DCIP3, KoColorimetryUtils::Colorimetry::DisplayP3, KoColorimetryUtils::Colorimetry::green(), KisPart::instance(), KisPlatformPluginInterfaceFactory::instance(), m_preferredSpaceGraphic, m_preferredSpaceGraphicMode, MasteringSpace, PreferredSpace, KisSurfaceColorimetry::primaries_adobe_rgb, KisSurfaceColorimetry::primaries_bt2020, KisSurfaceColorimetry::primaries_dci_p3, KisSurfaceColorimetry::primaries_display_p3, KisSurfaceColorimetry::primaries_srgb, KoColorimetryUtils::Colorimetry::red(), KoColorimetryUtils::XYZ::toxyY(), and KoColorimetryUtils::Colorimetry::white().

◆ updateProofingDisplayInfo

void ColorSettingsTab::updateProofingDisplayInfo ( )
privateslot

Definition at line 1673 of file kis_dlg_preferences.cc.

1673 {
1675 options.first = KoColorConversionTransformation::Intent(m_page->cmbMonitorIntent->currentIndex());
1677 options.second.setFlag(KoColorConversionTransformation::BlackpointCompensation, m_page->chkBlackpoint->isChecked());
1678 m_page->wdgProofingOptions->setDisplayConfigOptions(options);
1679}
std::pair< KoColorConversionTransformation::Intent, KoColorConversionTransformation::ConversionFlags > Options

References KoColorConversionTransformation::BlackpointCompensation, KoColorConversionTransformation::internalConversionFlags(), and m_page.

Member Data Documentation

◆ m_canvasSurfaceBitDepth

QPointer<KisSqueezedComboBox> ColorSettingsTab::m_canvasSurfaceBitDepth

Definition at line 232 of file kis_dlg_preferences.h.

◆ m_canvasSurfaceColorSpace

QPointer<KisSqueezedComboBox> ColorSettingsTab::m_canvasSurfaceColorSpace

Definition at line 231 of file kis_dlg_preferences.h.

◆ m_chkEnableCanvasColorSpaceManagement

QPointer<QCheckBox> ColorSettingsTab::m_chkEnableCanvasColorSpaceManagement

Definition at line 230 of file kis_dlg_preferences.h.

◆ m_colorManagedByOS

bool ColorSettingsTab::m_colorManagedByOS {false}

Definition at line 229 of file kis_dlg_preferences.h.

229{false};

◆ m_monitorProfileLabels

QList<QLabel*> ColorSettingsTab::m_monitorProfileLabels

Definition at line 221 of file kis_dlg_preferences.h.

◆ m_monitorProfileWidgets

QList<KisSqueezedComboBox*> ColorSettingsTab::m_monitorProfileWidgets

Definition at line 222 of file kis_dlg_preferences.h.

◆ m_page

WdgColorSettings* ColorSettingsTab::m_page

Definition at line 219 of file kis_dlg_preferences.h.

◆ m_pasteBehaviourGroup

QButtonGroup ColorSettingsTab::m_pasteBehaviourGroup

Definition at line 220 of file kis_dlg_preferences.h.

◆ m_preferredSpaceGraphic

QPointer<KisCIETongueWidget> ColorSettingsTab::m_preferredSpaceGraphic

Definition at line 233 of file kis_dlg_preferences.h.

◆ m_preferredSpaceGraphicMode

QButtonGroup ColorSettingsTab::m_preferredSpaceGraphicMode

Definition at line 234 of file kis_dlg_preferences.h.

◆ m_proofModel

QScopedPointer<KisProofingConfigModel> ColorSettingsTab::m_proofModel

Definition at line 223 of file kis_dlg_preferences.h.

◆ m_screenMigrationTracker

QScopedPointer<KisScreenMigrationTracker> ColorSettingsTab::m_screenMigrationTracker

Definition at line 224 of file kis_dlg_preferences.h.


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