summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/painting/qbrush.cpp18
-rw-r--r--src/gui/painting/qpdf.cpp4
-rw-r--r--src/widgets/styles/qfusionstyle_p_p.h4
-rw-r--r--src/widgets/styles/qwindowsstyle.cpp21
-rw-r--r--tests/auto/gui/painting/qbrush/tst_qbrush.cpp39
5 files changed, 74 insertions, 12 deletions
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp
index d136f3a903..40dad85cde 100644
--- a/src/gui/painting/qbrush.cpp
+++ b/src/gui/painting/qbrush.cpp
@@ -1029,7 +1029,10 @@ QDataStream &operator<<(QDataStream &s, const QBrush &b)
s << style << b.color();
if (b.style() == Qt::TexturePattern) {
- s << b.texture();
+ if (s.version() >= QDataStream::Qt_5_5)
+ s << b.textureImage();
+ else
+ s << b.texture();
} else if (s.version() >= QDataStream::Qt_4_0 && gradient_style) {
const QGradient *gradient = b.gradient();
int type_as_int = int(gradient->type());
@@ -1089,10 +1092,17 @@ QDataStream &operator>>(QDataStream &s, QBrush &b)
QColor color;
s >> style;
s >> color;
+ b = QBrush(color);
if (style == Qt::TexturePattern) {
- QPixmap pm;
- s >> pm;
- b = QBrush(color, pm);
+ if (s.version() >= QDataStream::Qt_5_5) {
+ QImage img;
+ s >> img;
+ b.setTextureImage(qMove(img));
+ } else {
+ QPixmap pm;
+ s >> pm;
+ b.setTexture(qMove(pm));
+ }
} else if (style == Qt::LinearGradientPattern
|| style == Qt::RadialGradientPattern
|| style == Qt::ConicalGradientPattern) {
diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index 2efaec41ef..687d8efcec 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -2264,9 +2264,9 @@ int QPdfEnginePrivate::addBrushPattern(const QTransform &m, bool *specifyColor,
if (pattern.isEmpty()) {
if (brush.style() != Qt::TexturePattern)
return 0;
- QImage image = brush.texture().toImage();
+ QImage image = brush.textureImage();
bool bitmap = true;
- imageObject = addImage(image, &bitmap, brush.texture().cacheKey());
+ imageObject = addImage(image, &bitmap, image.cacheKey());
if (imageObject != -1) {
QImage::Format f = image.format();
if (f != QImage::Format_MonoLSB && f != QImage::Format_Mono) {
diff --git a/src/widgets/styles/qfusionstyle_p_p.h b/src/widgets/styles/qfusionstyle_p_p.h
index f0f00c4311..21d9d439a4 100644
--- a/src/widgets/styles/qfusionstyle_p_p.h
+++ b/src/widgets/styles/qfusionstyle_p_p.h
@@ -104,7 +104,7 @@ public:
}
QColor outline(const QPalette &pal) const {
- if (!pal.window().texture().isNull())
+ if (pal.window().style() == Qt::TexturePattern)
return QColor(0, 0, 0, 160);
return pal.background().color().darker(140);
}
@@ -117,7 +117,7 @@ public:
}
QColor tabFrameColor(const QPalette &pal) const {
- if (!pal.button().texture().isNull())
+ if (pal.window().style() == Qt::TexturePattern)
return QColor(255, 255, 255, 8);
return buttonColor(pal).lighter(104);
}
diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp
index 1336c04c42..e39a084cba 100644
--- a/src/widgets/styles/qwindowsstyle.cpp
+++ b/src/widgets/styles/qwindowsstyle.cpp
@@ -1525,8 +1525,14 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
p->setBackground(opt->palette.dark().color());
p->setBrush(br);
} else {
- QPixmap pm = opt->palette.brush(QPalette::Light).texture();
- br = !pm.isNull() ? QBrush(pm) : QBrush(opt->palette.light().color(), Qt::Dense4Pattern);
+ const QBrush paletteBrush = opt->palette.brush(QPalette::Light);
+ if (paletteBrush.style() == Qt::TexturePattern) {
+ if (qHasPixmapTexture(paletteBrush))
+ br = QBrush(paletteBrush.texture());
+ else
+ br = QBrush(paletteBrush.textureImage());
+ } else
+ br = QBrush(opt->palette.light().color(), Qt::Dense4Pattern);
p->setBackground(opt->palette.background().color());
p->setBrush(br);
}
@@ -1536,8 +1542,15 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
break; }
case CE_ScrollBarSlider:
if (!(opt->state & State_Enabled)) {
- QPixmap pm = opt->palette.brush(QPalette::Light).texture();
- QBrush br = !pm.isNull() ? QBrush(pm) : QBrush(opt->palette.light().color(), Qt::Dense4Pattern);
+ QBrush br;
+ const QBrush paletteBrush = opt->palette.brush(QPalette::Light);
+ if (paletteBrush.style() == Qt::TexturePattern) {
+ if (qHasPixmapTexture(paletteBrush))
+ br = QBrush(paletteBrush.texture());
+ else
+ br = QBrush(paletteBrush.textureImage());
+ } else
+ br = QBrush(opt->palette.light().color(), Qt::Dense4Pattern);
p->setPen(Qt::NoPen);
p->setBrush(br);
p->setBackgroundMode(Qt::OpaqueMode);
diff --git a/tests/auto/gui/painting/qbrush/tst_qbrush.cpp b/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
index d252a0e87c..8be9973c64 100644
--- a/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
+++ b/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
@@ -69,6 +69,8 @@ private slots:
void nullBrush();
void isOpaque();
void debug();
+
+ void textureBrushStream();
};
@@ -407,5 +409,42 @@ void tst_QBrush::debug()
qDebug() << pixmap_brush; // don't crash
}
+void tst_QBrush::textureBrushStream()
+{
+ QPixmap pixmap_source(10, 10);
+ QImage image_source(10, 10, QImage::Format_RGB32);
+
+ fill(&pixmap_source);
+ fill(&image_source);
+
+ QBrush pixmap_brush;
+ pixmap_brush.setTexture(pixmap_source);
+ QBrush image_brush;
+ image_brush.setTextureImage(image_source);
+
+ QByteArray data1;
+ QByteArray data2;
+ {
+ QDataStream stream1(&data1, QIODevice::WriteOnly);
+ QDataStream stream2(&data2, QIODevice::WriteOnly);
+ stream1 << pixmap_brush;
+ stream2 << image_brush;
+ }
+
+ QBrush loadedBrush1;
+ QBrush loadedBrush2;
+ {
+ QDataStream stream1(&data1, QIODevice::ReadOnly);
+ QDataStream stream2(&data2, QIODevice::ReadOnly);
+ stream1 >> loadedBrush1;
+ stream2 >> loadedBrush2;
+ }
+
+ QCOMPARE(loadedBrush1.style(), Qt::TexturePattern);
+ QCOMPARE(loadedBrush2.style(), Qt::TexturePattern);
+ QCOMPARE(loadedBrush1.texture(), pixmap_source);
+ QCOMPARE(loadedBrush2.textureImage(), image_source);
+}
+
QTEST_MAIN(tst_QBrush)
#include "tst_qbrush.moc"