58{
59 painter->save();
60 painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
61
62 if (!index.isValid())
63 return;
64
67
68 if(preview.isNull()) {
69 return;
70 }
71
72 QRect paintRect = option.rect.adjusted(1, 1, -1, -1);
73
74 qreal devicePixelRatioF = painter->device()->devicePixelRatioF();
75
77 QImage previewHighDPI =
79 paintRect.size() * devicePixelRatioF,
80 Qt::IgnoreAspectRatio,
81 Qt::SmoothTransformation);
82 previewHighDPI.setDevicePixelRatio(devicePixelRatioF);
83 painter->drawImage(paintRect.x(), paintRect.y(), previewHighDPI);
84
85 if (option.state & QStyle::State_Selected) {
86 painter->setCompositionMode(QPainter::CompositionMode_Overlay);
87 painter->setOpacity(0.5);
88 painter->fillRect(paintRect, Qt::white);
89 painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
90 painter->setOpacity(1.0);
91 painter->setPen(QPen(option.palette.highlight(), 2, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin));
92 QRect selectedBorder = option.rect.adjusted(1, 1, -1, -1);
93 painter->drawRect(selectedBorder);
94 }
95 } else {
96 QSize previewSize(paintRect.height(), paintRect.height());
97
98 QImage previewHighDPI =
100 previewSize * devicePixelRatioF,
101 Qt::IgnoreAspectRatio,
102 Qt::SmoothTransformation);
103 previewHighDPI.setDevicePixelRatio(devicePixelRatioF);
104
105 if (option.state & QStyle::State_Selected) {
106 painter->setPen(QPen(option.palette.highlight(), 2.0));
107 painter->fillRect(option.rect, option.palette.highlight());
108 painter->setPen(option.palette.highlightedText().color());
109 }
110 painter->drawImage(paintRect.x(), paintRect.y(), previewHighDPI);
111
112 int leftMargin = 8;
113 int rightMargin = 7;
114 int vertMargin = 4;
115 int descOffset = 7;
116 QFont font = option.font;
117 font.setBold(true);
118 painter->setFont(font);
119 QRectF titleRect(QPointF(previewSize.width() + leftMargin, paintRect.y() + vertMargin),
120 QPointF(paintRect.width() - rightMargin, paintRect.y() + descOffset + painter->fontMetrics().lineSpacing()));
121 painter->drawText(titleRect, Qt::AlignLeft,
122 painter->fontMetrics().elidedText(
123 name, Qt::ElideRight, titleRect.width()
124 )
125 );
126 const QString descriptionKey = "description";
129 if (!description.isEmpty() && !description.isNull()) {
130 font.setPointSize(font.pointSize()-1);
131 font.setBold(false);
132 font.setStyle(QFont::StyleItalic);
133 painter->setFont(font);
134 QRectF descRect(QPointF(previewSize.width() + leftMargin, paintRect.y() + descOffset + painter->fontMetrics().lineSpacing()),
135 QPointF(paintRect.right() - rightMargin, paintRect.bottom() - vertMargin));
136
137 int numLines = floor(((float)descRect.height() / (float)painter->fontMetrics().lineSpacing()));
138 if (numLines > 0) {
139 int elideWidth = 0;
140 QTextLayout textLayout(description);
141 textLayout.beginLayout();
142 for (int i = 0; i < numLines; i++) {
143 QTextLine line = textLayout.createLine();
144 if (line.isValid()) {
145 line.setLineWidth(descRect.width());
146 elideWidth += line.naturalTextWidth();
147 }
148 }
149
150 QString elidedText = painter->fontMetrics().elidedText(description, Qt::ElideRight, elideWidth);
151 painter->drawText(descRect, Qt::AlignLeft|Qt::TextWordWrap, elidedText);
152 }
153 }
154 }
155
156 painter->restore();
157}
static KisResourceThumbnailCache * instance()
QImage getImage(const QModelIndex &index, const QSize size=QSize(-1, -1), Qt::AspectRatioMode aspectMode=Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode=Qt::FastTransformation)
const char * name(StandardAction id)