aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>2015-07-29 14:27:58 +0200
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>2015-08-03 07:18:52 +0000
commitd218d8c8538e47cf32a06b4bdd9f60bd16a8cf50 (patch)
treebcc26ed904cbb0851707c852127ae5f28872787f
parentc318fceaccb1ee23a567f1bb032df45417217e09 (diff)
Fix selecting single character in middle of string
The fix for QTBUG-46829 revealed a bug in the code to handle selecting part of ligatures. The ranges were assumed to be [start, end], while they are in fact [start, end>. This would cause the engine to assume the previous node overlapped completely with the selected node and that the node had thus already been added to the graph. Due to the bug in QTBUG-46829, this accidentally worked before, but when that bug was fixed, this bug appeared. Change-Id: I517d260de9f58db4504dd4320b7113fbbe305a81 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
-rw-r--r--src/quick/items/qquicktextnodeengine.cpp10
-rw-r--r--tests/manual/scenegraph_lancelot/data/text/textedit_cyrillic_selected.qml13
2 files changed, 18 insertions, 5 deletions
diff --git a/src/quick/items/qquicktextnodeengine.cpp b/src/quick/items/qquicktextnodeengine.cpp
index 5140ccb68f..efe79b382e 100644
--- a/src/quick/items/qquicktextnodeengine.cpp
+++ b/src/quick/items/qquicktextnodeengine.cpp
@@ -821,14 +821,14 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
for (int i = 0; i < node->ranges.size(); ++i) {
const QPair<int, int> &range = node->ranges.at(i);
- int rangeLength = range.second - range.first + 1;
+ int rangeLength = range.second - range.first;
if (previousNode != 0) {
for (int j = 0; j < previousNode->ranges.size(); ++j) {
const QPair<int, int> &otherRange = previousNode->ranges.at(j);
- if (range.first <= otherRange.second && range.second >= otherRange.first) {
+ if (range.first < otherRange.second && range.second > otherRange.first) {
int start = qMax(range.first, otherRange.first);
int end = qMin(range.second, otherRange.second);
- rangeLength -= end - start + 1;
+ rangeLength -= end - start;
if (rangeLength == 0)
break;
}
@@ -839,10 +839,10 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
for (int j = 0; j < nextNode->ranges.size(); ++j) {
const QPair<int, int> &otherRange = nextNode->ranges.at(j);
- if (range.first <= otherRange.second && range.second >= otherRange.first) {
+ if (range.first < otherRange.second && range.second > otherRange.first) {
int start = qMax(range.first, otherRange.first);
int end = qMin(range.second, otherRange.second);
- rangeLength -= end - start + 1;
+ rangeLength -= end - start;
if (rangeLength == 0)
break;
}
diff --git a/tests/manual/scenegraph_lancelot/data/text/textedit_cyrillic_selected.qml b/tests/manual/scenegraph_lancelot/data/text/textedit_cyrillic_selected.qml
new file mode 100644
index 0000000000..849e4b8597
--- /dev/null
+++ b/tests/manual/scenegraph_lancelot/data/text/textedit_cyrillic_selected.qml
@@ -0,0 +1,13 @@
+import QtQuick 2.0
+
+Item {
+ width: 320
+ height: 480
+ TextEdit {
+ id: textEdit
+ text: "и в у"
+ anchors.centerIn: parent
+ Component.onCompleted: textEdit.select(2, 3)
+ font.pixelSize: 14
+ }
+}