diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-04-22 16:35:41 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-04-22 16:35:43 +0200 |
commit | 4c231d5df3040dbf4545a9a77145ee0e1f9c380c (patch) | |
tree | 2cc5b71a5d2b464214cf5372776913fbe4622e1e /src/gui/painting | |
parent | 7df16fb4ccbe0476bc34274a77e98eec4e8d2d93 (diff) | |
parent | d672ef07681a959d9559dd1e11e70db1f448a7f1 (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I059725e3b7d7ffd5a16a0931e6c17200917172b5
Diffstat (limited to 'src/gui/painting')
-rw-r--r-- | src/gui/painting/qpagedpaintdevice.cpp | 2 | ||||
-rw-r--r-- | src/gui/painting/qpaintdevice.cpp | 2 | ||||
-rw-r--r-- | src/gui/painting/qpaintdevice.h | 4 | ||||
-rw-r--r-- | src/gui/painting/qpaintdevice.qdoc | 13 | ||||
-rw-r--r-- | src/gui/painting/qpainter.cpp | 32 | ||||
-rw-r--r-- | src/gui/painting/qpainter_p.h | 1 | ||||
-rw-r--r-- | src/gui/painting/qpdf.cpp | 3 |
7 files changed, 39 insertions, 18 deletions
diff --git a/src/gui/painting/qpagedpaintdevice.cpp b/src/gui/painting/qpagedpaintdevice.cpp index f67037cc39..0387f0020f 100644 --- a/src/gui/painting/qpagedpaintdevice.cpp +++ b/src/gui/painting/qpagedpaintdevice.cpp @@ -169,7 +169,7 @@ void QPagedPaintDevice::setPageSize(PageSize size) if (size >= Custom) return; d->pageSize = size; - d->pageSizeMM = QSizeF(pageSizes[A4].width, pageSizes[A4].height); + d->pageSizeMM = QSizeF(pageSizes[size].width, pageSizes[size].height); } /*! diff --git a/src/gui/painting/qpaintdevice.cpp b/src/gui/painting/qpaintdevice.cpp index 6ac288607d..81d2063039 100644 --- a/src/gui/painting/qpaintdevice.cpp +++ b/src/gui/painting/qpaintdevice.cpp @@ -95,6 +95,8 @@ int QPaintDevice::metric(PaintDeviceMetric m) const } else if (m == PdmNumColors) { // FIXME: does this need to be a real value? return 256; + } else if (m == PdmDevicePixelRatio) { + return 1; } else { qDebug("Unrecognised metric %d!",m); return 0; diff --git a/src/gui/painting/qpaintdevice.h b/src/gui/painting/qpaintdevice.h index 1529b701cf..bb66f32b7f 100644 --- a/src/gui/painting/qpaintdevice.h +++ b/src/gui/painting/qpaintdevice.h @@ -65,7 +65,8 @@ public: PdmDpiX, PdmDpiY, PdmPhysicalDpiX, - PdmPhysicalDpiY + PdmPhysicalDpiY, + PdmDevicePixelRatio }; virtual ~QPaintDevice(); @@ -82,6 +83,7 @@ public: int logicalDpiY() const { return metric(PdmDpiY); } int physicalDpiX() const { return metric(PdmPhysicalDpiX); } int physicalDpiY() const { return metric(PdmPhysicalDpiY); } + int devicePixelRatio() const { return metric(PdmDevicePixelRatio); } int colorCount() const { return metric(PdmNumColors); } int depth() const { return metric(PdmDepth); } diff --git a/src/gui/painting/qpaintdevice.qdoc b/src/gui/painting/qpaintdevice.qdoc index 7397dc7fc2..993b23850e 100644 --- a/src/gui/painting/qpaintdevice.qdoc +++ b/src/gui/painting/qpaintdevice.qdoc @@ -114,6 +114,10 @@ \value PdmPhysicalDpiY The vertical resolution of the device in dots per inch. See also physicalDpiY(). + \value PdmDevicePixelRatio The device pixel ratio for device. Common + values are 1 for normal-dpi displays and 2 for high-dpi "retina" + displays. + \sa metric() */ @@ -273,3 +277,12 @@ \sa physicalDpiX(), logicalDpiY() */ + +/*! + \fn int QPaintDevice::devicePixelRatio() const + + Returns the device pixel ratio for device. + + Common values are 1 for normal-dpi displays and 2 for high-dpi + "retina" displays. +*/ diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index be77fffc7c..e42b70427c 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -225,17 +225,24 @@ QTransform QPainterPrivate::viewTransform() const return QTransform(); } -QTransform QPainterPrivate::hidpiScaleTransform() const +int QPainterPrivate::effectiveDevicePixelRatio() const { -#ifdef Q_OS_MAC // Limited feature introduction for Qt 5.0.0, remove ifdef in a later release. - if (device->devType() == QInternal::Printer || device->physicalDpiX() == 0 || device->logicalDpiX() == 0) - return QTransform(); - const qreal deviceScale = (device->physicalDpiX() / device->logicalDpiX()); - if (deviceScale > 1.0) - return QTransform::fromScale(deviceScale, deviceScale); +#ifdef Q_OS_MAC + // Special cases for devices that does not support PdmDevicePixelRatio go here: + if (device->devType() == QInternal::Printer) + return 1; + + return qMax(1, device->metric(QPaintDevice::PdmDevicePixelRatio)); +#else + return 1; #endif - return QTransform(); +} + +QTransform QPainterPrivate::hidpiScaleTransform() const +{ + int devicePixelRatio = effectiveDevicePixelRatio(); + return QTransform::fromScale(devicePixelRatio, devicePixelRatio); } /* @@ -1837,14 +1844,7 @@ bool QPainter::begin(QPaintDevice *pd) Q_ASSERT(d->engine->isActive()); -#ifdef Q_OS_MAC - // Limited feature introduction for Qt 5.0.0, remove ifdef in a later release. - const bool isHighDpi = (pd->devType() == QInternal::Printer || d->device->physicalDpiX() == 0 || d->device->logicalDpiX() == 0) ? - false : (d->device->physicalDpiX() / d->device->logicalDpiX() > 1); -#else - const bool isHighDpi = false; -#endif - if (!d->state->redirectionMatrix.isIdentity() || isHighDpi) + if (!d->state->redirectionMatrix.isIdentity() || d->effectiveDevicePixelRatio() > 1) d->updateMatrix(); Q_ASSERT(d->engine->isActive()); diff --git a/src/gui/painting/qpainter_p.h b/src/gui/painting/qpainter_p.h index 36a73866e7..04772b3ec9 100644 --- a/src/gui/painting/qpainter_p.h +++ b/src/gui/painting/qpainter_p.h @@ -249,6 +249,7 @@ public: } QTransform viewTransform() const; + int effectiveDevicePixelRatio() const; QTransform hidpiScaleTransform() const; static bool attachPainterPrivate(QPainter *q, QPaintDevice *pdev); void detachPainterPrivate(QPainter *q); diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index eed64180e5..5d9a743dac 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1455,6 +1455,9 @@ int QPdfEngine::metric(QPaintDevice::PaintDeviceMetric metricType) const case QPaintDevice::PdmDepth: val = 32; break; + case QPaintDevice::PdmDevicePixelRatio: + val = 1; + break; default: qWarning("QPdfWriter::metric: Invalid metric command"); return 0; |