Fix default implementations of raster ops

In the list of default implementations, the raster ops added in
ae0ddb8c72 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 <andy.shaw@digia.com>
bb10
Eskil Abrahamsen Blomfeldt 2014-09-19 10:25:05 +02:00
parent bbacf3d79d
commit 6e4dc7073a
2 changed files with 17 additions and 2 deletions

View File

@ -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,

View File

@ -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"