mirror of
				https://github.com/JakubMelka/PDF4QT.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	Issue #123: Final bugfixing
This commit is contained in:
		@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -187,7 +187,8 @@ private:
 | 
			
		||||
 | 
			
		||||
enum class RendererEngine
 | 
			
		||||
{
 | 
			
		||||
    Blend2D,
 | 
			
		||||
    Blend2D_MultiThread,
 | 
			
		||||
    Blend2D_SingleThread,
 | 
			
		||||
    QPainter,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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))
 | 
			
		||||
 
 | 
			
		||||
@@ -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<pdf::PDFRenderer::Features>(settings.value("rendererFeaturesv2", static_cast<int>(pdf::PDFRenderer::getDefaultFeatures())).toInt());
 | 
			
		||||
    m_settings.m_rendererEngine = static_cast<pdf::RendererEngine>(settings.value("renderingEngine", static_cast<int>(pdf::RendererEngine::Blend2D)).toInt());
 | 
			
		||||
    m_settings.m_rendererEngine = static_cast<pdf::RendererEngine>(settings.value("renderingEngine", static_cast<int>(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),
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,8 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin
 | 
			
		||||
    ui->optionsPagesWidget->setFont(font);
 | 
			
		||||
 | 
			
		||||
    ui->renderingEngineComboBox->addItem(tr("Software | QPainter"), static_cast<int>(pdf::RendererEngine::QPainter));
 | 
			
		||||
    ui->renderingEngineComboBox->addItem(tr("Software | Blend2D | Multithreaded"), static_cast<int>(pdf::RendererEngine::Blend2D));
 | 
			
		||||
    ui->renderingEngineComboBox->addItem(tr("Software | Blend2D | Parallel"), static_cast<int>(pdf::RendererEngine::Blend2D_MultiThread));
 | 
			
		||||
    ui->renderingEngineComboBox->addItem(tr("Software | Blend2D | Sequential"), static_cast<int>(pdf::RendererEngine::Blend2D_SingleThread));
 | 
			
		||||
 | 
			
		||||
    ui->multithreadingComboBox->addItem(tr("Single thread"), static_cast<int>(pdf::PDFExecutionPolicy::Strategy::SingleThreaded));
 | 
			
		||||
    ui->multithreadingComboBox->addItem(tr("Multithreading (load balanced)"), static_cast<int>(pdf::PDFExecutionPolicy::Strategy::PageMultithreaded));
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user