Issue #123: DPI scaling

This commit is contained in:
Jakub Melka
2024-02-10 18:42:58 +01:00
parent f3e1a94e1c
commit d1d0fe30d6
8 changed files with 103 additions and 66 deletions

View File

@ -187,6 +187,10 @@ bool PDFBLPaintEngine::begin(QPaintDevice*)
if (m_blContext->begin(m_blOffscreenBuffer.value(), info) == BL_SUCCESS) if (m_blContext->begin(m_blOffscreenBuffer.value(), info) == BL_SUCCESS)
{ {
m_blContext->clearAll(); m_blContext->clearAll();
qreal devicePixelRatio = m_qtOffscreenBuffer.devicePixelRatioF();
m_blContext->scale(devicePixelRatio);
m_blContext->userToMeta();
return true; return true;
} }
else else

View File

@ -583,9 +583,16 @@ void PDFDrawWidget::paintEvent(QPaintEvent* event)
case RendererEngine::Blend2D: case RendererEngine::Blend2D:
{ {
QRect rect = this->rect(); QRect rect = this->rect();
if (m_blend2DframeBuffer.size() != rect.size())
qreal devicePixelRatio = devicePixelRatioF();
m_blend2DframeBuffer.setDevicePixelRatio(devicePixelRatio);
m_blend2DframeBuffer.setDotsPerMeterX(logicalDpiX());
m_blend2DframeBuffer.setDotsPerMeterY(logicalDpiY());
QSize requiredSize = rect.size() * devicePixelRatio;
if (m_blend2DframeBuffer.size() != requiredSize)
{ {
m_blend2DframeBuffer = QImage(rect.size(), QImage::Format_ARGB32_Premultiplied); m_blend2DframeBuffer = QImage(requiredSize, QImage::Format_ARGB32_Premultiplied);
} }
PDFBLPaintDevice blPaintDevice(m_blend2DframeBuffer, true); PDFBLPaintDevice blPaintDevice(m_blend2DframeBuffer, true);

View File

@ -150,6 +150,7 @@ std::vector<QAction*> PDFActionManager::getRenderingOptionActions() const
RenderOptionTextAntialiasing, RenderOptionTextAntialiasing,
RenderOptionSmoothPictures, RenderOptionSmoothPictures,
RenderOptionIgnoreOptionalContentSettings, RenderOptionIgnoreOptionalContentSettings,
RenderOptionDisplayRenderTimes,
RenderOptionDisplayAnnotations, RenderOptionDisplayAnnotations,
RenderOptionInvertColors, RenderOptionInvertColors,
RenderOptionGrayscale, RenderOptionGrayscale,
@ -157,8 +158,7 @@ std::vector<QAction*> PDFActionManager::getRenderingOptionActions() const
RenderOptionHighContrast, RenderOptionHighContrast,
RenderOptionCustomColors, RenderOptionCustomColors,
RenderOptionShowTextBlocks, RenderOptionShowTextBlocks,
RenderOptionShowTextLines RenderOptionShowTextLines});
});
} }
std::vector<QAction*> PDFActionManager::getActions() const std::vector<QAction*> PDFActionManager::getActions() const
@ -266,6 +266,7 @@ void PDFActionManager::initActions(QSize iconSize, bool initializeStampActions)
setUserData(RenderOptionTextAntialiasing, pdf::PDFRenderer::TextAntialiasing); setUserData(RenderOptionTextAntialiasing, pdf::PDFRenderer::TextAntialiasing);
setUserData(RenderOptionSmoothPictures, pdf::PDFRenderer::SmoothImages); setUserData(RenderOptionSmoothPictures, pdf::PDFRenderer::SmoothImages);
setUserData(RenderOptionIgnoreOptionalContentSettings, pdf::PDFRenderer::IgnoreOptionalContent); setUserData(RenderOptionIgnoreOptionalContentSettings, pdf::PDFRenderer::IgnoreOptionalContent);
setUserData(RenderOptionDisplayRenderTimes, pdf::PDFRenderer::DisplayTimes);
setUserData(RenderOptionDisplayAnnotations, pdf::PDFRenderer::DisplayAnnotations); setUserData(RenderOptionDisplayAnnotations, pdf::PDFRenderer::DisplayAnnotations);
setUserData(RenderOptionInvertColors, pdf::PDFRenderer::ColorAdjust_Invert); setUserData(RenderOptionInvertColors, pdf::PDFRenderer::ColorAdjust_Invert);
setUserData(RenderOptionGrayscale, pdf::PDFRenderer::ColorAdjust_Grayscale); setUserData(RenderOptionGrayscale, pdf::PDFRenderer::ColorAdjust_Grayscale);

View File

@ -161,6 +161,7 @@ public:
RenderOptionTextAntialiasing, RenderOptionTextAntialiasing,
RenderOptionSmoothPictures, RenderOptionSmoothPictures,
RenderOptionIgnoreOptionalContentSettings, RenderOptionIgnoreOptionalContentSettings,
RenderOptionDisplayRenderTimes,
RenderOptionDisplayAnnotations, RenderOptionDisplayAnnotations,
RenderOptionInvertColors, RenderOptionInvertColors,
RenderOptionGrayscale, RenderOptionGrayscale,

View File

@ -160,6 +160,7 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
m_actionManager->setAction(PDFActionManager::RenderOptionTextAntialiasing, ui->actionRenderOptionTextAntialiasing); m_actionManager->setAction(PDFActionManager::RenderOptionTextAntialiasing, ui->actionRenderOptionTextAntialiasing);
m_actionManager->setAction(PDFActionManager::RenderOptionSmoothPictures, ui->actionRenderOptionSmoothPictures); m_actionManager->setAction(PDFActionManager::RenderOptionSmoothPictures, ui->actionRenderOptionSmoothPictures);
m_actionManager->setAction(PDFActionManager::RenderOptionIgnoreOptionalContentSettings, ui->actionRenderOptionIgnoreOptionalContentSettings); m_actionManager->setAction(PDFActionManager::RenderOptionIgnoreOptionalContentSettings, ui->actionRenderOptionIgnoreOptionalContentSettings);
m_actionManager->setAction(PDFActionManager::RenderOptionDisplayRenderTimes, ui->actionRenderOptionDisplayRenderTimes);
m_actionManager->setAction(PDFActionManager::RenderOptionDisplayAnnotations, ui->actionRenderOptionDisplayAnnotations); m_actionManager->setAction(PDFActionManager::RenderOptionDisplayAnnotations, ui->actionRenderOptionDisplayAnnotations);
m_actionManager->setAction(PDFActionManager::RenderOptionInvertColors, ui->actionColorInvert); m_actionManager->setAction(PDFActionManager::RenderOptionInvertColors, ui->actionColorInvert);
m_actionManager->setAction(PDFActionManager::RenderOptionGrayscale, ui->actionColorGrayscale); m_actionManager->setAction(PDFActionManager::RenderOptionGrayscale, ui->actionColorGrayscale);

View File

@ -90,6 +90,7 @@
<addaction name="actionRenderOptionSmoothPictures"/> <addaction name="actionRenderOptionSmoothPictures"/>
<addaction name="actionRenderOptionIgnoreOptionalContentSettings"/> <addaction name="actionRenderOptionIgnoreOptionalContentSettings"/>
<addaction name="actionRenderOptionDisplayAnnotations"/> <addaction name="actionRenderOptionDisplayAnnotations"/>
<addaction name="actionRenderOptionDisplayRenderTimes"/>
</widget> </widget>
<addaction name="menuPage_Layout"/> <addaction name="menuPage_Layout"/>
<addaction name="menuRendering_Options"/> <addaction name="menuRendering_Options"/>
@ -1153,6 +1154,17 @@
<string>If checked, bookmarks for main document chapters are generated automatically.</string> <string>If checked, bookmarks for main document chapters are generated automatically.</string>
</property> </property>
</action> </action>
<action name="actionRenderOptionDisplayRenderTimes">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Display Render Times</string>
</property>
<property name="menuRole">
<enum>QAction::NoRole</enum>
</property>
</action>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources> <resources>

View File

@ -130,6 +130,7 @@ PDFViewerMainWindowLite::PDFViewerMainWindowLite(QWidget* parent) :
m_actionManager->setAction(PDFActionManager::RenderOptionTextAntialiasing, ui->actionRenderOptionTextAntialiasing); m_actionManager->setAction(PDFActionManager::RenderOptionTextAntialiasing, ui->actionRenderOptionTextAntialiasing);
m_actionManager->setAction(PDFActionManager::RenderOptionSmoothPictures, ui->actionRenderOptionSmoothPictures); m_actionManager->setAction(PDFActionManager::RenderOptionSmoothPictures, ui->actionRenderOptionSmoothPictures);
m_actionManager->setAction(PDFActionManager::RenderOptionIgnoreOptionalContentSettings, ui->actionRenderOptionIgnoreOptionalContentSettings); m_actionManager->setAction(PDFActionManager::RenderOptionIgnoreOptionalContentSettings, ui->actionRenderOptionIgnoreOptionalContentSettings);
m_actionManager->setAction(PDFActionManager::RenderOptionDisplayRenderTimes, ui->actionRenderOptionDisplayRenderTimes);
m_actionManager->setAction(PDFActionManager::RenderOptionDisplayAnnotations, ui->actionRenderOptionDisplayAnnotations); m_actionManager->setAction(PDFActionManager::RenderOptionDisplayAnnotations, ui->actionRenderOptionDisplayAnnotations);
m_actionManager->setAction(PDFActionManager::RenderOptionInvertColors, ui->actionColorInvert); m_actionManager->setAction(PDFActionManager::RenderOptionInvertColors, ui->actionColorInvert);
m_actionManager->setAction(PDFActionManager::RenderOptionGrayscale, ui->actionColorGrayscale); m_actionManager->setAction(PDFActionManager::RenderOptionGrayscale, ui->actionColorGrayscale);

View File

@ -56,7 +56,6 @@
<addaction name="actionGoToNextPage"/> <addaction name="actionGoToNextPage"/>
<addaction name="actionGoToPreviousLine"/> <addaction name="actionGoToPreviousLine"/>
<addaction name="actionGoToNextLine"/> <addaction name="actionGoToNextLine"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionBookmarkPage"/> <addaction name="actionBookmarkPage"/>
<addaction name="actionGotoPreviousBookmark"/> <addaction name="actionGotoPreviousBookmark"/>
@ -87,6 +86,7 @@
<addaction name="actionRenderOptionSmoothPictures"/> <addaction name="actionRenderOptionSmoothPictures"/>
<addaction name="actionRenderOptionIgnoreOptionalContentSettings"/> <addaction name="actionRenderOptionIgnoreOptionalContentSettings"/>
<addaction name="actionRenderOptionDisplayAnnotations"/> <addaction name="actionRenderOptionDisplayAnnotations"/>
<addaction name="actionRenderOptionDisplayRenderTimes"/>
</widget> </widget>
<addaction name="menuPage_Layout"/> <addaction name="menuPage_Layout"/>
<addaction name="menuRendering_Options"/> <addaction name="menuRendering_Options"/>
@ -557,7 +557,6 @@
<string>Become a Sponsor</string> <string>Become a Sponsor</string>
</property> </property>
</action> </action>
<action name="actionBookmarkPage"> <action name="actionBookmarkPage">
<property name="icon"> <property name="icon">
<iconset resource="pdf4qtviewer.qrc"> <iconset resource="pdf4qtviewer.qrc">
@ -651,6 +650,17 @@
<string>If checked, bookmarks for main document chapters are generated automatically.</string> <string>If checked, bookmarks for main document chapters are generated automatically.</string>
</property> </property>
</action> </action>
<action name="actionRenderOptionDisplayRenderTimes">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Display Render Times</string>
</property>
<property name="menuRole">
<enum>QAction::NoRole</enum>
</property>
</action>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources> <resources>