From a5bba1f9da376840d92f2008d8ba8433753b1847 Mon Sep 17 00:00:00 2001 From: Lucile Quirion Date: Thu, 1 May 2014 13:50:15 -0400 Subject: [PATCH] [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 Reviewed-by: Laszlo Agocs --- src/gui/image/qpixmap_blitter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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();