mirror of
				https://github.com/JakubMelka/PDF4QT.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	Plugin for soft-proofing
This commit is contained in:
		| @@ -59,9 +59,13 @@ private: | |||||||
|         RGB, |         RGB, | ||||||
|         CMYK, |         CMYK, | ||||||
|         XYZ, |         XYZ, | ||||||
|  |         SoftProofing, | ||||||
|         ProfileCount |         ProfileCount | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     /// Returns true, if we are doing soft-proofing | ||||||
|  |     bool isSoftProofing() const; | ||||||
|  |  | ||||||
|     /// Creates a profile using provided id and a list of profile descriptors. |     /// Creates a profile using provided id and a list of profile descriptors. | ||||||
|     /// If profile can't be created, then null handle is returned. |     /// If profile can't be created, then null handle is returned. | ||||||
|     /// \param id Id of color profile |     /// \param id Id of color profile | ||||||
| @@ -455,7 +459,23 @@ cmsHTRANSFORM PDFLittleCMS::getTransformFromICCProfile(const QByteArray& iccData | |||||||
|                 if (const cmsUInt32Number inputDataFormat = getProfileDataFormat(profile)) |                 if (const cmsUInt32Number inputDataFormat = getProfileDataFormat(profile)) | ||||||
|                 { |                 { | ||||||
|                     cmsUInt32Number lcmsIntent = getLittleCMSRenderingIntent(effectiveRenderingIntent); |                     cmsUInt32Number lcmsIntent = getLittleCMSRenderingIntent(effectiveRenderingIntent); | ||||||
|                     transform = cmsCreateTransform(profile, inputDataFormat, m_profiles[Output], isRGB888Buffer ? TYPE_RGB_8 : TYPE_RGB_FLT, lcmsIntent, getTransformationFlags()); |  | ||||||
|  |                     if (isSoftProofing()) | ||||||
|  |                     { | ||||||
|  |                         cmsHPROFILE proofingProfile = m_profiles[SoftProofing]; | ||||||
|  |                         RenderingIntent proofingIntent = m_settings.proofingIntent; | ||||||
|  |                         if (m_settings.proofingIntent == RenderingIntent::Auto) | ||||||
|  |                         { | ||||||
|  |                             proofingIntent = effectiveRenderingIntent; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         transform = cmsCreateProofingTransform(profile, inputDataFormat, m_profiles[Output], isRGB888Buffer ? TYPE_RGB_8 : TYPE_RGB_FLT, proofingProfile, | ||||||
|  |                                                                lcmsIntent, getLittleCMSRenderingIntent(proofingIntent), getTransformationFlags()); | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         transform = cmsCreateTransform(profile, inputDataFormat, m_profiles[Output], isRGB888Buffer ? TYPE_RGB_8 : TYPE_RGB_FLT, lcmsIntent, getTransformationFlags()); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|                 cmsCloseProfile(profile); |                 cmsCloseProfile(profile); | ||||||
|             } |             } | ||||||
| @@ -514,8 +534,12 @@ void PDFLittleCMS::init() | |||||||
|     m_profiles[Gray] = createProfile(m_settings.deviceGray, m_manager->getGrayProfiles()); |     m_profiles[Gray] = createProfile(m_settings.deviceGray, m_manager->getGrayProfiles()); | ||||||
|     m_profiles[RGB] = createProfile(m_settings.deviceRGB, m_manager->getRGBProfiles()); |     m_profiles[RGB] = createProfile(m_settings.deviceRGB, m_manager->getRGBProfiles()); | ||||||
|     m_profiles[CMYK] = createProfile(m_settings.deviceCMYK, m_manager->getCMYKProfiles()); |     m_profiles[CMYK] = createProfile(m_settings.deviceCMYK, m_manager->getCMYKProfiles()); | ||||||
|  |     m_profiles[SoftProofing] = createProfile(m_settings.softProofingProfile, m_manager->getCMYKProfiles()); | ||||||
|     m_profiles[XYZ] = cmsCreateXYZProfile(); |     m_profiles[XYZ] = cmsCreateXYZProfile(); | ||||||
|  |  | ||||||
|  |     cmsUInt16Number alarmCodes[cmsMAXCHANNELS] = { 0xFFFF }; | ||||||
|  |     cmsSetAlarmCodes(alarmCodes); | ||||||
|  |  | ||||||
|     if (m_settings.isWhitePaperColorTransformed) |     if (m_settings.isWhitePaperColorTransformed) | ||||||
|     { |     { | ||||||
|         m_paperColor = getColorFromDeviceRGB(PDFColor(1.0f, 1.0f, 1.0f), RenderingIntent::AbsoluteColorimetric, nullptr); |         m_paperColor = getColorFromDeviceRGB(PDFColor(1.0f, 1.0f, 1.0f), RenderingIntent::AbsoluteColorimetric, nullptr); | ||||||
| @@ -533,6 +557,11 @@ void PDFLittleCMS::init() | |||||||
|     m_transformationCache.reserve(64); |     m_transformationCache.reserve(64); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool PDFLittleCMS::isSoftProofing() const | ||||||
|  | { | ||||||
|  |     return (m_settings.isSoftProofing || m_settings.isGamutChecking) && m_profiles[SoftProofing]; | ||||||
|  | } | ||||||
|  |  | ||||||
| cmsHPROFILE PDFLittleCMS::createProfile(const QString& id, const PDFColorProfileIdentifiers& profileDescriptors) const | cmsHPROFILE PDFLittleCMS::createProfile(const QString& id, const PDFColorProfileIdentifiers& profileDescriptors) const | ||||||
| { | { | ||||||
|     auto it = std::find_if(profileDescriptors.cbegin(), profileDescriptors.cend(), [&id](const PDFColorProfileIdentifier& identifier) { return identifier.id == id; }); |     auto it = std::find_if(profileDescriptors.cbegin(), profileDescriptors.cend(), [&id](const PDFColorProfileIdentifier& identifier) { return identifier.id == id; }); | ||||||
| @@ -621,7 +650,22 @@ cmsHTRANSFORM PDFLittleCMS::getTransform(Profile profile, RenderingIntent intent | |||||||
|  |  | ||||||
|             if (input && output) |             if (input && output) | ||||||
|             { |             { | ||||||
|                 transform = cmsCreateTransform(input, getProfileDataFormat(input), output, isRGB888Buffer ? TYPE_RGB_8 : TYPE_RGB_FLT, getLittleCMSRenderingIntent(intent), getTransformationFlags()); |                 if (isSoftProofing()) | ||||||
|  |                 { | ||||||
|  |                     cmsHPROFILE proofingProfile = m_profiles[SoftProofing]; | ||||||
|  |                     RenderingIntent proofingIntent = m_settings.proofingIntent; | ||||||
|  |                     if (m_settings.proofingIntent == RenderingIntent::Auto) | ||||||
|  |                     { | ||||||
|  |                         proofingIntent = intent; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     transform = cmsCreateProofingTransform(input, getProfileDataFormat(input), output, isRGB888Buffer ? TYPE_RGB_8 : TYPE_RGB_FLT, proofingProfile, | ||||||
|  |                                                            getLittleCMSRenderingIntent(intent), getLittleCMSRenderingIntent(proofingIntent), getTransformationFlags()); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     transform = cmsCreateTransform(input, getProfileDataFormat(input), output, isRGB888Buffer ? TYPE_RGB_8 : TYPE_RGB_FLT, getLittleCMSRenderingIntent(intent), getTransformationFlags()); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             it = m_transformationCache.insert(std::make_pair(key, transform)).first; |             it = m_transformationCache.insert(std::make_pair(key, transform)).first; | ||||||
| @@ -662,6 +706,16 @@ cmsUInt32Number PDFLittleCMS::getTransformationFlags() const | |||||||
|             break; |             break; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if (m_settings.isGamutChecking) | ||||||
|  |     { | ||||||
|  |         flags |= cmsFLAGS_GAMUTCHECK; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (m_settings.isSoftProofing) | ||||||
|  |     { | ||||||
|  |         flags |= cmsFLAGS_SOFTPROOFING; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return flags; |     return flags; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -60,13 +60,17 @@ struct PDFCMSSettings | |||||||
|     System system = System::Generic; |     System system = System::Generic; | ||||||
|     Accuracy accuracy = Accuracy::Medium; |     Accuracy accuracy = Accuracy::Medium; | ||||||
|     RenderingIntent intent = RenderingIntent::Auto; |     RenderingIntent intent = RenderingIntent::Auto; | ||||||
|  |     RenderingIntent proofingIntent = RenderingIntent::RelativeColorimetric; | ||||||
|     bool isBlackPointCompensationActive = true; |     bool isBlackPointCompensationActive = true; | ||||||
|     bool isWhitePaperColorTransformed = false; |     bool isWhitePaperColorTransformed = false; | ||||||
|     QString outputCS;           ///< Output (rendering) color space |     bool isGamutChecking = false; | ||||||
|     QString deviceGray;         ///< Identifiers for color space (device gray) |     bool isSoftProofing = false; | ||||||
|     QString deviceRGB;          ///< Identifiers for color space (device RGB) |     QString outputCS;               ///< Output (rendering) color space | ||||||
|     QString deviceCMYK;         ///< Identifiers for color space (device CMYK) |     QString deviceGray;             ///< Identifiers for color space (device gray) | ||||||
|     QString profileDirectory;   ///< Directory containing color profiles |     QString deviceRGB;              ///< Identifiers for color space (device RGB) | ||||||
|  |     QString deviceCMYK;             ///< Identifiers for color space (device CMYK) | ||||||
|  |     QString softProofingProfile;    ///< Identifiers for soft proofing profile | ||||||
|  |     QString profileDirectory;       ///< Directory containing color profiles | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Color management system base class. It contains functions to transform | /// Color management system base class. It contains functions to transform | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ namespace pdf | |||||||
| PDFPlugin::PDFPlugin(QObject* parent) : | PDFPlugin::PDFPlugin(QObject* parent) : | ||||||
|     QObject(parent), |     QObject(parent), | ||||||
|     m_widget(nullptr), |     m_widget(nullptr), | ||||||
|  |     m_cmsManager(nullptr), | ||||||
|     m_document(nullptr) |     m_document(nullptr) | ||||||
| { | { | ||||||
|  |  | ||||||
| @@ -33,6 +34,11 @@ void PDFPlugin::setWidget(PDFWidget* widget) | |||||||
|     m_widget = widget; |     m_widget = widget; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void PDFPlugin::setCMSManager(PDFCMSManager* manager) | ||||||
|  | { | ||||||
|  |     m_cmsManager = manager; | ||||||
|  | } | ||||||
|  |  | ||||||
| void PDFPlugin::setDocument(const PDFModifiedDocument& document) | void PDFPlugin::setDocument(const PDFModifiedDocument& document) | ||||||
| { | { | ||||||
|     m_document = document; |     m_document = document; | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ class QAction; | |||||||
| namespace pdf | namespace pdf | ||||||
| { | { | ||||||
| class PDFWidget; | class PDFWidget; | ||||||
|  | class PDFCMSManager; | ||||||
|  |  | ||||||
| struct Pdf4QtLIBSHARED_EXPORT PDFPluginInfo | struct Pdf4QtLIBSHARED_EXPORT PDFPluginInfo | ||||||
| { | { | ||||||
| @@ -51,11 +52,13 @@ public: | |||||||
|     explicit PDFPlugin(QObject* parent); |     explicit PDFPlugin(QObject* parent); | ||||||
|  |  | ||||||
|     virtual void setWidget(PDFWidget* widget); |     virtual void setWidget(PDFWidget* widget); | ||||||
|  |     virtual void setCMSManager(PDFCMSManager* manager); | ||||||
|     virtual void setDocument(const PDFModifiedDocument& document); |     virtual void setDocument(const PDFModifiedDocument& document); | ||||||
|     virtual std::vector<QAction*> getActions() const; |     virtual std::vector<QAction*> getActions() const; | ||||||
|  |  | ||||||
| protected: | protected: | ||||||
|     PDFWidget* m_widget; |     PDFWidget* m_widget; | ||||||
|  |     PDFCMSManager* m_cmsManager; | ||||||
|     PDFDocument* m_document; |     PDFDocument* m_document; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1686,6 +1686,7 @@ void PDFProgramController::loadPlugins() | |||||||
|     for (const auto& plugin : m_loadedPlugins) |     for (const auto& plugin : m_loadedPlugins) | ||||||
|     { |     { | ||||||
|         plugin.second->setWidget(m_pdfWidget); |         plugin.second->setWidget(m_pdfWidget); | ||||||
|  |         plugin.second->setCMSManager(m_CMSManager); | ||||||
|         std::vector<QAction*> actions = plugin.second->getActions(); |         std::vector<QAction*> actions = plugin.second->getActions(); | ||||||
|  |  | ||||||
|         if (!actions.empty()) |         if (!actions.empty()) | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ | |||||||
|      <item> |      <item> | ||||||
|       <widget class="QStackedWidget" name="stackedWidget"> |       <widget class="QStackedWidget" name="stackedWidget"> | ||||||
|        <property name="currentIndex"> |        <property name="currentIndex"> | ||||||
|         <number>11</number> |         <number>5</number> | ||||||
|        </property> |        </property> | ||||||
|        <widget class="QWidget" name="enginePage"> |        <widget class="QWidget" name="enginePage"> | ||||||
|         <layout class="QVBoxLayout" name="enginePageLayout"> |         <layout class="QVBoxLayout" name="enginePageLayout"> | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
| TEMPLATE = subdirs | TEMPLATE = subdirs | ||||||
|  |  | ||||||
| SUBDIRS += \ | SUBDIRS += \ | ||||||
|     DimensionsPlugin |     DimensionsPlugin \ | ||||||
|  |     SoftProofingPlugin | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |     "Name" : "SoftProofing", | ||||||
|  |     "Author" : "Jakub Melka", | ||||||
|  |     "Version" : "1.0.0", | ||||||
|  |     "License" : "LGPL v3", | ||||||
|  |     "Description" : "Perform soft-proofing / gamut checking with CMYK profiles on a document." | ||||||
|  | } | ||||||
| @@ -0,0 +1,52 @@ | |||||||
|  | #    Copyright (C) 2020 Jakub Melka | ||||||
|  | # | ||||||
|  | #    This file is part of Pdf4Qt. | ||||||
|  | # | ||||||
|  | #    Pdf4Qt is free software: you can redistribute it and/or modify | ||||||
|  | #    it under the terms of the GNU Lesser General Public License as published by | ||||||
|  | #    the Free Software Foundation, either version 3 of the License, or | ||||||
|  | #    (at your option) any later version. | ||||||
|  | # | ||||||
|  | #    Pdf4Qt is distributed in the hope that it will be useful, | ||||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | #    GNU Lesser General Public License for more details. | ||||||
|  | # | ||||||
|  | #    You should have received a copy of the GNU Lesser General Public License | ||||||
|  | #    along with Pdf4Qt.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | TEMPLATE = lib | ||||||
|  | DEFINES += SOFTPROOFINGPLUGIN_LIBRARY | ||||||
|  |  | ||||||
|  | QT += gui widgets | ||||||
|  |  | ||||||
|  | LIBS += -L$$OUT_PWD/../.. | ||||||
|  |  | ||||||
|  | LIBS += -lPdf4QtLib | ||||||
|  |  | ||||||
|  | QMAKE_CXXFLAGS += /std:c++latest /utf-8 | ||||||
|  |  | ||||||
|  | INCLUDEPATH += $$PWD/../../Pdf4QtLib/Sources | ||||||
|  |  | ||||||
|  | DESTDIR = $$OUT_PWD/../../pdfplugins | ||||||
|  |  | ||||||
|  | CONFIG += c++11 | ||||||
|  |  | ||||||
|  | SOURCES += \ | ||||||
|  |     softproofingplugin.cpp \ | ||||||
|  |     settingsdialog.cpp | ||||||
|  |  | ||||||
|  | HEADERS += \ | ||||||
|  |     softproofingplugin.h \ | ||||||
|  |     settingsdialog.h | ||||||
|  |  | ||||||
|  | CONFIG += force_debug_info | ||||||
|  |  | ||||||
|  | DISTFILES += \ | ||||||
|  |     SoftProofingPlugin.json | ||||||
|  |  | ||||||
|  | RESOURCES += \ | ||||||
|  |     icons.qrc | ||||||
|  |  | ||||||
|  | FORMS += \ | ||||||
|  |     settingsdialog.ui | ||||||
							
								
								
									
										111
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/gamut-checking.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/gamut-checking.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 9.8 KiB | 
							
								
								
									
										7
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/icons.qrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/icons.qrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <RCC> | ||||||
|  |     <qresource prefix="/pdfplugins/softproofing"> | ||||||
|  |         <file>gamut-checking.svg</file> | ||||||
|  |         <file>soft-proofing.svg</file> | ||||||
|  |         <file>settings.svg</file> | ||||||
|  |     </qresource> | ||||||
|  | </RCC> | ||||||
							
								
								
									
										110
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settings.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settings.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 10 KiB | 
							
								
								
									
										58
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settingsdialog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settingsdialog.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | //    Copyright (C) 2020 Jakub Melka | ||||||
|  | // | ||||||
|  | //    This file is part of Pdf4Qt. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is free software: you can redistribute it and/or modify | ||||||
|  | //    it under the terms of the GNU Lesser General Public License as published by | ||||||
|  | //    the Free Software Foundation, either version 3 of the License, or | ||||||
|  | //    (at your option) any later version. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is distributed in the hope that it will be useful, | ||||||
|  | //    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | //    GNU Lesser General Public License for more details. | ||||||
|  | // | ||||||
|  | //    You should have received a copy of the GNU Lesser General Public License | ||||||
|  | //    along with Pdf4Qt.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | #include "settingsdialog.h" | ||||||
|  | #include "ui_settingsdialog.h" | ||||||
|  |  | ||||||
|  | #include "pdfwidgetutils.h" | ||||||
|  |  | ||||||
|  | SettingsDialog::SettingsDialog(QWidget* parent, const pdf::PDFCMSSettings& settings, const pdf::PDFCMSManager* manager) : | ||||||
|  |     QDialog(parent), | ||||||
|  |     ui(new Ui::SettingsDialog), | ||||||
|  |     m_settings(settings) | ||||||
|  | { | ||||||
|  |     ui->setupUi(this); | ||||||
|  |  | ||||||
|  |     ui->cmsProofingIntentComboBox->addItem(tr("Auto"), int(pdf::RenderingIntent::Auto)); | ||||||
|  |     ui->cmsProofingIntentComboBox->addItem(tr("Perceptual"), int(pdf::RenderingIntent::Perceptual)); | ||||||
|  |     ui->cmsProofingIntentComboBox->addItem(tr("Relative colorimetric"), int(pdf::RenderingIntent::RelativeColorimetric)); | ||||||
|  |     ui->cmsProofingIntentComboBox->addItem(tr("Absolute colorimetric"), int(pdf::RenderingIntent::AbsoluteColorimetric)); | ||||||
|  |     ui->cmsProofingIntentComboBox->addItem(tr("Saturation"), int(pdf::RenderingIntent::Saturation)); | ||||||
|  |  | ||||||
|  |     for (const pdf::PDFColorProfileIdentifier& identifier : manager->getCMYKProfiles()) | ||||||
|  |     { | ||||||
|  |         ui->cmsProofingColorProfileComboBox->addItem(identifier.name, identifier.id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ui->cmsProofingIntentComboBox->setCurrentIndex(ui->cmsProofingIntentComboBox->findData(int(m_settings.proofingIntent))); | ||||||
|  |     ui->cmsProofingColorProfileComboBox->setCurrentIndex(ui->cmsProofingColorProfileComboBox->findData(m_settings.softProofingProfile)); | ||||||
|  |  | ||||||
|  |     setMinimumSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(320, 160))); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | SettingsDialog::~SettingsDialog() | ||||||
|  | { | ||||||
|  |     delete ui; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SettingsDialog::accept() | ||||||
|  | { | ||||||
|  |     m_settings.proofingIntent = static_cast<pdf::RenderingIntent>(ui->cmsProofingIntentComboBox->currentData().toInt()); | ||||||
|  |     m_settings.softProofingProfile = ui->cmsProofingColorProfileComboBox->currentData().toString(); | ||||||
|  |  | ||||||
|  |     QDialog::accept(); | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settingsdialog.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settingsdialog.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | //    Copyright (C) 2020 Jakub Melka | ||||||
|  | // | ||||||
|  | //    This file is part of Pdf4Qt. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is free software: you can redistribute it and/or modify | ||||||
|  | //    it under the terms of the GNU Lesser General Public License as published by | ||||||
|  | //    the Free Software Foundation, either version 3 of the License, or | ||||||
|  | //    (at your option) any later version. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is distributed in the hope that it will be useful, | ||||||
|  | //    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | //    GNU Lesser General Public License for more details. | ||||||
|  | // | ||||||
|  | //    You should have received a copy of the GNU Lesser General Public License | ||||||
|  | //    along with Pdf4Qt.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | #ifndef SETTINGSDIALOG_H | ||||||
|  | #define SETTINGSDIALOG_H | ||||||
|  |  | ||||||
|  | #include "softproofingplugin.h" | ||||||
|  | #include "pdfcms.h" | ||||||
|  |  | ||||||
|  | #include <QDialog> | ||||||
|  |  | ||||||
|  | class QComboBox; | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class SettingsDialog; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class SettingsDialog : public QDialog | ||||||
|  | { | ||||||
|  |     Q_OBJECT | ||||||
|  |  | ||||||
|  | public: | ||||||
|  |     explicit SettingsDialog(QWidget* parent, const pdf::PDFCMSSettings& settings, const pdf::PDFCMSManager* manager); | ||||||
|  |     virtual ~SettingsDialog() override; | ||||||
|  |  | ||||||
|  |     virtual void accept() override; | ||||||
|  |  | ||||||
|  |     const pdf::PDFCMSSettings& getSettings() const { return m_settings; } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     Ui::SettingsDialog* ui; | ||||||
|  |  | ||||||
|  |     pdf::PDFCMSSettings m_settings; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif // SETTINGSDIALOG_H | ||||||
							
								
								
									
										106
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settingsdialog.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/settingsdialog.ui
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <ui version="4.0"> | ||||||
|  |  <class>SettingsDialog</class> | ||||||
|  |  <widget class="QDialog" name="SettingsDialog"> | ||||||
|  |   <property name="geometry"> | ||||||
|  |    <rect> | ||||||
|  |     <x>0</x> | ||||||
|  |     <y>0</y> | ||||||
|  |     <width>254</width> | ||||||
|  |     <height>165</height> | ||||||
|  |    </rect> | ||||||
|  |   </property> | ||||||
|  |   <property name="windowTitle"> | ||||||
|  |    <string>Soft Proofing Settings</string> | ||||||
|  |   </property> | ||||||
|  |   <layout class="QVBoxLayout" name="verticalLayout"> | ||||||
|  |    <item> | ||||||
|  |     <widget class="QGroupBox" name="softProofingGroupBox"> | ||||||
|  |      <property name="title"> | ||||||
|  |       <string>Soft Proofing Settings</string> | ||||||
|  |      </property> | ||||||
|  |      <layout class="QGridLayout" name="gridLayout"> | ||||||
|  |       <item row="1" column="0"> | ||||||
|  |        <widget class="QLabel" name="cmsOutputProfileLabel"> | ||||||
|  |         <property name="text"> | ||||||
|  |          <string>Proofing profile</string> | ||||||
|  |         </property> | ||||||
|  |        </widget> | ||||||
|  |       </item> | ||||||
|  |       <item row="1" column="1"> | ||||||
|  |        <widget class="QComboBox" name="cmsProofingColorProfileComboBox"/> | ||||||
|  |       </item> | ||||||
|  |       <item row="0" column="0"> | ||||||
|  |        <widget class="QLabel" name="cmsProofingIntentLabel"> | ||||||
|  |         <property name="text"> | ||||||
|  |          <string>Proofing intent</string> | ||||||
|  |         </property> | ||||||
|  |        </widget> | ||||||
|  |       </item> | ||||||
|  |       <item row="0" column="1"> | ||||||
|  |        <widget class="QComboBox" name="cmsProofingIntentComboBox"/> | ||||||
|  |       </item> | ||||||
|  |       <item row="2" column="0"> | ||||||
|  |        <spacer name="verticalSpacer"> | ||||||
|  |         <property name="orientation"> | ||||||
|  |          <enum>Qt::Vertical</enum> | ||||||
|  |         </property> | ||||||
|  |         <property name="sizeHint" stdset="0"> | ||||||
|  |          <size> | ||||||
|  |           <width>20</width> | ||||||
|  |           <height>40</height> | ||||||
|  |          </size> | ||||||
|  |         </property> | ||||||
|  |        </spacer> | ||||||
|  |       </item> | ||||||
|  |      </layout> | ||||||
|  |     </widget> | ||||||
|  |    </item> | ||||||
|  |    <item> | ||||||
|  |     <widget class="QDialogButtonBox" name="buttonBox"> | ||||||
|  |      <property name="orientation"> | ||||||
|  |       <enum>Qt::Horizontal</enum> | ||||||
|  |      </property> | ||||||
|  |      <property name="standardButtons"> | ||||||
|  |       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> | ||||||
|  |      </property> | ||||||
|  |     </widget> | ||||||
|  |    </item> | ||||||
|  |   </layout> | ||||||
|  |  </widget> | ||||||
|  |  <resources/> | ||||||
|  |  <connections> | ||||||
|  |   <connection> | ||||||
|  |    <sender>buttonBox</sender> | ||||||
|  |    <signal>accepted()</signal> | ||||||
|  |    <receiver>SettingsDialog</receiver> | ||||||
|  |    <slot>accept()</slot> | ||||||
|  |    <hints> | ||||||
|  |     <hint type="sourcelabel"> | ||||||
|  |      <x>248</x> | ||||||
|  |      <y>254</y> | ||||||
|  |     </hint> | ||||||
|  |     <hint type="destinationlabel"> | ||||||
|  |      <x>157</x> | ||||||
|  |      <y>274</y> | ||||||
|  |     </hint> | ||||||
|  |    </hints> | ||||||
|  |   </connection> | ||||||
|  |   <connection> | ||||||
|  |    <sender>buttonBox</sender> | ||||||
|  |    <signal>rejected()</signal> | ||||||
|  |    <receiver>SettingsDialog</receiver> | ||||||
|  |    <slot>reject()</slot> | ||||||
|  |    <hints> | ||||||
|  |     <hint type="sourcelabel"> | ||||||
|  |      <x>316</x> | ||||||
|  |      <y>260</y> | ||||||
|  |     </hint> | ||||||
|  |     <hint type="destinationlabel"> | ||||||
|  |      <x>286</x> | ||||||
|  |      <y>274</y> | ||||||
|  |     </hint> | ||||||
|  |    </hints> | ||||||
|  |   </connection> | ||||||
|  |  </connections> | ||||||
|  | </ui> | ||||||
							
								
								
									
										100
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/soft-proofing.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/soft-proofing.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 8.4 KiB | 
							
								
								
									
										141
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/softproofingplugin.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/softproofingplugin.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,141 @@ | |||||||
|  | //    Copyright (C) 2020 Jakub Melka | ||||||
|  | // | ||||||
|  | //    This file is part of Pdf4Qt. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is free software: you can redistribute it and/or modify | ||||||
|  | //    it under the terms of the GNU Lesser General Public License as published by | ||||||
|  | //    the Free Software Foundation, either version 3 of the License, or | ||||||
|  | //    (at your option) any later version. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is distributed in the hope that it will be useful, | ||||||
|  | //    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | //    GNU Lesser General Public License for more details. | ||||||
|  | // | ||||||
|  | //    You should have received a copy of the GNU Lesser General Public License | ||||||
|  | //    along with Pdf4Qt.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | #include "softproofingplugin.h" | ||||||
|  | #include "settingsdialog.h" | ||||||
|  |  | ||||||
|  | #include "pdfcms.h" | ||||||
|  | #include "pdfutils.h" | ||||||
|  | #include "pdfdrawwidget.h" | ||||||
|  |  | ||||||
|  | #include <QAction> | ||||||
|  |  | ||||||
|  | namespace pdfplugin | ||||||
|  | { | ||||||
|  |  | ||||||
|  | SoftProofingPlugin::SoftProofingPlugin() : | ||||||
|  |     pdf::PDFPlugin(nullptr), | ||||||
|  |     m_enableSoftProofingAction(nullptr), | ||||||
|  |     m_enableGamutCheckingAction(nullptr), | ||||||
|  |     m_showSettingsAction(nullptr), | ||||||
|  |     m_isLoadingGUI(false) | ||||||
|  | { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::setWidget(pdf::PDFWidget* widget) | ||||||
|  | { | ||||||
|  |     Q_ASSERT(!m_widget); | ||||||
|  |  | ||||||
|  |     BaseClass::setWidget(widget); | ||||||
|  |  | ||||||
|  |     m_enableSoftProofingAction = new QAction(QIcon(":/pdfplugins/softproofing/soft-proofing.svg"), tr("Soft Proofing"), this); | ||||||
|  |     m_enableGamutCheckingAction = new QAction(QIcon(":/pdfplugins/softproofing/gamut-checking.svg"), tr("Gamut Checking"), this); | ||||||
|  |     m_showSettingsAction = new QAction(QIcon(":/pdfplugins/softproofing/settings.svg"), tr("Soft Proofing Settings"), this); | ||||||
|  |  | ||||||
|  |     m_enableSoftProofingAction->setCheckable(true); | ||||||
|  |     m_enableGamutCheckingAction->setCheckable(true); | ||||||
|  |  | ||||||
|  |     m_enableSoftProofingAction->setObjectName("actionSoftProofing_EnableSoftProofing"); | ||||||
|  |     m_enableGamutCheckingAction->setObjectName("actionSoftProofing_EnableGamutChecking"); | ||||||
|  |     m_showSettingsAction->setObjectName("actionSoftProofing_ShowSettings"); | ||||||
|  |  | ||||||
|  |     connect(m_enableSoftProofingAction, &QAction::triggered, this, &SoftProofingPlugin::onSoftProofingTriggered); | ||||||
|  |     connect(m_enableGamutCheckingAction, &QAction::triggered, this, &SoftProofingPlugin::onGamutCheckingTriggered); | ||||||
|  |     connect(m_showSettingsAction, &QAction::triggered, this, &SoftProofingPlugin::onSettingsTriggered); | ||||||
|  |  | ||||||
|  |     updateActions(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::setCMSManager(pdf::PDFCMSManager* manager) | ||||||
|  | { | ||||||
|  |     BaseClass::setCMSManager(manager); | ||||||
|  |  | ||||||
|  |     connect(manager, &pdf::PDFCMSManager::colorManagementSystemChanged, this, &SoftProofingPlugin::updateActions); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::setDocument(const pdf::PDFModifiedDocument& document) | ||||||
|  | { | ||||||
|  |     BaseClass::setDocument(document); | ||||||
|  |  | ||||||
|  |     if (document.hasReset()) | ||||||
|  |     { | ||||||
|  |         updateActions(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | std::vector<QAction*> SoftProofingPlugin::getActions() const | ||||||
|  | { | ||||||
|  |     return { m_enableSoftProofingAction, m_enableGamutCheckingAction, m_showSettingsAction }; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::onSoftProofingTriggered() | ||||||
|  | { | ||||||
|  |     if (m_isLoadingGUI) | ||||||
|  |     { | ||||||
|  |         // We are just updating gui, do nothing | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     pdf::PDFCMSSettings settings = m_cmsManager->getSettings(); | ||||||
|  |     settings.isSoftProofing = m_enableSoftProofingAction->isChecked(); | ||||||
|  |     m_cmsManager->setSettings(settings); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::onGamutCheckingTriggered() | ||||||
|  | { | ||||||
|  |     if (m_isLoadingGUI) | ||||||
|  |     { | ||||||
|  |         // We are just updating gui, do nothing | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     pdf::PDFCMSSettings settings = m_cmsManager->getSettings(); | ||||||
|  |     settings.isGamutChecking = m_enableGamutCheckingAction->isChecked(); | ||||||
|  |     m_cmsManager->setSettings(settings); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::onSettingsTriggered() | ||||||
|  | { | ||||||
|  |     SettingsDialog settingsDialog(m_widget, m_cmsManager->getSettings(), m_cmsManager); | ||||||
|  |     if (settingsDialog.exec() == SettingsDialog::Accepted) | ||||||
|  |     { | ||||||
|  |         m_cmsManager->setSettings(settingsDialog.getSettings()); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void SoftProofingPlugin::updateActions() | ||||||
|  | { | ||||||
|  |     pdf::PDFTemporaryValueChange guard(&m_isLoadingGUI, true); | ||||||
|  |  | ||||||
|  |     if (m_enableSoftProofingAction) | ||||||
|  |     { | ||||||
|  |         m_enableSoftProofingAction->setEnabled(m_widget); | ||||||
|  |         m_enableSoftProofingAction->setChecked(m_cmsManager && m_cmsManager->getSettings().isSoftProofing); | ||||||
|  |     } | ||||||
|  |     if (m_enableGamutCheckingAction) | ||||||
|  |     { | ||||||
|  |         m_enableGamutCheckingAction->setEnabled(m_widget); | ||||||
|  |         m_enableGamutCheckingAction->setChecked(m_cmsManager && m_cmsManager->getSettings().isGamutChecking); | ||||||
|  |     } | ||||||
|  |     if (m_showSettingsAction) | ||||||
|  |     { | ||||||
|  |         m_showSettingsAction->setEnabled(m_widget); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/softproofingplugin.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Pdf4QtViewerPlugins/SoftProofingPlugin/softproofingplugin.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | //    Copyright (C) 2020 Jakub Melka | ||||||
|  | // | ||||||
|  | //    This file is part of Pdf4Qt. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is free software: you can redistribute it and/or modify | ||||||
|  | //    it under the terms of the GNU Lesser General Public License as published by | ||||||
|  | //    the Free Software Foundation, either version 3 of the License, or | ||||||
|  | //    (at your option) any later version. | ||||||
|  | // | ||||||
|  | //    Pdf4Qt is distributed in the hope that it will be useful, | ||||||
|  | //    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | //    GNU Lesser General Public License for more details. | ||||||
|  | // | ||||||
|  | //    You should have received a copy of the GNU Lesser General Public License | ||||||
|  | //    along with Pdf4Qt.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | #ifndef SOFTPROOFINGPLUGIN_H | ||||||
|  | #define SOFTPROOFINGPLUGIN_H | ||||||
|  |  | ||||||
|  | #include "pdfplugin.h" | ||||||
|  |  | ||||||
|  | #include <QObject> | ||||||
|  |  | ||||||
|  | namespace pdfplugin | ||||||
|  | { | ||||||
|  |  | ||||||
|  | class SoftProofingPlugin : public pdf::PDFPlugin | ||||||
|  | { | ||||||
|  |     Q_OBJECT | ||||||
|  |     Q_PLUGIN_METADATA(IID "Pdf4Qt.SoftProofingPlugin" FILE "SoftProofingPlugin.json") | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     using BaseClass = pdf::PDFPlugin; | ||||||
|  |  | ||||||
|  | public: | ||||||
|  |     SoftProofingPlugin(); | ||||||
|  |  | ||||||
|  |     virtual void setWidget(pdf::PDFWidget* widget) override; | ||||||
|  |     virtual void setCMSManager(pdf::PDFCMSManager* manager) override; | ||||||
|  |     virtual void setDocument(const pdf::PDFModifiedDocument& document) override; | ||||||
|  |     virtual std::vector<QAction*> getActions() const override; | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     void onSoftProofingTriggered(); | ||||||
|  |     void onGamutCheckingTriggered(); | ||||||
|  |     void onSettingsTriggered(); | ||||||
|  |  | ||||||
|  |     void updateActions(); | ||||||
|  |  | ||||||
|  |     QAction* m_enableSoftProofingAction; | ||||||
|  |     QAction* m_enableGamutCheckingAction; | ||||||
|  |     QAction* m_showSettingsAction; | ||||||
|  |  | ||||||
|  |     bool m_isLoadingGUI; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | }   // namespace pdfplugin | ||||||
|  |  | ||||||
|  | #endif // SOFTPROOFINGPLUGIN_H | ||||||
		Reference in New Issue
	
	Block a user