diff options
author | Lucile Quirion <lucile.quirion@savoirfairelinux.com> | 2014-05-01 13:50:15 -0400 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-04 06:03:25 +0200 |
commit | a5bba1f9da376840d92f2008d8ba8433753b1847 (patch) | |
tree | c782e50d86301a882eb51269c8348c930d571192 | |
parent | 8e48707cea01f5c456cd554d2628d2b4f59ca1fc (diff) |
[blitter] Initialize m_devicePixelRatio to fix crash
When using directfb platform the drawing of some widgets (e.g. Toolbar)
would crash the application.
Pixmap device pixel ratio can be used in QCommonStyle::drawControl() as
a denominator to calculate pixmap width or size. The drawing of some
widgets (e.g. Toolbar) would fail the assertion of a non-zero
denominator.
This commit initializes the device pixel ratio when generating
BlitterClass pixmaps and makes QBlittablePlatformPixmap::metric(
PdmDevicePixelRatio) return devicePixelRatio() instead of 1.
Task-number: QTBUG-38709
Change-Id: Ia8b96c5341b5ac1297c483deed1c695846398b88
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
-rw-r--r-- | src/gui/image/qpixmap_blitter.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 839a7a709f..2915cdda2d 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -59,6 +59,7 @@ static int global_ser_no = 0; QBlittablePlatformPixmap::QBlittablePlatformPixmap() : QPlatformPixmap(QPlatformPixmap::PixmapType,BlitterClass) , m_alpha(false) + , m_devicePixelRatio(1.0) #ifdef QT_BLITTER_RASTEROVERLAY ,m_rasterOverlay(0), m_unmergedCopy(0) #endif //QT_BLITTER_RASTEROVERLAY @@ -121,7 +122,7 @@ int QBlittablePlatformPixmap::metric(QPaintDevice::PaintDeviceMetric metric) con case QPaintDevice::PdmPhysicalDpiY: return qt_defaultDpiY(); case QPaintDevice::PdmDevicePixelRatio: - return 1; + return devicePixelRatio(); default: qWarning("QRasterPlatformPixmap::metric(): Unhandled metric type %d", metric); break; @@ -178,6 +179,7 @@ void QBlittablePlatformPixmap::fromImage(const QImage &image, Qt::ImageConversionFlags flags) { m_alpha = image.hasAlphaChannel(); + m_devicePixelRatio = image.devicePixelRatio(); resize(image.width(),image.height()); markRasterOverlay(QRect(0,0,w,h)); QImage *thisImg = buffer(); |