139 lines
5.1 KiB
Diff
139 lines
5.1 KiB
Diff
|
From 9bb03b5dcc21275986df3d8b0efb6f28cdc583ec Mon Sep 17 00:00:00 2001
|
||
|
From: Wang Chuan <ouchuanm@outlook.com>
|
||
|
Date: Mon, 5 Apr 2021 11:41:48 +0800
|
||
|
Subject: [PATCH 18/20] QQuickTextInput: update cursor rectangle after padding
|
||
|
changed
|
||
|
|
||
|
The position of cursor delegate needs to be updated when we change
|
||
|
padding, otherwise it will be in a wrong position.
|
||
|
|
||
|
Fixes: QTBUG-91867
|
||
|
Pick-to: 5.12 5.15 6.0 6.1
|
||
|
Change-Id: I89ca84fe893ebf517ab67890196eede14a4055d7
|
||
|
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
||
|
(cherry picked from commit d98694c4023881673259ba040c10df7e71ec3d37)
|
||
|
---
|
||
|
src/quick/items/qquicktextinput.cpp | 5 ++++
|
||
|
.../checkCursorDelegateWhenPaddingChanged.qml | 16 ++++++++++
|
||
|
.../qquicktextinput/tst_qquicktextinput.cpp | 30 +++++++++++++++++++
|
||
|
3 files changed, 51 insertions(+)
|
||
|
create mode 100644 tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml
|
||
|
|
||
|
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
|
||
|
index 079bf58abe..7d0d05700a 100644
|
||
|
--- a/src/quick/items/qquicktextinput.cpp
|
||
|
+++ b/src/quick/items/qquicktextinput.cpp
|
||
|
@@ -2952,6 +2952,7 @@ void QQuickTextInputPrivate::setTopPadding(qreal value, bool reset)
|
||
|
}
|
||
|
if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) {
|
||
|
updateLayout();
|
||
|
+ q->updateCursorRectangle();
|
||
|
emit q->topPaddingChanged();
|
||
|
}
|
||
|
}
|
||
|
@@ -2966,6 +2967,7 @@ void QQuickTextInputPrivate::setLeftPadding(qreal value, bool reset)
|
||
|
}
|
||
|
if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) {
|
||
|
updateLayout();
|
||
|
+ q->updateCursorRectangle();
|
||
|
emit q->leftPaddingChanged();
|
||
|
}
|
||
|
}
|
||
|
@@ -2980,6 +2982,7 @@ void QQuickTextInputPrivate::setRightPadding(qreal value, bool reset)
|
||
|
}
|
||
|
if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) {
|
||
|
updateLayout();
|
||
|
+ q->updateCursorRectangle();
|
||
|
emit q->rightPaddingChanged();
|
||
|
}
|
||
|
}
|
||
|
@@ -2994,6 +2997,7 @@ void QQuickTextInputPrivate::setBottomPadding(qreal value, bool reset)
|
||
|
}
|
||
|
if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) {
|
||
|
updateLayout();
|
||
|
+ q->updateCursorRectangle();
|
||
|
emit q->bottomPaddingChanged();
|
||
|
}
|
||
|
}
|
||
|
@@ -4712,6 +4716,7 @@ void QQuickTextInput::setPadding(qreal padding)
|
||
|
|
||
|
d->extra.value().padding = padding;
|
||
|
d->updateLayout();
|
||
|
+ updateCursorRectangle();
|
||
|
emit paddingChanged();
|
||
|
if (!d->extra.isAllocated() || !d->extra->explicitTopPadding)
|
||
|
emit topPaddingChanged();
|
||
|
diff --git a/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml b/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml
|
||
|
new file mode 100644
|
||
|
index 0000000000..e6f07b4687
|
||
|
--- /dev/null
|
||
|
+++ b/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml
|
||
|
@@ -0,0 +1,16 @@
|
||
|
+import QtQuick 2.12
|
||
|
+
|
||
|
+Rectangle {
|
||
|
+ width: 200
|
||
|
+ height: 200
|
||
|
+ TextInput {
|
||
|
+ objectName: "textInput"
|
||
|
+ leftPadding: 10
|
||
|
+ focus: true
|
||
|
+ cursorDelegate: Rectangle {
|
||
|
+ objectName: "cursorDelegate"
|
||
|
+ width: 5
|
||
|
+ color: "red"
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
|
||
|
index 2e64c80b85..ac502bcb28 100644
|
||
|
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
|
||
|
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
|
||
|
@@ -236,6 +236,7 @@ private slots:
|
||
|
void QTBUG_51115_readOnlyResetsSelection();
|
||
|
void QTBUG_77814_InsertRemoveNoSelection();
|
||
|
|
||
|
+ void checkCursorDelegateWhenPaddingChanged();
|
||
|
private:
|
||
|
void simulateKey(QWindow *, int key);
|
||
|
|
||
|
@@ -7054,6 +7055,35 @@ void tst_qquicktextinput::QTBUG_77814_InsertRemoveNoSelection()
|
||
|
QCOMPARE(textInput->selectedText(), QString());
|
||
|
}
|
||
|
|
||
|
+void tst_qquicktextinput::checkCursorDelegateWhenPaddingChanged()
|
||
|
+{
|
||
|
+ QQuickView view;
|
||
|
+ view.setSource(testFileUrl("checkCursorDelegateWhenPaddingChanged.qml"));
|
||
|
+ view.show();
|
||
|
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
|
||
|
+
|
||
|
+ QQuickTextInput *textInput = view.rootObject()->findChild<QQuickTextInput *>("textInput");
|
||
|
+ QVERIFY(textInput);
|
||
|
+
|
||
|
+ QQuickItem *cursorDelegate = textInput->findChild<QQuickItem *>("cursorDelegate");
|
||
|
+ QVERIFY(cursorDelegate);
|
||
|
+
|
||
|
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
|
||
|
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
|
||
|
+
|
||
|
+ textInput->setPadding(5);
|
||
|
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
|
||
|
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
|
||
|
+
|
||
|
+ textInput->setTopPadding(10);
|
||
|
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
|
||
|
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
|
||
|
+
|
||
|
+ textInput->setLeftPadding(10);
|
||
|
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
|
||
|
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
|
||
|
+}
|
||
|
+
|
||
|
QTEST_MAIN(tst_qquicktextinput)
|
||
|
|
||
|
#include "tst_qquicktextinput.moc"
|
||
|
--
|
||
|
2.35.1
|
||
|
|