Merge pull request #39 from Sebbl0508/mod_dialog_fontsize
This commit is contained in:
commit
12d8409e65
@ -51,6 +51,8 @@ void ProjectItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& o
|
|||||||
auto remaining_width = rect.width() - icon_width - 2 * icon_x_margin;
|
auto remaining_width = rect.width() - icon_width - 2 * icon_x_margin;
|
||||||
rect.setRect(rect.x() + icon_width + 2 * icon_x_margin, rect.y(), remaining_width, rect.height());
|
rect.setRect(rect.x() + icon_width + 2 * icon_x_margin, rect.y(), remaining_width, rect.height());
|
||||||
|
|
||||||
|
int title_height = 0;
|
||||||
|
|
||||||
{ // Title painting
|
{ // Title painting
|
||||||
auto title = index.data(UserDataTypes::TITLE).toString();
|
auto title = index.data(UserDataTypes::TITLE).toString();
|
||||||
|
|
||||||
@ -66,8 +68,10 @@ void ProjectItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& o
|
|||||||
font.setPointSize(font.pointSize() + 2);
|
font.setPointSize(font.pointSize() + 2);
|
||||||
painter->setFont(font);
|
painter->setFont(font);
|
||||||
|
|
||||||
|
title_height = QFontMetrics(font).height();
|
||||||
|
|
||||||
// On the top, aligned to the left after the icon
|
// On the top, aligned to the left after the icon
|
||||||
painter->drawText(rect.x(), rect.y() + QFontMetrics(font).height(), title);
|
painter->drawText(rect.x(), rect.y() + title_height, title);
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
@ -82,17 +86,38 @@ void ProjectItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& o
|
|||||||
|
|
||||||
// Get first line unconditionally
|
// Get first line unconditionally
|
||||||
description = cut_text.first().second;
|
description = cut_text.first().second;
|
||||||
|
auto num_lines = 1;
|
||||||
|
|
||||||
// Get second line, elided if needed
|
// Get second line, elided if needed
|
||||||
if (cut_text.size() > 1) {
|
if (cut_text.size() > 1) {
|
||||||
if (cut_text.size() > 2)
|
// 2.5x so because there should be some margin left from the 2x so things don't get too squishy.
|
||||||
|
if (rect.height() - title_height <= 2.5 * opt.fontMetrics.height()) {
|
||||||
|
// If there's not enough space, show only a single line, elided.
|
||||||
|
description = opt.fontMetrics.elidedText(description, opt.textElideMode, cut_text.at(0).first);
|
||||||
|
} else {
|
||||||
|
if (cut_text.size() > 2) {
|
||||||
description += opt.fontMetrics.elidedText(cut_text.at(1).second, opt.textElideMode, cut_text.at(1).first);
|
description += opt.fontMetrics.elidedText(cut_text.at(1).second, opt.textElideMode, cut_text.at(1).first);
|
||||||
else
|
} else {
|
||||||
description += cut_text.at(1).second;
|
description += cut_text.at(1).second;
|
||||||
}
|
}
|
||||||
|
num_lines += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int description_x = rect.x();
|
||||||
|
|
||||||
|
|
||||||
|
// Have the y-value be set based on the number of lines in the description, to centralize the
|
||||||
|
// description text with the space between the base and the title.
|
||||||
|
int description_y = rect.y() + title_height + (rect.height() - title_height) / 2;
|
||||||
|
if (num_lines == 1)
|
||||||
|
description_y -= opt.fontMetrics.height() / 2;
|
||||||
|
else
|
||||||
|
description_y -= opt.fontMetrics.height();
|
||||||
|
|
||||||
// On the bottom, aligned to the left after the icon, and featuring at most two lines of text (with some margin space to spare)
|
// On the bottom, aligned to the left after the icon, and featuring at most two lines of text (with some margin space to spare)
|
||||||
painter->drawText(rect.x(), rect.y() + rect.height() - 2.2 * opt.fontMetrics.height(), remaining_width,
|
painter->drawText(description_x, description_y, remaining_width,
|
||||||
2 * opt.fontMetrics.height(), Qt::TextWordWrap, description);
|
cut_text.size() * opt.fontMetrics.height(), Qt::TextWordWrap, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
|
Loading…
Reference in New Issue
Block a user