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
parent
bbacf3d79d
commit
6e4dc7073a
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue