1
0
Fork 0

Nicer rendering of aircraft ratings.

This commit is contained in:
James Turner 2016-11-29 15:13:56 +00:00
parent 80bf762556
commit 825c8c2006

View file

@ -30,6 +30,14 @@
#include "AircraftModel.hxx" #include "AircraftModel.hxx"
const int DOT_SIZE = 11;
const int DOT_MARGIN = 2;
int dotBoxWidth()
{
return (DOT_MARGIN * 6 + DOT_SIZE * 5);
}
AircraftItemDelegate::AircraftItemDelegate(QListView* view) : AircraftItemDelegate::AircraftItemDelegate(QListView* view) :
m_view(view) m_view(view)
{ {
@ -138,14 +146,17 @@ void AircraftItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem
longDescription, &actualBounds); longDescription, &actualBounds);
} }
QRect r = contentRect;
r.setWidth(contentRect.width() / 2);
r.moveTop(actualBounds.bottom() + MARGIN);
r.setHeight(qMax(24, smallMetrics.height() + MARGIN));
painter->setRenderHint(QPainter::Antialiasing, true); painter->setRenderHint(QPainter::Antialiasing, true);
if (index.data(AircraftHasRatingsRole).toBool()) { if (index.data(AircraftHasRatingsRole).toBool()) {
int ratingsWidth = smallMetrics.width("Flight model:") + dotBoxWidth();
QRect r = contentRect;
r.setWidth(ratingsWidth);
r.moveLeft(contentRect.right() - (ratingsWidth * 2));
r.moveTop(actualBounds.bottom() + MARGIN);
r.setHeight(qMax(24, smallMetrics.height() + MARGIN));
drawRating(painter, "Flight model:", r, index.data(AircraftRatingRole).toInt()); drawRating(painter, "Flight model:", r, index.data(AircraftRatingRole).toInt());
r.moveTop(r.bottom()); r.moveTop(r.bottom());
drawRating(painter, "Systems:", r, index.data(AircraftRatingRole + 1).toInt()); drawRating(painter, "Systems:", r, index.data(AircraftRatingRole + 1).toInt());
@ -380,20 +391,19 @@ QRect AircraftItemDelegate::packageButtonRect(const QRect& visualRect, const QMo
void AircraftItemDelegate::drawRating(QPainter* painter, QString label, const QRect& box, int value) const void AircraftItemDelegate::drawRating(QPainter* painter, QString label, const QRect& box, int value) const
{ {
const int DOT_SIZE = 10;
const int DOT_MARGIN = 2;
QRect dotBox = box; QRect dotBox = box;
dotBox.setLeft(box.right() - (DOT_MARGIN * 6 + DOT_SIZE * 5)); dotBox.setLeft(box.right() - dotBoxWidth());
painter->setPen(Qt::black); painter->setPen(Qt::black);
QRect textBox = box; QRect textBox = box;
textBox.setRight(dotBox.left() - DOT_MARGIN); textBox.setRight(dotBox.left());
painter->drawText(textBox, Qt::AlignVCenter | Qt::AlignRight, label); painter->drawText(textBox, Qt::AlignVCenter | Qt::AlignRight, label);
painter->setPen(Qt::NoPen); painter->setPen(Qt::NoPen);
// magic +1 offset in to account for fonts having more empty ascent
// space than descent space
QRect dot(dotBox.left() + DOT_MARGIN, QRect dot(dotBox.left() + DOT_MARGIN,
dotBox.center().y() - (DOT_SIZE / 2), dotBox.center().y() - (DOT_SIZE / 2) + 1,
DOT_SIZE, DOT_SIZE,
DOT_SIZE); DOT_SIZE);
for (int i=0; i<5; ++i) { for (int i=0; i<5; ++i) {