From 03cbde9690ee45bbe23d166a5321cbc32628e113 Mon Sep 17 00:00:00 2001 From: Jakub Melka Date: Sun, 25 Feb 2024 15:19:35 +0100 Subject: [PATCH] Issue #123: Final bugfixing --- Pdf4QtDocPageOrganizer/pageitemdelegate.cpp | 2 +- Pdf4QtLibCore/sources/pdfblpainter.cpp | 5 ++--- Pdf4QtLibCore/sources/pdfglobal.h | 3 ++- Pdf4QtLibCore/sources/pdfrenderer.cpp | 5 +++-- Pdf4QtLibWidgets/sources/pdfdrawspacecontroller.cpp | 2 +- Pdf4QtLibWidgets/sources/pdfdrawwidget.cpp | 9 ++++++--- Pdf4QtViewer/pdfviewersettings.cpp | 4 ++-- Pdf4QtViewer/pdfviewersettingsdialog.cpp | 3 ++- PdfTool/pdftoolrender.cpp | 2 +- 9 files changed, 20 insertions(+), 15 deletions(-) diff --git a/Pdf4QtDocPageOrganizer/pageitemdelegate.cpp b/Pdf4QtDocPageOrganizer/pageitemdelegate.cpp index 5ea0afa..cf7f2f1 100644 --- a/Pdf4QtDocPageOrganizer/pageitemdelegate.cpp +++ b/Pdf4QtDocPageOrganizer/pageitemdelegate.cpp @@ -35,7 +35,7 @@ PageItemDelegate::PageItemDelegate(PageItemModel* model, QObject* parent) : m_rasterizer(nullptr) { m_rasterizer = new pdf::PDFRasterizer(this); - m_rasterizer->reset(pdf::RendererEngine::Blend2D); + m_rasterizer->reset(pdf::RendererEngine::Blend2D_SingleThread); } PageItemDelegate::~PageItemDelegate() diff --git a/Pdf4QtLibCore/sources/pdfblpainter.cpp b/Pdf4QtLibCore/sources/pdfblpainter.cpp index 5bdb688..23c0bd0 100644 --- a/Pdf4QtLibCore/sources/pdfblpainter.cpp +++ b/Pdf4QtLibCore/sources/pdfblpainter.cpp @@ -588,12 +588,11 @@ void PDFBLPaintEngine::drawPathImpl(const QPainterPath& path, bool enableStroke, QPainterPath transformedStrokedPath = m_currentTransform.map(strokedPath); QPainterPath finalTransformedStrokedPath = transformedStrokedPath.intersected(m_finalClipPath.value()); - BLVarCore strokeStyle; - if (!finalTransformedStrokedPath.isEmpty() && m_blContext->getStrokeStyle(strokeStyle) == BL_SUCCESS) + if (!finalTransformedStrokedPath.isEmpty()) { m_blContext->save(); m_blContext->resetMatrix(); - m_blContext->setFillStyle(strokeStyle); + setBLBrush(m_blContext.value(), m_currentPen.brush()); m_blContext->fillPath(getBLPath(finalTransformedStrokedPath)); m_blContext->restore(); } diff --git a/Pdf4QtLibCore/sources/pdfglobal.h b/Pdf4QtLibCore/sources/pdfglobal.h index 9c36cdd..9f428a0 100644 --- a/Pdf4QtLibCore/sources/pdfglobal.h +++ b/Pdf4QtLibCore/sources/pdfglobal.h @@ -187,7 +187,8 @@ private: enum class RendererEngine { - Blend2D, + Blend2D_MultiThread, + Blend2D_SingleThread, QPainter, }; diff --git a/Pdf4QtLibCore/sources/pdfrenderer.cpp b/Pdf4QtLibCore/sources/pdfrenderer.cpp index 85f391f..1d8ef11 100644 --- a/Pdf4QtLibCore/sources/pdfrenderer.cpp +++ b/Pdf4QtLibCore/sources/pdfrenderer.cpp @@ -220,7 +220,7 @@ void PDFRenderer::compile(PDFPrecompiledPage* precompiledPage, size_t pageIndex) PDFRasterizer::PDFRasterizer(QObject* parent) : BaseClass(parent), - m_rendererEngine(RendererEngine::Blend2D) + m_rendererEngine(RendererEngine::Blend2D_SingleThread) { } @@ -247,7 +247,8 @@ QImage PDFRasterizer::render(PDFInteger pageIndex, QTransform matrix = PDFRenderer::createPagePointToDevicePointMatrix(page, QRect(QPoint(0, 0), size), extraRotation); - if (m_rendererEngine == RendererEngine::Blend2D) + if (m_rendererEngine == RendererEngine::Blend2D_MultiThread || + m_rendererEngine == RendererEngine::Blend2D_SingleThread) { PDFBLPaintDevice blPaintDevice(image, false); diff --git a/Pdf4QtLibWidgets/sources/pdfdrawspacecontroller.cpp b/Pdf4QtLibWidgets/sources/pdfdrawspacecontroller.cpp index 6dade91..845030d 100644 --- a/Pdf4QtLibWidgets/sources/pdfdrawspacecontroller.cpp +++ b/Pdf4QtLibWidgets/sources/pdfdrawspacecontroller.cpp @@ -470,7 +470,7 @@ PDFDrawWidgetProxy::PDFDrawWidgetProxy(QObject* parent) : m_rasterizer(new PDFRasterizer(this)), m_progress(nullptr), m_cacheClearTimer(new QTimer(this)), - m_rendererEngine(RendererEngine::Blend2D) + m_rendererEngine(RendererEngine::Blend2D_MultiThread) { m_controller = new PDFDrawSpaceController(this); connect(m_controller, &PDFDrawSpaceController::drawSpaceChanged, this, &PDFDrawWidgetProxy::update); diff --git a/Pdf4QtLibWidgets/sources/pdfdrawwidget.cpp b/Pdf4QtLibWidgets/sources/pdfdrawwidget.cpp index 5fe799e..bddd386 100644 --- a/Pdf4QtLibWidgets/sources/pdfdrawwidget.cpp +++ b/Pdf4QtLibWidgets/sources/pdfdrawwidget.cpp @@ -578,9 +578,11 @@ void PDFDrawWidget::paintEvent(QPaintEvent* event) { Q_UNUSED(event); - switch (getPDFWidget()->getDrawWidgetProxy()->getRendererEngine()) + RendererEngine rendererEngine = getPDFWidget()->getDrawWidgetProxy()->getRendererEngine(); + switch (rendererEngine) { - case RendererEngine::Blend2D: + case RendererEngine::Blend2D_MultiThread: + case RendererEngine::Blend2D_SingleThread: { QRect rect = this->rect(); @@ -598,7 +600,8 @@ void PDFDrawWidget::paintEvent(QPaintEvent* event) m_blend2DframeBuffer = QImage(requiredSize, QImage::Format_ARGB32_Premultiplied); } - PDFBLPaintDevice blPaintDevice(m_blend2DframeBuffer, true); + const bool multithreaded = rendererEngine == RendererEngine::Blend2D_MultiThread; + PDFBLPaintDevice blPaintDevice(m_blend2DframeBuffer, multithreaded); QPainter blPainter; if (blPainter.begin(&blPaintDevice)) diff --git a/Pdf4QtViewer/pdfviewersettings.cpp b/Pdf4QtViewer/pdfviewersettings.cpp index 4b12bf6..a4ad72f 100644 --- a/Pdf4QtViewer/pdfviewersettings.cpp +++ b/Pdf4QtViewer/pdfviewersettings.cpp @@ -43,7 +43,7 @@ void PDFViewerSettings::readSettings(QSettings& settings, const pdf::PDFCMSSetti settings.beginGroup("ViewerSettings"); m_settings.m_directory = settings.value("defaultDirectory", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)).toString(); m_settings.m_features = static_cast(settings.value("rendererFeaturesv2", static_cast(pdf::PDFRenderer::getDefaultFeatures())).toInt()); - m_settings.m_rendererEngine = static_cast(settings.value("renderingEngine", static_cast(pdf::RendererEngine::Blend2D)).toInt()); + m_settings.m_rendererEngine = static_cast(settings.value("renderingEngine", static_cast(pdf::RendererEngine::Blend2D_MultiThread)).toInt()); m_settings.m_prefetchPages = settings.value("prefetchPages", defaultSettings.m_prefetchPages).toBool(); m_settings.m_preferredMeshResolutionRatio = settings.value("preferredMeshResolutionRatio", defaultSettings.m_preferredMeshResolutionRatio).toDouble(); m_settings.m_minimalMeshResolutionRatio = settings.value("minimalMeshResolutionRatio", defaultSettings.m_minimalMeshResolutionRatio).toDouble(); @@ -253,7 +253,7 @@ void PDFViewerSettings::setColorTolerance(pdf::PDFReal colorTolerance) PDFViewerSettings::Settings::Settings() : m_features(pdf::PDFRenderer::getDefaultFeatures()), - m_rendererEngine(pdf::RendererEngine::Blend2D), + m_rendererEngine(pdf::RendererEngine::Blend2D_MultiThread), m_prefetchPages(true), m_preferredMeshResolutionRatio(0.02), m_minimalMeshResolutionRatio(0.005), diff --git a/Pdf4QtViewer/pdfviewersettingsdialog.cpp b/Pdf4QtViewer/pdfviewersettingsdialog.cpp index b8ef740..6c2ee11 100644 --- a/Pdf4QtViewer/pdfviewersettingsdialog.cpp +++ b/Pdf4QtViewer/pdfviewersettingsdialog.cpp @@ -103,7 +103,8 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin ui->optionsPagesWidget->setFont(font); ui->renderingEngineComboBox->addItem(tr("Software | QPainter"), static_cast(pdf::RendererEngine::QPainter)); - ui->renderingEngineComboBox->addItem(tr("Software | Blend2D | Multithreaded"), static_cast(pdf::RendererEngine::Blend2D)); + ui->renderingEngineComboBox->addItem(tr("Software | Blend2D | Parallel"), static_cast(pdf::RendererEngine::Blend2D_MultiThread)); + ui->renderingEngineComboBox->addItem(tr("Software | Blend2D | Sequential"), static_cast(pdf::RendererEngine::Blend2D_SingleThread)); ui->multithreadingComboBox->addItem(tr("Single thread"), static_cast(pdf::PDFExecutionPolicy::Strategy::SingleThreaded)); ui->multithreadingComboBox->addItem(tr("Multithreading (load balanced)"), static_cast(pdf::PDFExecutionPolicy::Strategy::PageMultithreaded)); diff --git a/PdfTool/pdftoolrender.cpp b/PdfTool/pdftoolrender.cpp index 6721d73..9caabcb 100644 --- a/PdfTool/pdftoolrender.cpp +++ b/PdfTool/pdftoolrender.cpp @@ -184,7 +184,7 @@ int PDFToolRenderBase::execute(const PDFToolOptions& options) pdf::PDFRasterizerPool rasterizerPool(&document, &fontCache, &cmsManager, &optionalContentActivity, options.renderFeatures, meshQualitySettings, pdf::PDFRasterizerPool::getCorrectedRasterizerCount(options.renderRasterizerCount), - options.renderUseSoftwareRendering ? pdf::RendererEngine::QPainter : pdf::RendererEngine::Blend2D, nullptr); + options.renderUseSoftwareRendering ? pdf::RendererEngine::QPainter : pdf::RendererEngine::Blend2D_SingleThread, nullptr); auto onRenderError = [this](pdf::PDFInteger pageIndex, pdf::PDFRenderError error) {