33 const qreal devicePixelRatioF = painter->device()->devicePixelRatioF();
36 thumbnail.setDevicePixelRatio(devicePixelRatioF);
52 QRect innerRect = addMargin ?
rect.adjusted(2, 2, -2, -2) :
rect;
53 QSize innerRectSizeDPI = innerRect.size() * devicePixelRatioF;
55 painter->setRenderHint(QPainter::SmoothPixmapTransform,
true);
59 if (!thumbnail.isNull()) {
62 Qt::IgnoreAspectRatio,
63 Qt::SmoothTransformation);
64 thumbnail.setDevicePixelRatio(devicePixelRatioF);
65 painter->drawImage(innerRect.topLeft(), thumbnail);
68 painter->fillRect(innerRect, Qt::white);
71 double scale = qMin(
double(thumbnail.height()) / innerRectSizeDPI.height(),
double(thumbnail.width()) / innerRectSizeDPI.width());
72 if (!thumbnail.isNull() && (scale >= 1.0)) {
73 scale = qMin(scale, 2.0);
74 QRect sourceRect = QRect(0, 0, innerRectSizeDPI.width() * scale, innerRectSizeDPI.height() * scale);
75 painter->drawImage(innerRect, thumbnail, sourceRect);
79 painter->setRenderHint(QPainter::SmoothPixmapTransform,
false);
80 QBrush patternBrush(thumbnail);
81 painter->setBrushOrigin(innerRect.topLeft());
82 painter->fillRect(innerRect, patternBrush);
86 painter->fillRect(innerRect, Qt::white);
87 QPen before = painter->pen();
88 painter->setPen(Qt::black);
89 painter->drawText(innerRect, Qt::TextWordWrap, name.split(
"_").join(
" "));
90 painter->setPen(before);
92 painter->fillRect(innerRect, Qt::white);
93 if (!thumbnail.isNull() && !(thumbnail.height() == innerRectSizeDPI.height() &&
94 thumbnail.width() == innerRectSizeDPI.width())) {
95 bool needsUpscaling = thumbnail.height() < innerRectSizeDPI.height()
96 || thumbnail.width() < innerRectSizeDPI.width();
101 needsUpscaling ? Qt::FastTransformation
102 : Qt::SmoothTransformation);
103 thumbnail.setDevicePixelRatio(devicePixelRatioF);
105 QPoint topleft(innerRect.topLeft());
107 if (thumbnail.width() < innerRectSizeDPI.width()) {
108 topleft.setX(topleft.x() + (innerRect.width() - thumbnail.width()/devicePixelRatioF) / 2);
110 if (thumbnail.height() < innerRectSizeDPI.height()) {
111 topleft.setY(topleft.y() + (innerRect.height() - thumbnail.height()/devicePixelRatioF) / 2);
113 painter->drawImage(topleft, thumbnail);