diff --git a/Pdf4QtLib/sources/pdfcms.cpp b/Pdf4QtLib/sources/pdfcms.cpp index db4c077..3f12624 100644 --- a/Pdf4QtLib/sources/pdfcms.cpp +++ b/Pdf4QtLib/sources/pdfcms.cpp @@ -541,7 +541,6 @@ QColor PDFLittleCMS::getColorFromDeviceCMYK(const PDFColor& color, RenderingInte QColor PDFLittleCMS::getColorFromXYZ(const PDFColor3& whitePoint, const PDFColor3& color, RenderingIntent intent, PDFRenderErrorReporter* reporter) const { - Q_UNUSED(whitePoint); cmsHTRANSFORM transform = getTransform(XYZ, getEffectiveRenderingIntent(intent), false); if (!transform) diff --git a/Pdf4QtLib/sources/pdfcms.h b/Pdf4QtLib/sources/pdfcms.h index 48dab60..75bf7a3 100644 --- a/Pdf4QtLib/sources/pdfcms.h +++ b/Pdf4QtLib/sources/pdfcms.h @@ -55,12 +55,22 @@ struct PDFCMSSettings High }; + enum class ColorAdaptationXYZ + { + None, + XYZScaling, + CAT97, + CAT02, + Bradford + }; + bool operator==(const PDFCMSSettings&) const = default; System system = System::Generic; Accuracy accuracy = Accuracy::Medium; RenderingIntent intent = RenderingIntent::Auto; RenderingIntent proofingIntent = RenderingIntent::RelativeColorimetric; + ColorAdaptationXYZ colorAdaptationXYZ = ColorAdaptationXYZ::Bradford; bool isBlackPointCompensationActive = true; bool isWhitePaperColorTransformed = false; bool isGamutChecking = false; diff --git a/Pdf4QtViewer/pdfviewersettings.cpp b/Pdf4QtViewer/pdfviewersettings.cpp index 1d8f827..3331aa7 100644 --- a/Pdf4QtViewer/pdfviewersettings.cpp +++ b/Pdf4QtViewer/pdfviewersettings.cpp @@ -65,6 +65,7 @@ void PDFViewerSettings::readSettings(QSettings& settings, const pdf::PDFCMSSetti m_colorManagementSystemSettings.system = static_cast(settings.value("system", int(defaultCMSSettings.system)).toInt()); m_colorManagementSystemSettings.accuracy = static_cast(settings.value("accuracy", int(defaultCMSSettings.accuracy)).toInt()); m_colorManagementSystemSettings.intent = static_cast(settings.value("intent", int(defaultCMSSettings.intent)).toInt()); + m_colorManagementSystemSettings.colorAdaptationXYZ = static_cast(settings.value("colorAdaptationXYZ"), int(defaultCMSSettings.colorAdaptationXYZ)); m_colorManagementSystemSettings.isBlackPointCompensationActive = settings.value("isBlackPointCompensationActive", defaultCMSSettings.isBlackPointCompensationActive).toBool(); m_colorManagementSystemSettings.isWhitePaperColorTransformed = settings.value("isWhitePaperColorTransformed", defaultCMSSettings.isWhitePaperColorTransformed).toBool(); m_colorManagementSystemSettings.isConsiderOutputIntent = settings.value("isConsiderOutputIntent", defaultCMSSettings.isConsiderOutputIntent).toBool(); @@ -131,6 +132,7 @@ void PDFViewerSettings::writeSettings(QSettings& settings) settings.setValue("system", int(m_colorManagementSystemSettings.system)); settings.setValue("accuracy", int(m_colorManagementSystemSettings.accuracy)); settings.setValue("intent", int(m_colorManagementSystemSettings.intent)); + settings.setValue("colorAdaptationXYZ", int(m_colorManagementSystemSettings.colorAdaptationXYZ)); settings.setValue("isBlackPointCompensationActive", m_colorManagementSystemSettings.isBlackPointCompensationActive); settings.setValue("isWhitePaperColorTransformed", m_colorManagementSystemSettings.isWhitePaperColorTransformed); settings.setValue("isConsiderOutputIntent", m_colorManagementSystemSettings.isConsiderOutputIntent); diff --git a/Pdf4QtViewer/pdfviewersettingsdialog.cpp b/Pdf4QtViewer/pdfviewersettingsdialog.cpp index 6033d39..1c3883a 100644 --- a/Pdf4QtViewer/pdfviewersettingsdialog.cpp +++ b/Pdf4QtViewer/pdfviewersettingsdialog.cpp @@ -20,6 +20,7 @@ #include "pdfglobal.h" #include "pdfutils.h" +#include "pdfwidgetutils.h" #include "pdfrecentfilemanager.h" #include @@ -31,10 +32,28 @@ #include #include #include +#include namespace pdfviewer { +class SettingsDelegate : public QStyledItemDelegate +{ +public: + SettingsDelegate(QObject* parent) : + QStyledItemDelegate(parent) + { + + } + + virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override + { + QSize size = QStyledItemDelegate::sizeHint(option, index); + size.setHeight(qMax(size.height(), pdf::PDFWidgetUtils::scaleDPI_y(qobject_cast(parent()), 48))); + return size; + } +}; + PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settings& settings, const pdf::PDFCMSSettings& cmsSettings, const OtherSettings& otherSettings, @@ -74,6 +93,15 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin new QListWidgetItem(QIcon(":/resources/signature.svg"), tr("Signature"), ui->optionsPagesWidget, SignatureSettings); new QListWidgetItem(QIcon(":/resources/plugins.svg"), tr("Plugins"), ui->optionsPagesWidget, PluginsSettings); + ui->optionsPagesWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + ui->optionsPagesWidget->setItemDelegate(new SettingsDelegate(ui->optionsPagesWidget)); + ui->optionsPagesWidget->setIconSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(32, 32))); + + // Scale font + QFont font = ui->optionsPagesWidget->font(); + font.setPointSize(font.pointSize() * 1.5); + ui->optionsPagesWidget->setFont(font); + ui->renderingEngineComboBox->addItem(tr("Software"), static_cast(pdf::RendererEngine::Software)); ui->renderingEngineComboBox->addItem(tr("Hardware accelerated (OpenGL)"), static_cast(pdf::RendererEngine::OpenGL)); @@ -103,6 +131,12 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin ui->cmsAccuracyComboBox->addItem(tr("Medium"), int(pdf::PDFCMSSettings::Accuracy::Medium)); ui->cmsAccuracyComboBox->addItem(tr("High"), int(pdf::PDFCMSSettings::Accuracy::High)); + ui->cmsColorAdaptationXYZComboBox->addItem(tr("None"), int (pdf::PDFCMSSettings::ColorAdaptationXYZ::None)); + ui->cmsColorAdaptationXYZComboBox->addItem(tr("XYZ scaling"), int (pdf::PDFCMSSettings::ColorAdaptationXYZ::XYZScaling)); + ui->cmsColorAdaptationXYZComboBox->addItem(tr("CAT97 matrix"), int (pdf::PDFCMSSettings::ColorAdaptationXYZ::CAT97)); + ui->cmsColorAdaptationXYZComboBox->addItem(tr("CAT02 matrix"), int (pdf::PDFCMSSettings::ColorAdaptationXYZ::CAT02)); + ui->cmsColorAdaptationXYZComboBox->addItem(tr("Bradford method"), int (pdf::PDFCMSSettings::ColorAdaptationXYZ::Bradford)); + auto fillColorProfileList = [](QComboBox* comboBox, const pdf::PDFColorProfileIdentifiers& identifiers) { for (const pdf::PDFColorProfileIdentifier& identifier : identifiers) @@ -158,6 +192,8 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin connect(ui->trustedCertificateStoreTableWidget, &QTableWidget::itemSelectionChanged, this, &PDFViewerSettingsDialog::updateTrustedCertificatesTableActions); connect(ui->pluginsTableWidget, &QTableWidget::itemSelectionChanged, this, &PDFViewerSettingsDialog::updatePluginInformation); + setMinimumSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(1000, 700))); + ui->optionsPagesWidget->setCurrentRow(0); adjustSize(); loadData(); @@ -304,6 +340,8 @@ void PDFViewerSettingsDialog::loadData() ui->cmsRenderingIntentComboBox->setCurrentIndex(ui->cmsRenderingIntentComboBox->findData(int(m_cmsSettings.intent))); ui->cmsAccuracyComboBox->setEnabled(true); ui->cmsAccuracyComboBox->setCurrentIndex(ui->cmsAccuracyComboBox->findData(int(m_cmsSettings.accuracy))); + ui->cmsColorAdaptationXYZComboBox->setEnabled(true); + ui->cmsColorAdaptationXYZComboBox->setCurrentIndex(ui->cmsColorAdaptationXYZComboBox->findData(int(m_cmsSettings.colorAdaptationXYZ))); ui->cmsIsBlackPointCompensationCheckBox->setEnabled(true); ui->cmsIsBlackPointCompensationCheckBox->setChecked(m_cmsSettings.isBlackPointCompensationActive); ui->cmsConsiderOutputIntentCheckBox->setEnabled(true); @@ -328,6 +366,8 @@ void PDFViewerSettingsDialog::loadData() ui->cmsRenderingIntentComboBox->setCurrentIndex(-1); ui->cmsAccuracyComboBox->setEnabled(false); ui->cmsAccuracyComboBox->setCurrentIndex(-1); + ui->cmsColorAdaptationXYZComboBox->setEnabled(false); + ui->cmsColorAdaptationXYZComboBox->setCurrentIndex(-1); ui->cmsIsBlackPointCompensationCheckBox->setEnabled(false); ui->cmsIsBlackPointCompensationCheckBox->setChecked(false); ui->cmsConsiderOutputIntentCheckBox->setEnabled(false); @@ -473,6 +513,10 @@ void PDFViewerSettingsDialog::saveData() { m_cmsSettings.accuracy = static_cast(ui->cmsAccuracyComboBox->currentData().toInt()); } + else if (sender == ui->cmsColorAdaptationXYZComboBox) + { + m_cmsSettings.colorAdaptationXYZ = static_cast(ui->cmsColorAdaptationXYZComboBox->currentData().toInt()); + } else if (sender == ui->cmsIsBlackPointCompensationCheckBox) { m_cmsSettings.isBlackPointCompensationActive = ui->cmsIsBlackPointCompensationCheckBox->isChecked(); diff --git a/Pdf4QtViewer/pdfviewersettingsdialog.ui b/Pdf4QtViewer/pdfviewersettingsdialog.ui index e89feef..9e2cb54 100644 --- a/Pdf4QtViewer/pdfviewersettingsdialog.ui +++ b/Pdf4QtViewer/pdfviewersettingsdialog.ui @@ -18,15 +18,24 @@ + + + 0 + 0 + + QAbstractItemView::SelectRows + + QListView::ListMode + - 7 + 5 @@ -610,42 +619,28 @@ - - + + + + + + + Black point compensation + + - + - Device RGB color profile + Device gray color profile - - - - Enable - - - - - - - White paper color transformed - - - - - - - - - Device CMYK color profile - - + @@ -654,21 +649,50 @@ - - + + - + Additional color profile directory - - + + + + White paper color transformed + + - - + + + + Enable + + + + + + + Output color profile + + + + + + + Enable + + + + + + + Enable + + @@ -677,10 +701,41 @@ - - + + - + + + + + + + Consider document output intents + + + + + + + Device RGB color profile + + + + + + + Color management system + + + + + + + Device CMYK color profile + + + + @@ -694,52 +749,16 @@ - - - - Output color profile - - - - - - - Color management system - - - - - - - Black point compensation - - - - - - - Device gray color profile - - + + - - - Enable - - + - - + + - Enable - - - - - - - Consider document output intents + Color adaptation method (XYZ whitepoint) diff --git a/PdfTool/pdftoolabstractapplication.cpp b/PdfTool/pdftoolabstractapplication.cpp index 557fd32..242bedd 100644 --- a/PdfTool/pdftoolabstractapplication.cpp +++ b/PdfTool/pdftoolabstractapplication.cpp @@ -280,6 +280,7 @@ void PDFToolAbstractApplication::initializeCommandLineParser(QCommandLineParser* { parser->addOption(QCommandLineOption("cms", "Color management system. Valid values are generic|lcms.", "cms", "lcms")); parser->addOption(QCommandLineOption("cms-accuracy", "Accuracy of cms system. Valid values are low|medium|high. Higher accuracy means higher memory consumption.", "accuracy", "medium")); + parser->addOption(QCommandLineOption("cms-color-adaptation", "Color adaptation method for XYZ whitepoint scaling. Valid values are none|xyzscaling|cat97|cat02|bradford. Higher accuracy means higher memory consumption.", "color-adaptation-method", "bradford")); parser->addOption(QCommandLineOption("cms-intent", "Rendering intent. Valid values are auto|perceptual|abs|rel|saturation.", "intent", "auto")); parser->addOption(QCommandLineOption("cms-black-compensated", "Black point compensation.", "bool", "1")); parser->addOption(QCommandLineOption("cms-white-paper-trans", "Transform also color of paper using cms.", "bool", "0")); @@ -727,6 +728,33 @@ PDFToolOptions PDFToolAbstractApplication::getOptions(QCommandLineParser* parser options.cmsSettings.accuracy = pdf::PDFCMSSettings::Accuracy::Medium; } + QString colorAdaptationMethod = parser->value("cms-color-adaptation"); + if (colorAdaptationMethod == "none") + { + options.cmsSettings.colorAdaptationXYZ = pdf::PDFCMSSettings::ColorAdaptationXYZ::None; + } + else if (colorAdaptationMethod == "xyzscaling") + { + options.cmsSettings.colorAdaptationXYZ = pdf::PDFCMSSettings::ColorAdaptationXYZ::XYZScaling; + } + else if (colorAdaptationMethod == "cat97") + { + options.cmsSettings.colorAdaptationXYZ = pdf::PDFCMSSettings::ColorAdaptationXYZ::CAT97; + } + else if (colorAdaptationMethod == "cat02") + { + options.cmsSettings.colorAdaptationXYZ = pdf::PDFCMSSettings::ColorAdaptationXYZ::CAT02; + } + else if (colorAdaptationMethod == "bradford") + { + options.cmsSettings.colorAdaptationXYZ = pdf::PDFCMSSettings::ColorAdaptationXYZ::Bradford; + } + else + { + PDFConsole::writeError(PDFToolTranslationContext::tr("Unknown color adaptation method '%1'. Defaulting to bradford.").arg(colorAdaptationMethod), options.outputCodec); + options.cmsSettings.colorAdaptationXYZ = pdf::PDFCMSSettings::ColorAdaptationXYZ::Bradford; + } + QString intent = parser->value("cms-intent"); if (intent == "auto") {