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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user