Use Windows color profiles

This commit is contained in:
Jakub Melka 2021-07-19 20:04:45 +02:00
parent f7d7902aa9
commit fc44fc1658
3 changed files with 34 additions and 5 deletions

View File

@ -29,6 +29,14 @@
#include <lcms2_plugin.h> #include <lcms2_plugin.h>
#pragma warning(pop) #pragma warning(pop)
#ifdef Q_OS_WIN
#define NOMINMAX
#include <Windows.h>
#include <Icm.h>
#pragma comment(lib, "Mscms")
#endif
#include <unordered_map> #include <unordered_map>
namespace pdf namespace pdf
@ -1723,11 +1731,19 @@ PDFColorProfileIdentifiers PDFCMSManager::getExternalProfilesImpl() const
PDFColorProfileIdentifiers result; PDFColorProfileIdentifiers result;
QStringList directories(m_settings.profileDirectory); QStringList directories(m_settings.profileDirectory);
QDir applicationDirectory(QApplication::applicationDirPath());
if (applicationDirectory.cd("colorprofiles")) #ifdef Q_OS_WIN
std::array<WCHAR, _MAX_PATH> buffer = { };
DWORD bufferSize = DWORD(buffer.size() * sizeof(WCHAR));
if (GetColorDirectoryW(NULL, buffer.data(), &bufferSize))
{ {
directories << applicationDirectory.absolutePath(); const DWORD charactersWithNull = bufferSize / sizeof(WCHAR);
const DWORD charactersWithoutNull = bufferSize > 0 ? charactersWithNull - 1 : 0;
QString directory = QString::fromWCharArray(buffer.data(), int(charactersWithoutNull));
directories << QDir::fromNativeSeparators(directory);
} }
#endif
for (const QString& directory : directories) for (const QString& directory : directories)
{ {

View File

@ -79,8 +79,22 @@ PDFOperationResult PDFDocumentManipulator::assemble(const AssembledPages& pages)
// manipulating a single document). // manipulating a single document).
if (!m_flags.testFlag(SingleDocument)) if (!m_flags.testFlag(SingleDocument))
{ {
PDFInteger lastDocumentIndex = pages.front().documentIndex;
std::vector<size_t> documentPartPageCounts = { 0 };
for (const AssembledPage& page : pages)
{
if (page.documentIndex == lastDocumentIndex)
{
++documentPartPageCounts.back();
}
else
{
documentPartPageCounts.push_back(1);
lastDocumentIndex = page.documentIndex;
}
}
std::vector<size_t> documentPartPageCounts;
documentBuilder.createDocumentParts(documentPartPageCounts); documentBuilder.createDocumentParts(documentPartPageCounts);
} }

View File

@ -2107,7 +2107,6 @@ void PDFProgramController::onActionDeveloperCreateInstaller()
// CoreLib package // CoreLib package
addStartMenuShortcut("pdf4qt_framework", "maintenancetool", tr("PDF4QT Maintenance Tool")); addStartMenuShortcut("pdf4qt_framework", "maintenancetool", tr("PDF4QT Maintenance Tool"));
addComponentMeta("pdf4qt_framework", tr("Framework (Core libraries)"), tr("Framework libraries and other data files required to run all other programs."), pdf::PDF_LIBRARY_VERSION, "pdf4qt_framework", true, true, true); addComponentMeta("pdf4qt_framework", tr("Framework (Core libraries)"), tr("Framework libraries and other data files required to run all other programs."), pdf::PDF_LIBRARY_VERSION, "pdf4qt_framework", true, true, true);
addDirectoryContent("pdf4qt_framework", "colorprofiles");
addDirectoryContent("pdf4qt_framework", "iconengines"); addDirectoryContent("pdf4qt_framework", "iconengines");
addDirectoryContent("pdf4qt_framework", "imageformats"); addDirectoryContent("pdf4qt_framework", "imageformats");
addDirectoryContent("pdf4qt_framework", "platforms"); addDirectoryContent("pdf4qt_framework", "platforms");