Lettore 0.4.9: margini verticali su ogni schermata — fasce opache fisse sopra/sotto la viewport (colore di sfondo per tema) + padding deficit dell'ultima pagina (max-scroll multiplo esatto del passo: ultima pagina allineata, niente righe ripetute)

This commit is contained in:
2026-09-07 17:31:07 +02:00
parent 041b9b9567
commit aef3cc3409
3 changed files with 52 additions and 6 deletions
+41 -3
View File
@@ -153,10 +153,11 @@ Page {
Item {
id: readerContent
width: parent.width
// Il contenitore ha il padding verticale (margine) + il "deficit"
// dell'ultima pagina: cosi' max-scroll = k*step e l'ultima pagina
// e' allineata (niente testo ripetuto tra penultima e ultima).
height: Math.max(parent.height,
textItem.height + 2 * (page.previewMarginT >= 0
? page.previewMarginT
: appSettings.readerMarginV))
textItem.height + 2 * page.marginV() + page.lastPagePad())
Text {
id: textItem
@@ -175,6 +176,31 @@ Page {
}
}
// Margini verticali VISTI su ogni schermata: due fasce opache (colore di
// sfondo) coprono il testo a cavallo dei bordi della viewport. Il testo
// scorre tra le fasce con passo = viewport - 2*margine: ogni pagina
// mostra esattamente un blocco di testo con margine sopra e sotto.
Rectangle {
id: topBand
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
height: page.marginV()
visible: height > 0
z: 5
color: Theme.colorScheme === Theme.LightOnDark ? "#FF000000" : "#FFFFFFFF"
}
Rectangle {
id: bottomBand
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: page.marginV()
visible: height > 0
z: 5
color: Theme.colorScheme === Theme.LightOnDark ? "#FF000000" : "#FFFFFFFF"
}
// Paginazione a tap: la meta' destra va avanti di una pagina, la
// sinistra indietro. Le fasce superiore e inferiore sono lasciate ai
// menu (PullDown in alto, PushUp in basso). NIENTE preventStealing:
@@ -288,6 +314,18 @@ Page {
return page.previewMarginT >= 0 ? page.previewMarginT : appSettings.readerMarginV
}
// deficit dell'ultima pagina: porta max-scroll a un multiplo esatto del
// passo, cosi' l'ultima pagina mostra il testo residuo SENZA sovrapporsi
// alla penultima (niente righe ripetute) e con il margine sotto
function lastPagePad() {
var step = Math.max(1, innerFlick.height - 2 * page.marginV())
var t = textItem.height
if (t <= 0)
return 0
var r = t % step
return r === 0 ? 0 : step - r
}
function maybeSave(force) {
if (bookId <= 0)
return
+9 -1
View File
@@ -1,6 +1,6 @@
Name: harbour-calibreweb
Summary: Client OPDS per Calibre Web
Version: 0.4.8
Version: 0.4.9
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.9-1
- Margini verticali su OGNI schermata del lettore (non solo a inizio capitolo):
due fasce opache (colore di sfondo) sopra e sotto la viewport coprono il testo
a cavallo dei bordi; il padding inferiore del contenitore include il deficit
dell'ultima pagina, cosi' max-scroll e' un multiplo esatto del passo e
l'ultima pagina non ripete righe della penultima. Anteprima live dal dialog
margini inclusa
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.8-1
- Best practice audit: orientazioni per pagina (finestra senza vincoli, il
lettore ora ruota davvero in landscape; pagine di lista in portrait;
+2 -2
View File
@@ -23,7 +23,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.8"));
app->setApplicationVersion(QStringLiteral("0.4.9"));
Settings settings;
@@ -57,7 +57,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
QQuickView *view = SailfishApp::createView();
qDebug() << "harbour-calibreweb v0.4.8 build" << __DATE__ << __TIME__;
qDebug() << "harbour-calibreweb v0.4.9 build" << __DATE__ << __TIME__;
qmlRegisterType<EpubBook>("harbour.calibreweb", 1, 0, "EpubBook");