diff options
author | flow <flowlnlnln@gmail.com> | 2022-07-14 22:23:41 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-08-01 07:33:29 -0300 |
commit | 4a13dbe3bb22ba47cf1ea5dfe0e9ffc9688b048a (patch) | |
tree | b7fc2cf80d862b4cd4f1d5f46c538513b25efdff /launcher/ui/widgets/Common.cpp | |
parent | 0f61f5ba0376a5ad115bcc9eba64cbc452ecde78 (diff) | |
download | PrismLauncher-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.cpp | 22 |
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; } |