summaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/common/centerediconitemdelegate.cpp
blob: 83d8cc3b1fc094033e79fcde00fe6bcf9811976d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "centerediconitemdelegate.h"
#include <QApplication>
#include <QPainter>

CenteredIconItemDelegate::CenteredIconItemDelegate(QObject* parent) :
    QStyledItemDelegate(parent)
{
}

void CenteredIconItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    if (!index.isValid())
        return;

    QStyleOptionViewItem opt = option;
    initStyleOption(&opt, index);

    // disable default icon
    opt.icon = QIcon();
    if (opt.features.testFlag(QStyleOptionViewItem::HasDecoration))
        opt.features ^= QStyleOptionViewItem::HasDecoration;

    // draw default item
    QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, 0);

    const QRect r = option.rect;

    // get pixmap
    QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
    QPixmap pix = icon.pixmap(r.size());

    // draw pixmap at center of item
    const QPoint p = QPoint((r.width() - pix.width()) / 2, (r.height() - pix.height()) / 2);
    painter->drawPixmap(r.topLeft() + p, pix);
}