QPainter on QBitmap: make setBrush(NoBrush) work as expected.
It had no effect because of an explicit check for NoBrush. However the default in QBitmap is (unfortunately) QBrush(color0), rather than NoBrush, so the brush must be updated when calling setBrush(NoBrush). I suppose the real issue is that lastBrush is default-constructed in QRasterPaintEngine, rather than starting with the brush from QPainter, which is QBrush(color0) for the case of the bitmap. But no reason to special case NoBrush here anyway. Task-Number: QTBUG-38781 Change-Id: I9996ac12bf628920cfaf0de9c886f637a336028b Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
This commit is contained in:
parent
4689a9b3f0
commit
1aede2d7fc
@ -250,7 +250,7 @@ private:
|
||||
QRect toNormalizedFillRect(const QRectF &rect);
|
||||
|
||||
inline void ensureBrush(const QBrush &brush) {
|
||||
if (!qbrush_fast_equals(state()->lastBrush, brush) || (brush.style() != Qt::NoBrush && state()->fillFlags))
|
||||
if (!qbrush_fast_equals(state()->lastBrush, brush) || state()->fillFlags)
|
||||
updateBrush(brush);
|
||||
}
|
||||
inline void ensureBrush() { ensureBrush(state()->brush); }
|
||||
|
@ -282,6 +282,8 @@ private slots:
|
||||
|
||||
void QTBUG17053_zeroDashPattern();
|
||||
|
||||
void QTBUG38781_NoBrushAndQBitmap();
|
||||
|
||||
void drawTextOutsideGuiThread();
|
||||
|
||||
void drawTextWithComplexBrush();
|
||||
@ -4473,6 +4475,26 @@ void tst_QPainter::QTBUG17053_zeroDashPattern()
|
||||
QCOMPARE(image, original);
|
||||
}
|
||||
|
||||
void tst_QPainter::QTBUG38781_NoBrushAndQBitmap()
|
||||
{
|
||||
QBitmap bitmap(10, 10);
|
||||
bitmap.fill(Qt::color0);
|
||||
QPainter p(&bitmap);
|
||||
p.setPen(Qt::color1);
|
||||
p.drawLine(0, 1, 9, 1); // at horizontal line at y=1
|
||||
p.setBrush(Qt::NoBrush);
|
||||
p.drawRect(0, 0, 9, 9); // a rect all around
|
||||
|
||||
QRgb white = qRgb(0xff, 0xff, 0xff);
|
||||
QRgb black = qRgb(0, 0, 0);
|
||||
QImage image = bitmap.toImage();
|
||||
QCOMPARE(image.pixel(0, 0), black);
|
||||
QCOMPARE(image.pixel(5, 5), white);
|
||||
|
||||
// Check that the rect didn't overwrite the line
|
||||
QCOMPARE(image.pixel(5, 1), black);
|
||||
}
|
||||
|
||||
class TextDrawerThread : public QThread
|
||||
{
|
||||
public:
|
||||
|
Loading…
Reference in New Issue
Block a user