Fix effects for highdpi graphical items
Create a highdpi pixmap as a source for graphical effects. Fixes: QTBUG-74963 Change-Id: Ie144df3dbe61421fb28e639e640857aca6e6320f Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>bb10
parent
a552864c3b
commit
73698cb340
|
|
@ -11334,7 +11334,7 @@ void QGraphicsItemEffectSourcePrivate::draw(QPainter *painter)
|
|||
}
|
||||
|
||||
// sourceRect must be in the given coordinate system
|
||||
QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const
|
||||
QRectF QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const
|
||||
{
|
||||
QRectF effectRectF;
|
||||
|
||||
|
|
@ -11362,7 +11362,7 @@ QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem sy
|
|||
*unpadded = true;
|
||||
}
|
||||
|
||||
return effectRectF.toAlignedRect();
|
||||
return effectRectF;
|
||||
}
|
||||
|
||||
QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint *offset,
|
||||
|
|
@ -11380,7 +11380,8 @@ QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QP
|
|||
|
||||
bool unpadded;
|
||||
const QRectF sourceRect = boundingRect(system);
|
||||
QRect effectRect = paddedEffectRect(system, mode, sourceRect, &unpadded);
|
||||
QRectF effectRectF = paddedEffectRect(system, mode, sourceRect, &unpadded);
|
||||
QRect effectRect = effectRectF.toAlignedRect();
|
||||
|
||||
if (offset)
|
||||
*offset = effectRect.topLeft();
|
||||
|
|
@ -11396,7 +11397,9 @@ QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QP
|
|||
if (effectRect.isEmpty())
|
||||
return QPixmap();
|
||||
|
||||
QPixmap pixmap(effectRect.size());
|
||||
const auto dpr = info ? info->painter->device()->devicePixelRatioF() : 1.0;
|
||||
QPixmap pixmap(QRectF(effectRectF.topLeft(), effectRectF.size() * dpr).toAlignedRect().size());
|
||||
pixmap.setDevicePixelRatio(dpr);
|
||||
pixmap.fill(Qt::transparent);
|
||||
QPainter pixmapPainter(&pixmap);
|
||||
pixmapPainter.setRenderHints(info ? info->painter->renderHints() : QPainter::TextAntialiasing);
|
||||
|
|
|
|||
|
|
@ -644,7 +644,7 @@ public:
|
|||
QPixmap pixmap(Qt::CoordinateSystem system,
|
||||
QPoint *offset,
|
||||
QGraphicsEffect::PixmapPadMode mode) const override;
|
||||
QRect paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const;
|
||||
QRectF paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const;
|
||||
|
||||
QGraphicsItem *item;
|
||||
QGraphicsItemPaintInfo *info;
|
||||
|
|
|
|||
|
|
@ -4847,7 +4847,7 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
|
|||
&& painter->worldTransform().type() <= QTransform::TxTranslate)
|
||||
{
|
||||
QRectF sourceRect = sourced->boundingRect(Qt::DeviceCoordinates);
|
||||
QRect effectRect = sourced->paddedEffectRect(Qt::DeviceCoordinates, sourced->currentCachedMode(), sourceRect);
|
||||
QRect effectRect = sourced->paddedEffectRect(Qt::DeviceCoordinates, sourced->currentCachedMode(), sourceRect).toAlignedRect();
|
||||
|
||||
sourced->setCachedOffset(effectRect.topLeft());
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue