32 const qreal devicePixelRatioF = painter->device()->devicePixelRatioF();
35 thumbnail.setDevicePixelRatio(devicePixelRatioF);
51 QRect innerRect = addMargin ?
rect.adjusted(2, 2, -2, -2) :
rect;
52 QSize innerRectSizeDPI = innerRect.size() * devicePixelRatioF;
54 painter->setRenderHint(QPainter::SmoothPixmapTransform,
true);
58 if (!thumbnail.isNull()) {
61 Qt::IgnoreAspectRatio,
62 Qt::SmoothTransformation);
63 thumbnail.setDevicePixelRatio(devicePixelRatioF);
64 painter->drawImage(innerRect.topLeft(), thumbnail);
67 painter->fillRect(innerRect, Qt::white);
70 double scale = qMin(
double(thumbnail.height()) / innerRectSizeDPI.height(),
double(thumbnail.width()) / innerRectSizeDPI.width());
71 if (!thumbnail.isNull() && (scale >= 1.0)) {
72 scale = qMin(scale, 2.0);
73 QRect sourceRect = QRect(0, 0, innerRectSizeDPI.width() * scale, innerRectSizeDPI.height() * scale);
74 painter->drawImage(innerRect, thumbnail, sourceRect);
78 painter->setRenderHint(QPainter::SmoothPixmapTransform,
false);
79 QBrush patternBrush(thumbnail);
80 painter->setBrushOrigin(innerRect.topLeft());
81 painter->fillRect(innerRect, patternBrush);
85 painter->fillRect(innerRect, Qt::white);
86 QPen before = painter->pen();
87 painter->setPen(Qt::black);
88 painter->drawText(innerRect, Qt::TextWordWrap, name.split(
"_").join(
" "));
89 painter->setPen(before);
91 painter->fillRect(innerRect, Qt::white);
92 if (!thumbnail.isNull() && !(thumbnail.height() == innerRectSizeDPI.height() &&
93 thumbnail.width() == innerRectSizeDPI.width())) {
94 bool needsUpscaling = thumbnail.height() < innerRectSizeDPI.height()
95 || thumbnail.width() < innerRectSizeDPI.width();
100 needsUpscaling ? Qt::FastTransformation
101 : Qt::SmoothTransformation);
102 thumbnail.setDevicePixelRatio(devicePixelRatioF);
104 QPoint topleft(innerRect.topLeft());
106 if (thumbnail.width() < innerRectSizeDPI.width()) {
107 topleft.setX(topleft.x() + (innerRect.width() - thumbnail.width()/devicePixelRatioF) / 2);
109 if (thumbnail.height() < innerRectSizeDPI.height()) {
110 topleft.setY(topleft.y() + (innerRect.height() - thumbnail.height()/devicePixelRatioF) / 2);
112 painter->drawImage(topleft, thumbnail);