summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-04-22 16:35:41 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-04-22 16:35:43 +0200
commit4c231d5df3040dbf4545a9a77145ee0e1f9c380c (patch)
tree2cc5b71a5d2b464214cf5372776913fbe4622e1e /src/gui/painting
parent7df16fb4ccbe0476bc34274a77e98eec4e8d2d93 (diff)
parentd672ef07681a959d9559dd1e11e70db1f448a7f1 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Diffstat (limited to 'src/gui/painting')
-rw-r--r--src/gui/painting/qpagedpaintdevice.cpp2
-rw-r--r--src/gui/painting/qpaintdevice.cpp2
-rw-r--r--src/gui/painting/qpaintdevice.h4
-rw-r--r--src/gui/painting/qpaintdevice.qdoc13
-rw-r--r--src/gui/painting/qpainter.cpp32
-rw-r--r--src/gui/painting/qpainter_p.h1
-rw-r--r--src/gui/painting/qpdf.cpp3
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;