Lettore 0.4.5: fix ingrandimento testo (restore per caratteri, reflow atteso)
Il restore dopo il cambio font usava la frazione di scroll (instabile col reflow) e il timer 80ms scattava prima del ricalcolo rich text: posizione persa, ingrandimenti che sembravano bloccarsi. Ora: restore per offset in CARATTERI, applicazione via onContentHeightChanged, timer sicurezza 500ms, limite font 3.5x con passo 0.1.
This commit is contained in:
+15
-11
@@ -120,13 +120,13 @@ Page {
|
||||
text: "A−"
|
||||
width: Theme.itemSizeSmall
|
||||
height: Theme.itemSizeMedium
|
||||
onClicked: page.changeFontScale(-0.15)
|
||||
onClicked: page.changeFontScale(-0.1)
|
||||
}
|
||||
Button {
|
||||
text: "A+"
|
||||
width: Theme.itemSizeSmall
|
||||
height: Theme.itemSizeMedium
|
||||
onClicked: page.changeFontScale(0.15)
|
||||
onClicked: page.changeFontScale(0.1)
|
||||
}
|
||||
IconButton {
|
||||
icon.source: "image://theme/icon-m-right"
|
||||
@@ -208,11 +208,13 @@ Page {
|
||||
onTriggered: pageStack.pop(null)
|
||||
}
|
||||
|
||||
// rete di sicurezza per il restore: se il reflow non ha ancora cambiato
|
||||
// contentHeight (capitoli con altezza identica), applica comunque
|
||||
// rete di sicurezza per il restore: il caso normale è applicato da
|
||||
// onTextReflowed appena il reflow cambia contentHeight; questo timer
|
||||
// copre i rari casi in cui l'altezza non cambia (capitoli identici).
|
||||
// Ritardo lungo: il reflow rich text può richiedere qualche centinaio di ms.
|
||||
Timer {
|
||||
id: restoreTimer
|
||||
interval: 80
|
||||
interval: 500
|
||||
onTriggered: {
|
||||
if (page.pendingRestore) {
|
||||
page.pendingRestore = false
|
||||
@@ -314,11 +316,13 @@ Page {
|
||||
}
|
||||
|
||||
function changeFontScale(delta) {
|
||||
page.fontScale = Math.max(0.7, Math.min(2.5, page.fontScale + delta))
|
||||
// il binding aggiorna il font; ripristina la posizione alla frazione
|
||||
// corrente (l'offset in caratteri è stabile col reflow)
|
||||
// limite ampio e passo 0.1: tanti ingrandimenti prima del limite
|
||||
page.fontScale = Math.max(0.7, Math.min(3.5, page.fontScale + delta))
|
||||
// il binding aggiorna il font; ripristina la posizione per CARATTERI
|
||||
// (stabile col reflow, a differenza della frazione di scroll: con il
|
||||
// testo più alto la stessa frazione mostrerebbe un punto diverso)
|
||||
page.restoreFrac = offsetToFrac(page.charOffset, page.currentChapter)
|
||||
page.pendingRestore = true
|
||||
page.restoreFrac = page.chapterFraction
|
||||
restoreTimer.start()
|
||||
}
|
||||
|
||||
@@ -380,9 +384,9 @@ Page {
|
||||
function previewMargins(lr, tb) {
|
||||
page.previewMarginL = lr
|
||||
page.previewMarginT = tb
|
||||
// il reflow è immediato (binding); mantieni la frazione di lettura
|
||||
// il reflow è immediato (binding); mantieni la posizione per caratteri
|
||||
page.restoreFrac = offsetToFrac(page.charOffset, page.currentChapter)
|
||||
page.pendingRestore = true
|
||||
page.restoreFrac = page.chapterFraction
|
||||
restoreTimer.start()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user