From 4902dad0f2ef1ccd50d48f916d3cbbf7ceb8d864 Mon Sep 17 00:00:00 2001 From: ShaopengLin Date: Sat, 28 Sep 2024 00:01:49 -0400 Subject: [PATCH] Proper Elide for Suggestion List Text --- src/suggestionlistdelegate.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/suggestionlistdelegate.cpp b/src/suggestionlistdelegate.cpp index 8eeb7d5b..0d1833a1 100644 --- a/src/suggestionlistdelegate.cpp +++ b/src/suggestionlistdelegate.cpp @@ -65,6 +65,23 @@ void SuggestionListDelegate::paintText(QPainter *p, int flag = {Qt::AlignVCenter | Qt::AlignLeading}; QString text = index.data(Qt::DisplayRole).toString(); - p->drawText(textRect, flag, text); + + QFontMetrics metrics = opt.fontMetrics; + int elideMarkerLength = metrics.tightBoundingRect("(...)").width(); + int textLength = textRect.width() - elideMarkerLength; + QString elidedText = metrics.elidedText(text, Qt::ElideRight, textLength); + if (elidedText != text) + { + /* Remove built-in elide marker */ + elidedText.chop(1); + + /* drawText's Align direction determines text direction */ + bool textDirectionFlipped = KiwixApp::isRightToLeft() != text.isRightToLeft(); + elidedText = textDirectionFlipped ? "(...)" + elidedText.trimmed() + : elidedText.trimmed() + "(...)"; + p->drawText(textRect, flag, elidedText); + } + else + p->drawText(textRect, flag, text); return; }