QCommonStyle: don't use a QImage when drawing arrows
Using a QImage as a paintDevice is not needed - directly paint on a QPixmap. Also use styleCachePixmap() which avoids the need for multiplying the size with the dpr. Change-Id: I114f78c20d2b92b4fd135c8f64b452fb81a02baf Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io>
This commit is contained in:
parent
896c4fe427
commit
f5fa811e88
@ -750,22 +750,21 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
|
|||||||
case PE_IndicatorArrowRight:
|
case PE_IndicatorArrowRight:
|
||||||
case PE_IndicatorArrowLeft:
|
case PE_IndicatorArrowLeft:
|
||||||
{
|
{
|
||||||
if (opt->rect.width() <= 1 || opt->rect.height() <= 1)
|
const QRect &r = opt->rect;
|
||||||
|
if (r.width() <= 1 || r.height() <= 1)
|
||||||
break;
|
break;
|
||||||
QRect r = opt->rect;
|
|
||||||
int size = qMin(r.height(), r.width());
|
int size = qMin(r.height(), r.width());
|
||||||
QPixmap pixmap;
|
QPixmap pixmap;
|
||||||
const qreal pixelRatio = p->device()->devicePixelRatio();
|
const qreal dpr = p->device()->devicePixelRatio();
|
||||||
const QString pixmapName = QStyleHelper::uniqueName("$qt_ia-"_L1
|
const QString pixmapName = QStyleHelper::uniqueName("$qt_ia-"_L1
|
||||||
% QLatin1StringView(metaObject()->className())
|
% QLatin1StringView(metaObject()->className())
|
||||||
% HexString<uint>(pe),
|
% HexString<uint>(pe),
|
||||||
opt, QSize(size, size), pixelRatio);
|
opt, QSize(size, size), dpr);
|
||||||
if (!QPixmapCache::find(pixmapName, &pixmap)) {
|
if (!QPixmapCache::find(pixmapName, &pixmap)) {
|
||||||
const qreal border = pixelRatio * (size / 5.);
|
const qreal border = size / 5.;
|
||||||
const qreal sqsize = pixelRatio * size;
|
const qreal sqsize = size;
|
||||||
QImage image(sqsize, sqsize, QImage::Format_ARGB32_Premultiplied);
|
pixmap = styleCachePixmap(QSize(size, size), dpr);
|
||||||
image.fill(Qt::transparent);
|
QPainter imagePainter(&pixmap);
|
||||||
QPainter imagePainter(&image);
|
|
||||||
imagePainter.setRenderHint(QPainter::Antialiasing);
|
imagePainter.setRenderHint(QPainter::Antialiasing);
|
||||||
|
|
||||||
QPolygonF poly;
|
QPolygonF poly;
|
||||||
@ -813,8 +812,6 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
|
|||||||
|
|
||||||
imagePainter.drawPolygon(poly);
|
imagePainter.drawPolygon(poly);
|
||||||
imagePainter.end();
|
imagePainter.end();
|
||||||
pixmap = QPixmap::fromImage(image);
|
|
||||||
pixmap.setDevicePixelRatio(pixelRatio);
|
|
||||||
QPixmapCache::insert(pixmapName, pixmap);
|
QPixmapCache::insert(pixmapName, pixmap);
|
||||||
}
|
}
|
||||||
int xOffset = r.x() + (r.width() - size)/2;
|
int xOffset = r.x() + (r.width() - size)/2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user