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

#include <KisIconToolTip.h>

+ Inheritance diagram for KisIconToolTip:

Public Member Functions

 KisIconToolTip (QWidget *parent)
 
void setFixedToolTipThumbnailSize (const QSize &size)
 
void setToolTipShouldRenderCheckers (bool value)
 
 ~KisIconToolTip () override
 
- Public Member Functions inherited from KoItemToolTip
 KoItemToolTip (QWidget *parent)
 
void showTip (const QPoint &pos, const QStyleOptionViewItem &option, const QModelIndex &index)
 
QSize sizeHint () const override
 
 ~KoItemToolTip () override
 

Protected Member Functions

QTextDocument * createDocument (const QModelIndex &index) override
 
- Protected Member Functions inherited from KoItemToolTip
bool eventFilter (QObject *object, QEvent *event) override
 
void paintEvent (QPaintEvent *e) override
 

Private Attributes

QScopedPointer< KoCheckerBoardPainter > m_checkersPainter
 
QSize m_fixedToolTipThumbnailSize
 

Additional Inherited Members

- Public Attributes inherited from KoItemToolTip
std::unique_ptr< QTextDocument > document
 
QPersistentModelIndex index
 
QPoint pos
 
QTimer timer
 

Detailed Description

Definition at line 18 of file KisIconToolTip.h.

Constructor & Destructor Documentation

◆ KisIconToolTip()

KisIconToolTip::KisIconToolTip ( QWidget * parent)

Definition at line 22 of file KisIconToolTip.cpp.

23 : KoItemToolTip(parent)
24{
25}
KoItemToolTip(QWidget *parent)

◆ ~KisIconToolTip()

KisIconToolTip::~KisIconToolTip ( )
override

Definition at line 27 of file KisIconToolTip.cpp.

28{
29}

Member Function Documentation

◆ createDocument()

QTextDocument * KisIconToolTip::createDocument ( const QModelIndex & index)
overrideprotectedvirtual

Re-implement this to provide the actual tooltip contents. For instance:

QTextDocument *doc = new QTextDocument(this);
QImage thumb = index.data(Qt::UserRole + KisAbstractResourceModel::LargeThumbnail).value<QImage>();
doc->addResource(QTextDocument::ImageResource, QUrl("data:thumbnail"), thumb);
QString name = index.data(Qt::DisplayRole).toString();
const QString image = QString("<img src=\"data:thumbnail\">");
const QString body = QString("<h3 align=\"center\">%1</h3>").arg(name) + image;
const QString html = QString("<html><body>%1</body></html>").arg(body);
doc->setHtml(html);
doc->setTextWidth(qMin(doc->size().width(), 500.0));
return doc;
@ LargeThumbnail
A larger thumbnail for displaying in a tooltip. 200x200 or so.
QPersistentModelIndex index

Implements KoItemToolTip.

Definition at line 45 of file KisIconToolTip.cpp.

46{
47 QTextDocument *doc = new QTextDocument(this);
48
49 QImage thumb = index.data(Qt::DecorationRole).value<QImage>();
50 if (thumb.isNull()) {
51 thumb = index.data(Qt::UserRole + KisAbstractResourceModel::Thumbnail).value<QImage>();
52 }
53
54 if (!m_fixedToolTipThumbnailSize.isEmpty() && !thumb.isNull()) {
55 int pixelSize = 48; // // let's say, 48x48?
56 if (!thumb.isNull()) {
57 // affects mostly gradients, which are very long but only 1px tall
58 Qt::AspectRatioMode aspectRatioMode = thumb.height() == 1 ? Qt::IgnoreAspectRatio : Qt::KeepAspectRatio;
59 // this allows the pixel patterns to be displayed correctly,
60 // while the presets (which have 200x200 thumbnails) will still be pretty
61 // Fast Transformation == Nearest Neighbour
62 Qt::TransformationMode transformationMode = (thumb.width() < pixelSize || thumb.height() < pixelSize) ? Qt::FastTransformation : Qt::SmoothTransformation;
63
66 * devicePixelRatioF(),
67 aspectRatioMode,
68 transformationMode);
69 }
70 }
71
73 QImage image(thumb.size(), QImage::Format_ARGB32);
74
75 {
76 QPainter gc(&image);
77 m_checkersPainter->paint(gc, thumb.rect());
78 gc.drawImage(QPoint(), thumb);
79 }
80
81 thumb = image;
82 }
83
84 thumb.setDevicePixelRatio(devicePixelRatioF());
85 doc->addResource(QTextDocument::ImageResource, QUrl("data:thumbnail"), thumb);
86
87 QString name = index.data(Qt::DisplayRole).toString();
88 QString presetDisplayName = index.data(Qt::UserRole + KisAbstractResourceModel::Name).toString().replace("_", " ");
89 //This is to ensure that the other uses of this class don't get an empty string, while resource management should get a nice string.
90 if (!presetDisplayName.isEmpty()) {
91 name = presetDisplayName;
92 }
93
94 QString translatedName = index.data(Qt::UserRole + KisAbstractResourceModel::Tooltip).toString().replace("_", " ");
95
96 QString tagsRow;
97 QString tagsData = index.data(Qt::UserRole + KisAbstractResourceModel::Tags).toStringList().join(", ");
98 if (!tagsData.isEmpty()) {
99 const QString list = QString("<ul style=\"list-style-type: none; margin: 0px;\">%1</ul> ").arg(tagsData);
100 tagsRow = QString("<tr><td>%1:</td><td style=\"text-align: right;\">%2</td></tr>").arg(i18n("Tags"), list);
101 }
102
103 const QString brokenReason = index.data(Qt::UserRole + KisAbstractResourceModel::BrokenStatusMessage).toString();
104 const QString brokenRow =
105 !brokenReason.isEmpty()
106 ? QString("<tr><td colspan=\"2\"><b>%1</b></td></tr>"
107 "<tr><td colspan=\"2\">%2</td></tr>")
108 .arg(i18n("Resource is broken!"), brokenReason)
109 : QString();
110
111 QString location = index.data(Qt::UserRole + KisAbstractResourceModel::Location).toString();
112 if (location.isEmpty()) {
113 location = i18nc("a placeholder name for the default storage of resources", "resource folder");
114 }
115
116 const QString locationRow = QString("<tr><td>%1:</td><td style=\"text-align: right;\">%2</td></tr>").arg(i18n("Location"), location);
117
118 const QString footerTable = QString("<p><table>%1%2%3</table></p>").arg(brokenRow).arg(tagsRow).arg(locationRow);
119
120 const QString image = QString("<center><img src=\"data:thumbnail\"></center>");
121 QString body = QString("<h3 align=\"center\">%1</h3>%2%3").arg(name, image, footerTable);
122 if (translatedName != name) {
123 body = QString("<h3 align=\"center\">%1</h3><h4 align=\"center\">%2</h4>%3%4").arg(name, translatedName, image, footerTable);
124 }
125 const QString html = QString("<html><body>%1</body></html>").arg(body);
126
127 doc->setHtml(html);
128
129 const int margin = 16;
130 doc->setTextWidth(qMin(doc->size().width() + 2 * margin, qreal(500.0)));
131 doc->setDocumentMargin(margin);
132 doc->setUseDesignMetrics(true);
133
134 return doc;
135}
QScopedPointer< KoCheckerBoardPainter > m_checkersPainter
QSize m_fixedToolTipThumbnailSize
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)

References KisAbstractResourceModel::BrokenStatusMessage, KisResourceThumbnailCache::getImage(), KoItemToolTip::index, KisResourceThumbnailCache::instance(), KisAbstractResourceModel::Location, m_checkersPainter, m_fixedToolTipThumbnailSize, KisAbstractResourceModel::Name, KisAbstractResourceModel::Tags, KisAbstractResourceModel::Thumbnail, and KisAbstractResourceModel::Tooltip.

◆ setFixedToolTipThumbnailSize()

void KisIconToolTip::setFixedToolTipThumbnailSize ( const QSize & size)

Definition at line 31 of file KisIconToolTip.cpp.

32{
34}
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References m_fixedToolTipThumbnailSize.

◆ setToolTipShouldRenderCheckers()

void KisIconToolTip::setToolTipShouldRenderCheckers ( bool value)

Definition at line 36 of file KisIconToolTip.cpp.

37{
38 if (value) {
40 } else {
41 m_checkersPainter.reset();
42 }
43}
float value(const T *src, size_t ch)

References m_checkersPainter, and value().

Member Data Documentation

◆ m_checkersPainter

QScopedPointer<KoCheckerBoardPainter> KisIconToolTip::m_checkersPainter
private

Definition at line 33 of file KisIconToolTip.h.

◆ m_fixedToolTipThumbnailSize

QSize KisIconToolTip::m_fixedToolTipThumbnailSize
private

Definition at line 32 of file KisIconToolTip.h.


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