aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/widgets/Common.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-07-14 22:23:41 -0300
committerflow <flowlnlnln@gmail.com>2022-08-01 07:33:29 -0300
commit4a13dbe3bb22ba47cf1ea5dfe0e9ffc9688b048a (patch)
treeb7fc2cf80d862b4cd4f1d5f46c538513b25efdff /launcher/ui/widgets/Common.cpp
parent0f61f5ba0376a5ad115bcc9eba64cbc452ecde78 (diff)
downloadPrismLauncher-4a13dbe3bb22ba47cf1ea5dfe0e9ffc9688b048a.tar.gz
PrismLauncher-4a13dbe3bb22ba47cf1ea5dfe0e9ffc9688b048a.tar.bz2
PrismLauncher-4a13dbe3bb22ba47cf1ea5dfe0e9ffc9688b048a.zip
feat: create delegate for project item views
This allows us to define custom painting for list view items. In particular, this is applied to the mod downloader, in order to allow displaying both the mod name and mod description, and settings their effects (like bold or underline) independent of each other. Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/ui/widgets/Common.cpp')
-rw-r--r--launcher/ui/widgets/Common.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/launcher/ui/widgets/Common.cpp b/launcher/ui/widgets/Common.cpp
index f72f3596..097bb6d4 100644
--- a/launcher/ui/widgets/Common.cpp
+++ b/launcher/ui/widgets/Common.cpp
@@ -1,27 +1,33 @@
#include "Common.h"
// Origin: Qt
-QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
- qreal &widthUsed)
+// More specifically, this is a trimmed down version on the algorithm in:
+// https://code.woboq.org/qt5/qtbase/src/widgets/styles/qcommonstyle.cpp.html#846
+QList<std::pair<qreal, QString>> viewItemTextLayout(QTextLayout& textLayout, int lineWidth, qreal& height)
{
- QStringList lines;
+ QList<std::pair<qreal, QString>> lines;
height = 0;
- widthUsed = 0;
+
textLayout.beginLayout();
+
QString str = textLayout.text();
- while (true)
- {
+ while (true) {
QTextLine line = textLayout.createLine();
+
if (!line.isValid())
break;
if (line.textLength() == 0)
break;
+
line.setLineWidth(lineWidth);
line.setPosition(QPointF(0, height));
+
height += line.height();
- lines.append(str.mid(line.textStart(), line.textLength()));
- widthUsed = qMax(widthUsed, line.naturalTextWidth());
+
+ lines.append(std::make_pair(line.naturalTextWidth(), str.mid(line.textStart(), line.textLength())));
}
+
textLayout.endLayout();
+
return lines;
}