diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 62032a48690..866745cca69 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -6051,8 +6051,8 @@ DrawHelper qDrawHelper[] = { blend_color_generic, qt_bitmapblit_argb32, - qt_alphamapblit_argb32, - qt_alphargbblit_argb32, + qt_alphamapblit_generic, + qt_alphargbblit_generic, qt_rectfill_nonpremul_argb32 }, // Format_ARGB32_Premultiplied diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 92b28f65bd0..7528690ae42 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -280,6 +280,7 @@ private slots: void fillPolygon(); + void textOnArgb32(); void drawImageAtPointF(); void scaledDashes(); #if QT_CONFIG(raster_fp) @@ -5460,6 +5461,31 @@ void tst_QPainter::fillPolygon() } } +void tst_QPainter::textOnArgb32() +{ + QImage backing(100, 20, QImage::Format_RGB32); + backing.fill(Qt::white); + QImage img(100, 20, QImage::Format_ARGB32); + img.fill(Qt::transparent); // Filled with transparent black + + QPainter imagePainter(&img); + imagePainter.setPen(Qt::red); + imagePainter.setFont(QFontDatabase::systemFont(QFontDatabase::GeneralFont)); + imagePainter.setRenderHints(QPainter::TextAntialiasing); + imagePainter.drawText(img.rect(), Qt::AlignCenter,"Text example"); + imagePainter.end(); + imagePainter.begin(&backing); + imagePainter.drawImage(backing.rect(), img); + imagePainter.end(); + for (int y = 0; y < backing.height(); ++y) { + for (int x = 0; x < backing.width(); ++x) { + const uint32_t px = backing.pixel(x, y); + // Red over white, should always be full red. + QCOMPARE(qRed(px), 255); + } + } +} + void tst_QPainter::drawImageAtPointF() { // Just test we do not crash