42 lines
2.2 KiB
Diff
42 lines
2.2 KiB
Diff
From: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
|
|
Date: Sat, 14 May 2022 17:41:00 +0800
|
|
Subject: fix QTextFormat::FullWidthSelection for right-to-left text layouts
|
|
|
|
Using the QTextFormat::FullWidthSelection property to select a line
|
|
would previously not take into account right-to-left text layouts.
|
|
|
|
With this patch, the whole line should now be drawn correctly for both
|
|
left-to-right, and right-to-left layouts.
|
|
Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=a7894855f2f59028
|
|
Last-Update: 2021-08-15
|
|
---
|
|
src/gui/text/qtextlayout.cpp | 15 +++++++++++----
|
|
1 file changed, 11 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
|
|
index 5ae41d9..a82d061 100644
|
|
--- a/src/gui/text/qtextlayout.cpp
|
|
+++ b/src/gui/text/qtextlayout.cpp
|
|
@@ -1173,10 +1173,17 @@ void QTextLayout::draw(QPainter *p, const QPointF &pos, const QVector<FormatRang
|
|
QRectF fullLineRect(tl.rect());
|
|
fullLineRect.translate(position);
|
|
fullLineRect.setRight(QFIXED_MAX);
|
|
- if (!selectionEndInLine)
|
|
- region.addRect(clipIfValid(QRectF(lineRect.topRight(), fullLineRect.bottomRight()), clip));
|
|
- if (!selectionStartInLine)
|
|
- region.addRect(clipIfValid(QRectF(fullLineRect.topLeft(), lineRect.bottomLeft()), clip));
|
|
+
|
|
+ const bool rightToLeft = d->isRightToLeft();
|
|
+
|
|
+ if (!selectionEndInLine) {
|
|
+ region.addRect(clipIfValid(rightToLeft ? QRectF(fullLineRect.topLeft(), lineRect.bottomLeft())
|
|
+ : QRectF(lineRect.topRight(), fullLineRect.bottomRight()), clip));
|
|
+ }
|
|
+ if (!selectionStartInLine) {
|
|
+ region.addRect(clipIfValid(rightToLeft ? QRectF(lineRect.topRight(), fullLineRect.bottomRight())
|
|
+ : QRectF(fullLineRect.topLeft(), lineRect.bottomLeft()), clip));
|
|
+ }
|
|
} else if (!selectionEndInLine
|
|
&& isLastLineInBlock
|
|
&&!(d->option.flags() & QTextOption::ShowLineAndParagraphSeparators)) {
|