diff --git a/Pdf4QtLib/sources/pdfdrawspacecontroller.cpp b/Pdf4QtLib/sources/pdfdrawspacecontroller.cpp index d2dce12..d2dce86 100644 --- a/Pdf4QtLib/sources/pdfdrawspacecontroller.cpp +++ b/Pdf4QtLib/sources/pdfdrawspacecontroller.cpp @@ -29,6 +29,8 @@ #include #include #include +#include +#include namespace pdf { @@ -535,10 +537,23 @@ void PDFDrawWidgetProxy::update() Q_ASSERT(m_verticalScrollbar); QWidget* widget = m_widget->getDrawWidget()->getWidget(); + QScreen* primaryScreen = QGuiApplication::primaryScreen(); // First, we must calculate pixel per mm ratio to obtain DPMM (device pixel per mm), // we also assume, that zoom is correctly set. - m_pixelPerMM = static_cast(widget->width()) / static_cast(widget->widthMM()); + QSizeF physicalSize = primaryScreen->physicalSize(); + QSizeF pixelSize = primaryScreen->size(); + + m_pixelPerMM = pixelSize.width() / physicalSize.width(); + + // Are we using logical pixels instead of physical ones? + if (m_features.testFlag(PDFRenderer::LogicalSizeZooming)) + { + qreal ldpi = primaryScreen->logicalDotsPerInch(); + qreal pdpi = primaryScreen->physicalDotsPerInch(); + qreal ratioLogicalToPhysical = ldpi / pdpi; + m_pixelPerMM *= ratioLogicalToPhysical; + } Q_ASSERT(m_zoom > 0.0); Q_ASSERT(m_pixelPerMM > 0.0); diff --git a/Pdf4QtLib/sources/pdfrenderer.h b/Pdf4QtLib/sources/pdfrenderer.h index 268392d..b851f1e 100644 --- a/Pdf4QtLib/sources/pdfrenderer.h +++ b/Pdf4QtLib/sources/pdfrenderer.h @@ -88,6 +88,7 @@ public: InvertColors = 0x0100, ///< Invert colors DenyExtraGraphics = 0x0200, ///< Do not display additional graphics, for example from tools DisplayAnnotations = 0x0400, ///< Display annotations + LogicalSizeZooming = 0x0800, ///< Use logical pixel resolution instead of physical one when zooming }; Q_DECLARE_FLAGS(Features, Feature) diff --git a/Pdf4QtViewer/pdfviewersettingsdialog.cpp b/Pdf4QtViewer/pdfviewersettingsdialog.cpp index ca80b09..e029ab0 100644 --- a/Pdf4QtViewer/pdfviewersettingsdialog.cpp +++ b/Pdf4QtViewer/pdfviewersettingsdialog.cpp @@ -329,6 +329,7 @@ void PDFViewerSettingsDialog::loadData() ui->maximumUndoStepsEdit->setValue(m_settings.m_maximumUndoSteps); ui->maximumRedoStepsEdit->setValue(m_settings.m_maximumRedoSteps); ui->developerModeCheckBox->setChecked(m_settings.m_allowDeveloperMode); + ui->logicalPixelZoomCheckBox->setChecked(m_settings.m_features.testFlag(pdf::PDFRenderer::LogicalSizeZooming)); // CMS ui->cmsTypeComboBox->setCurrentIndex(ui->cmsTypeComboBox->findData(int(m_cmsSettings.system))); @@ -602,6 +603,10 @@ void PDFViewerSettingsDialog::saveData() { m_settings.m_maximumRedoSteps = ui->maximumRedoStepsEdit->value(); } + else if (sender == ui->logicalPixelZoomCheckBox) + { + m_settings.m_features.setFlag(pdf::PDFRenderer::LogicalSizeZooming, ui->logicalPixelZoomCheckBox->isChecked()); + } else if (sender == ui->signatureVerificationEnableCheckBox) { m_settings.m_signatureVerificationEnabled = ui->signatureVerificationEnableCheckBox->isChecked(); diff --git a/Pdf4QtViewer/pdfviewersettingsdialog.ui b/Pdf4QtViewer/pdfviewersettingsdialog.ui index 6edda82..66bc106 100644 --- a/Pdf4QtViewer/pdfviewersettingsdialog.ui +++ b/Pdf4QtViewer/pdfviewersettingsdialog.ui @@ -35,7 +35,7 @@ - 10 + 7 @@ -901,6 +901,30 @@ + + + + Magnifier size + + + + + + + + + + 20 + + + + + + + Maximum undo steps + + + @@ -908,6 +932,16 @@ + + + + 1.000000000000000 + + + 10.000000000000000 + + + @@ -915,17 +949,17 @@ - - + + - Magnifier size + Enable - - - - 20 + + + + Developer mode @@ -949,37 +983,17 @@ - - - - - - - Maximum undo steps - - - - - - - 1.000000000000000 - - - 10.000000000000000 - - - - + Enable - + - Developer mode + Use logical pixels when zooming