summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qpixmap.cpp
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@digia.com>2012-11-20 11:34:52 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-12-01 08:33:20 +0100
commit5e61bbe586519c3d9bc636153d32e810da4e59a3 (patch)
tree67d67ef644be72ee5b3d685c9a22538d7ec1e01d /src/gui/image/qpixmap.cpp
parentc8dc41bacdc30026cb79d0d6c72255312084bfe3 (diff)
Basic high-dpi "retina" support for Qt 5.
Bring Qt 5 on par with Qt 4, prepare for more comprehensive support later on. Introduce device independent pixels (dips), device pixels, and devicePixelRatio. Add high-dpi support to QPainter, QGLWidget, the cocoa platform plugin, mac and fusion styles. Dips are similar to CSS pixels, Apple points and Android density-independent pixels. Device pixels are pixels in the backing store/physical pixels on screen. devicePixelRatio is the ratio between them, which is 1.0 on standard displays and 2.0 on "retina" displays. New API: QImage::devicePixelRatio() and setDevicePixelRatio() QPixmap::devicePixelRatio() and setDevicePixelRatio() QWindow::devicePixelRatio() QScreen::devicePixelRatio() QGuiApplicaiton::devicePixelRatio() Change-Id: If98c3ca9bfdf0e1bdbcf7574cd5b912c9ff63856 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/gui/image/qpixmap.cpp')
-rw-r--r--src/gui/image/qpixmap.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index 113369fd75..8782119b7a 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -638,6 +638,50 @@ void QPixmap::setMask(const QBitmap &mask)
data->fromImage(image, Qt::AutoColor);
}
+/*!
+ Returns the device pixel ratio for the pixmap. This is the
+ ratio between pixmap pixels and device-independent pixels.
+
+ Use this function when calculating layout geometry based on
+ the pixmap size: QSize layoutSize = image.size() / image.devicePixelRatio()
+
+ The default value is 1.0.
+
+ \sa setDevicePixelRatio()
+*/
+qreal QPixmap::devicePixelRatio() const
+{
+ if (!data)
+ return qreal(1.0);
+ return data->devicePixelRatio();
+}
+
+/*!
+ Sets the the device pixel ratio for the pixmap. This is the
+ ratio between image pixels and device-independent pixels.
+
+ The default value is 1.0. Setting it to something else has
+ two effects:
+
+ QPainters that are opened on the pixmap will be scaled. For
+ example, painting on a 200x200 image if with a ratio of 2.0
+ will result in effective (device-independent) painting bounds
+ of 100x100.
+
+ Code paths in Qt that calculate layout geometry based on the
+ pixmap size will take the ratio into account:
+ QSize layoutSize = pixmap.size() / pixmap.devicePixelRatio()
+ The net effect of this is that the pixmap is displayed as
+ high-dpi pixmap rather than a large pixmap.
+
+ \sa devicePixelRatio()
+*/
+void QPixmap::setDevicePixelRatio(qreal scaleFactor)
+{
+ detach();
+ data->setDevicePixelRatio(scaleFactor);
+}
+
#ifndef QT_NO_IMAGE_HEURISTIC_MASK
/*!
Creates and returns a heuristic mask for this pixmap.