Zoom the documentation according to the system DPI by default
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>
Tue, 23 Sep 2014 14:29:28 +0000 (16:29 +0200)
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>
Wed, 24 Sep 2014 15:55:11 +0000 (17:55 +0200)
QtWebKit follows the web standard use of 96 DPI for font sizes and
this is a good compromise for the web, but this would require each
Assistant user to zoom the text manually without the benefit of
keeping existing content working (since we don't show any external
content in Assistant that could break with a higher DPI).

HiDPI on OS X already handles the issue by scaling the whole page by
two, but since we don't completely support DPI awareness on Windows,
Assistant assets and text will be scaled but the documentation
itself will be microscopic.

Use the zoomFactor to adjust the DPI according to system settings
by dividing QScreen::logicalDotsPerInch() by 96.

Task-number: QTBUG-41076
Change-Id: I5644d0b383fcaf04bed156207afca9b322ea18a6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
src/assistant/assistant/helpviewer_p.h
src/assistant/assistant/helpviewer_qwv.cpp

index 136950e..3041623 100644 (file)
@@ -49,6 +49,9 @@
 #include <QtCore/QObject>
 #ifdef QT_NO_WEBKIT
 #include <QtWidgets/QTextBrowser>
+#else
+#include <QtGui/QGuiApplication>
+#include <QtGui/QScreen>
 #endif
 
 QT_BEGIN_NAMESPACE
@@ -63,12 +66,22 @@ public:
         : zoomCount(zoom)
         , forceFont(false)
         , lastAnchor(QString())
+        , m_loadFinished(false)
+    { }
 #else
     HelpViewerPrivate()
-#endif
+        : m_loadFinished(false)
     {
-        m_loadFinished = false;
+        // The web uses 96dpi by default on the web to preserve the font size across platforms, but
+        // since we control the content for the documentation, we want the system DPI to be used.
+        // - OS X reports 72dpi but doesn't allow changing the DPI, ignore anything below a 1.0 ratio to handle this.
+        // - On Windows and Linux don't zoom the default web 96dpi below a 1.25 ratio to avoid
+        //   filtered images in the doc unless the font readability difference is considerable.
+        webDpiRatio = QGuiApplication::primaryScreen()->logicalDotsPerInch() / 96.;
+        if (webDpiRatio < 1.25)
+            webDpiRatio = 1.0;
     }
+#endif
 
 #ifdef QT_NO_WEBKIT
     bool hasAnchorAt(QTextBrowser *browser, const QPoint& pos)
@@ -112,6 +125,8 @@ public:
     int zoomCount;
     bool forceFont;
     QString lastAnchor;
+#else
+    qreal webDpiRatio;
 #endif // QT_NO_WEBKIT
 
 public:
index 81061d7..f3e9c71 100644 (file)
@@ -315,7 +315,7 @@ HelpViewer::HelpViewer(qreal zoom, QWidget *parent)
     connect(page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
 
     setFont(viewerFont());
-    setZoomFactor(zoom == 0.0 ? 1.0 : zoom);
+    setZoomFactor(d->webDpiRatio * (zoom == 0.0 ? 1.0 : zoom));
 }
 
 QFont HelpViewer::viewerFont() const
@@ -352,13 +352,13 @@ void HelpViewer::scaleDown()
 void HelpViewer::resetScale()
 {
     TRACE_OBJ
-    setZoomFactor(1.0);
+    setZoomFactor(d->webDpiRatio);
 }
 
 qreal HelpViewer::scale() const
 {
     TRACE_OBJ
-    return zoomFactor();
+    return zoomFactor() / d->webDpiRatio;
 }
 
 QString HelpViewer::title() const