mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
mobile/notes-edit: ensure cursor stays visible editing dive notes
This seems to work much more reliably as it specifically compares the cursor position to the visible bottom and top of the screen. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
074dcfb656
commit
102f3bf295
2 changed files with 17 additions and 6 deletions
|
@ -1,3 +1,4 @@
|
|||
Mobile: automatically scroll the dive edit screen so that the notes edit cursor stays visible
|
||||
Desktop: ignore dive sites without location in proximity search
|
||||
Mobile: add personalized option for units
|
||||
Mobile: add Dive Summary page
|
||||
|
|
|
@ -716,11 +716,22 @@ Item {
|
|||
selectByMouse: true
|
||||
wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
|
||||
property bool firstTime: true
|
||||
property int visibleTop: detailsEditFlickable.contentY
|
||||
property int visibleBottom: visibleTop + detailsEditFlickable.height - 4 * Kirigami.Units.gridUnit
|
||||
onPressed: waitForKeyboard.start()
|
||||
onCursorRectangleChanged: {
|
||||
ensureVisible(y + cursorRectangle.y)
|
||||
}
|
||||
onContentHeightChanged: {
|
||||
console.log("content height changed")
|
||||
}
|
||||
|
||||
// we repeat the Timer / Function from the SsrfTextField here (no point really in creating a matching customized TextArea)
|
||||
// ensure that the y coordinate is inside the visible part of the detailsEditFlickable (our flickable)
|
||||
function ensureVisible(yDest) {
|
||||
detailsEditFlickable.contentY = yDest
|
||||
if (yDest > visibleBottom)
|
||||
detailsEditFlickable.contentY += yDest - visibleBottom
|
||||
if (yDest < visibleTop)
|
||||
detailsEditFlickable.contentY -= visibleTop - yDest
|
||||
}
|
||||
|
||||
// give the OS enough time to actually resize the flickable
|
||||
|
@ -729,15 +740,14 @@ Item {
|
|||
interval: 300 // 300ms seems like FOREVER
|
||||
onTriggered: {
|
||||
if (!Qt.inputMethod.visible) {
|
||||
if (firstTime) {
|
||||
firstTime = false
|
||||
if (txtNotes.firstTime) {
|
||||
txtNotes.firstTime = false
|
||||
restart()
|
||||
}
|
||||
return
|
||||
}
|
||||
// make sure at least half the Notes field is visible
|
||||
if (txtNotes.y + txtNotes.height / 2 > detailsEditFlickable.contentY + detailsEditFlickable.height - 3 * Kirigami.Units.gridUnit || txtNotes.y < detailsEditFlickable.contentY)
|
||||
txtNotes.ensureVisible(Math.max(0, 3 * Kirigami.Units.gridUnit + txtNotes.y + txtNotes.height / 2 - detailsEditFlickable.height))
|
||||
txtNotes.ensureVisible(txtNotes.y + txtNotes.cursorRectangle.y)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue