Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPresetDelegate Class Reference

The resource item delegate for rendering the resource preview. More...

+ Inheritance diagram for KisPresetDelegate:

Public Member Functions

 KisPresetDelegate (QObject *parent=0)
 
void paint (QPainter *, const QStyleOptionViewItem &, const QModelIndex &) const override
 reimplemented
 
void setShowText (bool showText)
 
void setUseDirtyPresets (bool value)
 
QSize sizeHint (const QStyleOptionViewItem &option, const QModelIndex &) const override
 reimplemented
 
 ~KisPresetDelegate () override
 

Private Attributes

bool m_showText
 
bool m_useDirtyPresets
 

Detailed Description

The resource item delegate for rendering the resource preview.

Definition at line 43 of file kis_preset_chooser.cpp.

Constructor & Destructor Documentation

◆ KisPresetDelegate()

KisPresetDelegate::KisPresetDelegate ( QObject * parent = 0)
inline

Definition at line 46 of file kis_preset_chooser.cpp.

47 : QAbstractItemDelegate(parent)
48 , m_showText(false)
49 , m_useDirtyPresets(false) {}

◆ ~KisPresetDelegate()

KisPresetDelegate::~KisPresetDelegate ( )
inlineoverride

Definition at line 51 of file kis_preset_chooser.cpp.

51{}

Member Function Documentation

◆ paint()

void KisPresetDelegate::paint ( QPainter * painter,
const QStyleOptionViewItem & option,
const QModelIndex & index ) const
override

reimplemented

Definition at line 74 of file kis_preset_chooser.cpp.

75{
76 painter->save();
77 painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
78 if (!(option.state & QStyle::State_Enabled)) {
79 painter->setOpacity(0.2);
80 }
81
82 if (!index.isValid()) {
83 painter->restore();
84 return;
85 }
86
87 bool dirty = index.data(Qt::UserRole + KisAbstractResourceModel::Dirty).toBool();
88
89 QImage preview = KisResourceThumbnailCache::instance()->getImage(index);
90
91 if (preview.isNull()) {
92 preview = QImage(512, 512, QImage::Format_RGB32);
93 preview.fill(Qt::red);
94 }
95
96 qreal devicePixelRatioF = painter->device()->devicePixelRatioF();
97
98 QRect paintRect = option.rect.adjusted(1, 1, -1, -1);
99 if (!m_showText) {
100 QImage previewHighDpi =
102 paintRect.size() * devicePixelRatioF,
103 Qt::IgnoreAspectRatio,
104 Qt::SmoothTransformation);
105 previewHighDpi.setDevicePixelRatio(devicePixelRatioF);
106 painter->drawImage(paintRect.x(), paintRect.y(), previewHighDpi);
107 }
108 else {
109 QSize pixSize(paintRect.height(), paintRect.height());
110 QImage previewHighDpi = KisResourceThumbnailCache::instance()->getImage(index,
111 pixSize * devicePixelRatioF,
112 Qt::KeepAspectRatio,
113 Qt::SmoothTransformation);
114 previewHighDpi.setDevicePixelRatio(devicePixelRatioF);
115 painter->drawImage(paintRect.x(), paintRect.y(), previewHighDpi);
116
117 // Put an asterisk after the preset if it is dirty. This will help in case the pixmap icon is too small
118
119 QString dirtyPresetIndicator = QString("");
120 if (m_useDirtyPresets && dirty) {
121 dirtyPresetIndicator = QString("*");
122 }
123
124// qreal brushSize = metaData["paintopSize"].toReal();
125// qDebug() << "brushsize" << brushSize;
126// QString brushSizeText;
127// // Disable displayed decimal precision beyond a certain brush size
128// if (brushSize < 100) {
129// brushSizeText = QString::number(brushSize, 'g', 3);
130// }
131// else {
132// brushSizeText = QString::number(brushSize, 'f', 0);
133// }
134
135// painter->drawText(pixSize.width() + 10, option.rect.y() + option.rect.height() - 10, brushSizeText); // brush size
136
137 QString presetDisplayName = index.data(Qt::UserRole + KisAbstractResourceModel::Name).toString().replace("_", " "); // don't need underscores that might be part of the file name
138 painter->drawText(pixSize.width() + 10, option.rect.y() + option.rect.height() - 10, presetDisplayName.append(dirtyPresetIndicator));
139
140 }
141
142 if (m_useDirtyPresets && dirty) {
143 const QIcon icon = KisIconUtils::loadIcon("dirty-preset");
144 QPixmap pixmap = icon.pixmap(QSize(16,16));
145 painter->drawPixmap(paintRect.x() + 3, paintRect.y() + 3, pixmap);
146 }
147
148 if (index.data(Qt::UserRole + KisAbstractResourceModel::BrokenStatus).toBool()) {
149 const QIcon icon = KisIconUtils::loadIcon("broken-preset");
150 icon.paint(painter, QRect(paintRect.x() + paintRect.height() - 25, paintRect.y() + paintRect.height() - 25, 25, 25));
151 }
152
153 if (option.state & QStyle::State_Selected) {
154 painter->setCompositionMode(QPainter::CompositionMode_HardLight);
155 painter->setOpacity(1.0);
156 painter->fillRect(option.rect, option.palette.highlight());
157
158 // highlight is not strong enough to pick out preset. draw border around it.
159 painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
160 painter->setPen(QPen(option.palette.highlight(), 4, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin));
161 QRect selectedBorder = option.rect.adjusted(2 , 2, -2, -2); // constrict the rectangle so it doesn't bleed into other presets
162 painter->drawRect(selectedBorder);
163 }
164
165 painter->restore();
166
167}
@ Dirty
A dirty resource is one that has been modified locally but not saved.
@ BrokenStatus
Whether the resource is broken (bool)
static KisResourceThumbnailCache * instance()
QImage getImage(const QModelIndex &index, const QSize size=QSize(-1, -1), Qt::AspectRatioMode aspectMode=Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode=Qt::FastTransformation)
QIcon loadIcon(const QString &name)

References KisAbstractResourceModel::BrokenStatus, KisAbstractResourceModel::Dirty, KisResourceThumbnailCache::getImage(), KisResourceThumbnailCache::instance(), KisIconUtils::loadIcon(), m_showText, m_useDirtyPresets, and KisAbstractResourceModel::Name.

◆ setShowText()

void KisPresetDelegate::setShowText ( bool showText)
inline

Definition at line 61 of file kis_preset_chooser.cpp.

61 {
62 m_showText = showText;
63 }

References m_showText.

◆ setUseDirtyPresets()

void KisPresetDelegate::setUseDirtyPresets ( bool value)
inline

Definition at line 65 of file kis_preset_chooser.cpp.

65 {
67 }
float value(const T *src, size_t ch)

References m_useDirtyPresets, and value().

◆ sizeHint()

QSize KisPresetDelegate::sizeHint ( const QStyleOptionViewItem & option,
const QModelIndex &  ) const
inlineoverride

reimplemented

Definition at line 57 of file kis_preset_chooser.cpp.

57 {
58 return option.decorationSize;
59 }

Member Data Documentation

◆ m_showText

bool KisPresetDelegate::m_showText
private

Definition at line 70 of file kis_preset_chooser.cpp.

◆ m_useDirtyPresets

bool KisPresetDelegate::m_useDirtyPresets
private

Definition at line 71 of file kis_preset_chooser.cpp.


The documentation for this class was generated from the following file: