From 0877ced9806c99d02454a7336ecf0299bc4113ae Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Mon, 25 Jun 2018 12:19:02 +0200 Subject: [PATCH] Fix: crash when painting with high-dpr image brush The recently merged f5fe9fc5a4 (Add ObjectMode to QGradient) changed combineXForm() to check the brush's gradient's coordinatemode. However, combineXForm() is now also used when painting with high-dpr image brush. In the latter case, the gradient is 0 so this would crash. Testcase: tst_lancelot, image_dpr.qps. Change-Id: I5e2785ef708768c3fa3eac0999c9c24fd25108f4 Reviewed-by: Allan Sandfeld Jensen --- src/gui/painting/qemulationpaintengine.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qemulationpaintengine.cpp b/src/gui/painting/qemulationpaintengine.cpp index 638834ef3bc..0c0df0fb13d 100644 --- a/src/gui/painting/qemulationpaintengine.cpp +++ b/src/gui/painting/qemulationpaintengine.cpp @@ -75,10 +75,10 @@ QPainterState *QEmulationPaintEngine::createState(QPainterState *orig) const static inline void combineXForm(QBrush *brush, const QRectF &r) { QTransform t(r.width(), 0, 0, r.height(), r.x(), r.y()); - if (brush->gradient()->coordinateMode() == QGradient::ObjectMode) - brush->setTransform(brush->transform() * t); + if (brush->gradient() && brush->gradient()->coordinateMode() != QGradient::ObjectMode) + brush->setTransform(t * brush->transform()); // compat mode else - brush->setTransform(t * brush->transform()); + brush->setTransform(brush->transform() * t); } void QEmulationPaintEngine::fill(const QVectorPath &path, const QBrush &brush)