From 6e4dc7073a195a73d9002e48dc4e27eb6b354d1e Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Fri, 19 Sep 2014 10:25:05 +0200 Subject: [PATCH] Fix default implementations of raster ops In the list of default implementations, the raster ops added in ae0ddb8c729c105a5b4f32a4f6765af8fe546333 were all offset by one composition mode because of a duplicate entry in the array. The effect would be, e.g. that using the NotDestination operator would resolve to the Set operator instead. Most users will probably not have experienced this since any of the asm-based functions will be preferred. [ChangeLog][Painting] Fixed some very rare cases of mismatched raster modes in QPainter. Change-Id: Ia242b54c78acbe1c89d9b4ecd10936564ec134b2 Task-number: QTBUG-41413 Reviewed-by: Andy Shaw --- src/gui/painting/qdrawhelper.cpp | 2 -- .../auto/gui/painting/qpainter/tst_qpainter.cpp | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 9292eeb4a5..55a48395c8 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -4335,7 +4335,6 @@ static CompositionFunctionSolid functionForModeSolid_C[] = { rasterop_solid_NotSource, rasterop_solid_NotSourceAndDestination, rasterop_solid_SourceAndNotDestination, - rasterop_solid_SourceAndNotDestination, rasterop_solid_NotSourceOrDestination, rasterop_solid_SourceOrNotDestination, rasterop_solid_ClearDestination, @@ -4379,7 +4378,6 @@ static CompositionFunction functionForMode_C[] = { rasterop_NotSource, rasterop_NotSourceAndDestination, rasterop_SourceAndNotDestination, - rasterop_SourceAndNotDestination, rasterop_NotSourceOrDestination, rasterop_SourceOrNotDestination, rasterop_ClearDestination, diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 5af5b1a269..0675a6cf9d 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -296,6 +296,8 @@ private slots: void blendARGBonRGB_data(); void blendARGBonRGB(); + void RasterOp_NotDestination(); + private: void fillData(); void setPenColor(QPainter& p); @@ -4803,6 +4805,21 @@ void tst_QPainter::cosmeticStrokerClipping() QCOMPARE(old, image); } +void tst_QPainter::RasterOp_NotDestination() +{ + QImage image(3, 3, QImage::Format_RGB32); + image.fill(Qt::red); + + { + QPainter p(&image); + p.setCompositionMode(QPainter::RasterOp_NotDestination); + p.fillRect(image.rect(), Qt::black); + } + + uint pixel = image.pixel(1, 1); + QCOMPARE(pixel, 0xff00ffff); +} + QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc"