Ink coverage dialog

This commit is contained in:
Jakub Melka
2021-04-20 19:33:54 +02:00
parent cfedca6f4f
commit d8b5eed3a9
12 changed files with 829 additions and 5 deletions

View File

@ -3853,12 +3853,14 @@ PDFInkCoverageCalculator::PDFInkCoverageCalculator(const PDFDocument* document,
const PDFCMSManager* cmsManager,
const PDFOptionalContentActivity* optionalContentActivity,
const PDFInkMapper* inkMapper,
PDFProgress* progress,
PDFTransparencyRendererSettings settings) :
m_document(document),
m_fontCache(fontCache),
m_cmsManager(cmsManager),
m_optionalContentActivity(optionalContentActivity),
m_inkMapper(inkMapper),
m_progress(progress),
m_settings(settings)
{
Q_ASSERT(m_document);
@ -3876,6 +3878,11 @@ void PDFInkCoverageCalculator::perform(QSize size, const std::vector<PDFInteger>
return;
}
if (m_progress)
{
m_progress->start(pages.size(), ProgressStartupInfo());
}
auto calculatePageCoverage = [this, size](PDFInteger pageIndex)
{
if (pageIndex >= PDFInteger(m_document->getCatalog()->getPageCount()))
@ -3971,11 +3978,27 @@ void PDFInkCoverageCalculator::perform(QSize size, const std::vector<PDFInteger>
results.emplace_back(qMove(info));
}
if (m_progress)
{
m_progress->step();
}
QMutexLocker lock(&m_mutex);
m_inkCoverageResults[pageIndex] = qMove(results);
};
PDFExecutionPolicy::execute(PDFExecutionPolicy::Scope::Page, pages.begin(), pages.end(), calculatePageCoverage);
if (m_progress)
{
m_progress->finish();
}
}
void PDFInkCoverageCalculator::clear()
{
QMutexLocker lock(&m_mutex);
m_inkCoverageResults.clear();
}
const std::vector<PDFInkCoverageCalculator::InkCoverageChannelInfo>* PDFInkCoverageCalculator::getInkCoverage(PDFInteger pageIndex) const
@ -3990,4 +4013,27 @@ const std::vector<PDFInkCoverageCalculator::InkCoverageChannelInfo>* PDFInkCover
return &dummy;
}
const PDFInkCoverageCalculator::InkCoverageChannelInfo* PDFInkCoverageCalculator::findCoverageInfoByName(const std::vector<PDFInkCoverageCalculator::InkCoverageChannelInfo>& infos,
const QByteArray& name)
{
auto it = std::find_if(infos.cbegin(), infos.cend(), [&name](const auto& info) { return info.name == name; });
if (it != infos.cend())
{
return &*it;
}
return nullptr;
}
PDFInkCoverageCalculator::InkCoverageChannelInfo* PDFInkCoverageCalculator::findCoverageInfoByName(std::vector<PDFInkCoverageCalculator::InkCoverageChannelInfo>& infos, const QByteArray& name)
{
auto it = std::find_if(infos.begin(), infos.end(), [&name](const auto& info) { return info.name == name; });
if (it != infos.cend())
{
return &*it;
}
return nullptr;
}
} // namespace pdf