rpcsx/rpcs3/rpcs3qt/game_list_grid_delegate.cpp

68 lines
2.1 KiB
C++
Raw Normal View History

2020-12-05 13:08:24 +01:00
#include "game_list_grid_delegate.h"
2018-06-29 04:25:14 +02:00
game_list_grid_delegate::game_list_grid_delegate(const QSize& size, const qreal& margin_factor, const qreal& text_factor, QObject *parent)
: QStyledItemDelegate(parent), m_size(size), m_margin_factor(margin_factor), m_text_factor(text_factor)
{
}
void game_list_grid_delegate::initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const
2018-06-29 04:25:14 +02:00
{
2021-04-07 23:05:18 +02:00
Q_UNUSED(index)
2019-08-10 10:40:28 +02:00
2018-06-29 04:25:14 +02:00
// Remove the focus frame around selected items
option->state &= ~QStyle::State_HasFocus;
// Call initStyleOption without a model index, since we want to paint the relevant data ourselves
QStyledItemDelegate::initStyleOption(option, QModelIndex());
}
void game_list_grid_delegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
2021-04-07 23:05:18 +02:00
const QRect r = option.rect;
2020-02-09 22:41:41 +01:00
painter->setRenderHints(QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
painter->eraseRect(r);
// Get title and image
2021-04-07 23:05:18 +02:00
const QPixmap image = qvariant_cast<QPixmap>(index.data(Qt::DecorationRole));
2020-02-09 22:41:41 +01:00
const QString title = index.data(Qt::DisplayRole).toString();
2018-06-29 04:25:14 +02:00
// Paint from our stylesheet
QStyledItemDelegate::paint(painter, option, index);
// image
if (image.isNull() == false)
{
2018-06-29 04:25:14 +02:00
painter->drawPixmap(option.rect, image);
}
2020-02-09 22:41:41 +01:00
const int h = r.height() / (1 + m_margin_factor + m_margin_factor * m_text_factor);
const int height = r.height() - h - h * m_margin_factor;
const int top = r.bottom() - height;
// title
2018-06-29 04:25:14 +02:00
if (option.state & QStyle::State_Selected)
{
painter->setPen(QPen(option.palette.color(QPalette::HighlightedText), 1, Qt::SolidLine));
}
else
{
painter->setPen(QPen(option.palette.color(QPalette::WindowText), 1, Qt::SolidLine));
}
painter->setFont(option.font);
2021-01-07 11:18:48 +01:00
painter->drawText(QRect(r.left(), top, r.width(), height), +Qt::TextWordWrap | +Qt::AlignCenter, title);
}
QSize game_list_grid_delegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
{
2021-04-07 23:05:18 +02:00
Q_UNUSED(option)
Q_UNUSED(index)
return m_size;
}
void game_list_grid_delegate::setItemSize(const QSize& size)
{
m_size = size;
}