diff options
author | Morten Johan Sørvig <morten.sorvig@digia.com> | 2014-05-28 11:21:29 +0200 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@digia.com> | 2015-03-26 10:57:24 +0100 |
commit | 3cede847c39269374c52dcf156dc982d7a51f29c (patch) | |
tree | bde9cc0eb9c5c445d0c353c7dc7c6f5d816826fa /src/gui/painting | |
parent | 7dd5726380f5d5422edd4b71c6beba6d02b4e3df (diff) |
WIP: Add PdmDevicePixelRatioScaled.
Work around QPainDevice::metric's int return type
by adding a new metric that returns a scaled devicePixelRatio.
Choose a scale factor that gives us more than enough
range.
The QPainDevice::devicePixelRatio() convenience accessor
is public API and can unfortunately not be changed
to return a qreal. Add devicePixelRatioF() which
returns the (unscaled) devicePixelRatio.
Change all call sites of QPainDevice::devicePixelRatio()
to use QPainDevice::devicePixelRatioF().
Task-number: QTBUG-38858
Change-Id: Ia97c24e1c7b10241d6425fab2fa513702bb750b8
Diffstat (limited to 'src/gui/painting')
-rw-r--r-- | src/gui/painting/qpaintdevice.cpp | 9 | ||||
-rw-r--r-- | src/gui/painting/qpaintdevice.h | 8 | ||||
-rw-r--r-- | src/gui/painting/qpainter.cpp | 2 | ||||
-rw-r--r-- | src/gui/painting/qpainter_p.h | 2 |
4 files changed, 17 insertions, 4 deletions
diff --git a/src/gui/painting/qpaintdevice.cpp b/src/gui/painting/qpaintdevice.cpp index 36e0bbe223..4ee3d91ea3 100644 --- a/src/gui/painting/qpaintdevice.cpp +++ b/src/gui/painting/qpaintdevice.cpp @@ -41,6 +41,8 @@ QPaintDevice::QPaintDevice() painters = 0; } +qreal QPaintDevice::devicePixelRatioFScale = 10000000.0; + QPaintDevice::~QPaintDevice() { if (paintingActive()) @@ -79,7 +81,13 @@ Q_GUI_EXPORT int qt_paint_device_metric(const QPaintDevice *device, QPaintDevice int QPaintDevice::metric(PaintDeviceMetric m) const { + // Fallback: A subclass has not implemented PdmDevicePixelRatioScaled but might + // have implemented PdmDevicePixelRatio. + if (m == PdmDevicePixelRatioScaled) + return this->metric(PdmDevicePixelRatio) * devicePixelRatioFScale; + qWarning("QPaintDevice::metrics: Device has no metric information"); + if (m == PdmDpiX) { return 72; } else if (m == PdmDpiY) { @@ -95,4 +103,5 @@ int QPaintDevice::metric(PaintDeviceMetric m) const } } + QT_END_NAMESPACE diff --git a/src/gui/painting/qpaintdevice.h b/src/gui/painting/qpaintdevice.h index 7c756c66de..819116c585 100644 --- a/src/gui/painting/qpaintdevice.h +++ b/src/gui/painting/qpaintdevice.h @@ -58,7 +58,8 @@ public: PdmDpiY, PdmPhysicalDpiX, PdmPhysicalDpiY, - PdmDevicePixelRatio + PdmDevicePixelRatio, + PdmDevicePixelRatioScaled }; virtual ~QPaintDevice(); @@ -76,9 +77,13 @@ public: int physicalDpiX() const { return metric(PdmPhysicalDpiX); } int physicalDpiY() const { return metric(PdmPhysicalDpiY); } int devicePixelRatio() const { return metric(PdmDevicePixelRatio); } + qreal devicePixelRatioF() const { return metric(PdmDevicePixelRatioScaled) / devicePixelRatioFScale; } int colorCount() const { return metric(PdmNumColors); } int depth() const { return metric(PdmDepth); } + // ### Classes that are not QPaintDevice subclasses are implementing metric() + // ### There needs to be some kind of (semi)-public API. + static qreal devicePixelRatioFScale; protected: QPaintDevice(); virtual int metric(PaintDeviceMetric metric) const; @@ -87,7 +92,6 @@ protected: virtual QPainter *sharedPainter() const; ushort painters; // refcount - private: Q_DISABLE_COPY(QPaintDevice) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 6f00abfc5f..69cbb42923 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -219,7 +219,7 @@ QTransform QPainterPrivate::viewTransform() const return QTransform(); } -int QPainterPrivate::effectiveDevicePixelRatio() const +qreal QPainterPrivate::effectiveDevicePixelRatio() const { // Special cases for devices that does not support PdmDevicePixelRatio go here: if (device->devType() == QInternal::Printer) diff --git a/src/gui/painting/qpainter_p.h b/src/gui/painting/qpainter_p.h index 7c32dc1694..fdad8e2460 100644 --- a/src/gui/painting/qpainter_p.h +++ b/src/gui/painting/qpainter_p.h @@ -241,7 +241,7 @@ public: } QTransform viewTransform() const; - int effectiveDevicePixelRatio() const; + qreal effectiveDevicePixelRatio() const; QTransform hidpiScaleTransform() const; static bool attachPainterPrivate(QPainter *q, QPaintDevice *pdev); void detachPainterPrivate(QPainter *q); |