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 (KisResourceMetaDataModel *metaDataModel, 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

KisResourceMetaDataModelm_metaDataModel
 
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 ( KisResourceMetaDataModel * metaDataModel,
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)
50 , m_metaDataModel(metaDataModel) {}
KisResourceMetaDataModel * m_metaDataModel

◆ ~KisPresetDelegate()

KisPresetDelegate::~KisPresetDelegate ( )
inlineoverride

Definition at line 52 of file kis_preset_chooser.cpp.

52{}

Member Function Documentation

◆ paint()

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

reimplemented

Definition at line 76 of file kis_preset_chooser.cpp.

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

62 {
63 m_showText = showText;
64 }

References m_showText.

◆ setUseDirtyPresets()

void KisPresetDelegate::setUseDirtyPresets ( bool value)
inline

Definition at line 66 of file kis_preset_chooser.cpp.

66 {
68 }
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 58 of file kis_preset_chooser.cpp.

58 {
59 return option.decorationSize;
60 }

Member Data Documentation

◆ m_metaDataModel

KisResourceMetaDataModel* KisPresetDelegate::m_metaDataModel
private

Definition at line 73 of file kis_preset_chooser.cpp.

◆ m_showText

bool KisPresetDelegate::m_showText
private

Definition at line 71 of file kis_preset_chooser.cpp.

◆ m_useDirtyPresets

bool KisPresetDelegate::m_useDirtyPresets
private

Definition at line 72 of file kis_preset_chooser.cpp.


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