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:
2026-08-21 12:37:25 +02:00
parent 50af721323
commit 30b8e1ebaa
3 changed files with 26 additions and 14 deletions
+15 -11
View File
@@ -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()
}
+9 -1
View File
@@ -1,6 +1,6 @@
Name: harbour-calibreweb
Summary: Client OPDS per Calibre Web
Version: 0.4.4
Version: 0.4.5
Release: 1
Group: Qt/Qt
License: MIT
@@ -24,6 +24,14 @@ reflow del testo, margini configurabili e posizione salvata
in locale.
%changelog
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.5-1
- Fix ingrandimento testo: il restore dopo il reflow usava la frazione di
scroll (instabile col cambio font) e il timer di 80ms poteva scattare prima
del ricalcolo rich text -> posizione persa e ingrandimenti che sembravano
bloccarsi. Ora il restore usa l'offset in CARATTERI (stabile col reflow),
il reflow applica via onContentHeightChanged, il timer di sicurezza e'
passato a 500ms; limite font portato a 3.5x e passo a 0.1 (molti piu'
ingrandimenti prima del limite)
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.4-1
- LETTORE A PAGINE RIGIDE: eliminato del tutto lo scroll libero. Struttura a
due livelli: SilicaFlickable esterno NON scrollabile (contentHeight=height,
+2 -2
View File
@@ -22,7 +22,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
app->setOrganizationName(QStringLiteral("harbour"));
app->setApplicationName(QStringLiteral("calibreweb"));
// versione mostrata nelle impostazioni (tenere allineata allo spec)
app->setApplicationVersion(QStringLiteral("0.4.4"));
app->setApplicationVersion(QStringLiteral("0.4.5"));
Settings settings;
@@ -56,7 +56,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
QQuickView *view = SailfishApp::createView();
qDebug() << "harbour-calibreweb v0.4.4 build" << __DATE__ << __TIME__;
qDebug() << "harbour-calibreweb v0.4.5 build" << __DATE__ << __TIME__;
qmlRegisterType<EpubBook>("harbour.calibreweb", 1, 0, "EpubBook");