diff --git a/qml/pages/ReaderPage.qml b/qml/pages/ReaderPage.qml index 237fe10..532381b 100644 --- a/qml/pages/ReaderPage.qml +++ b/qml/pages/ReaderPage.qml @@ -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 diff --git a/rpm/harbour-calibreweb.spec b/rpm/harbour-calibreweb.spec index 2bced7d..728ebaa 100644 --- a/rpm/harbour-calibreweb.spec +++ b/rpm/harbour-calibreweb.spec @@ -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 - 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 - 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; diff --git a/src/main.cpp b/src/main.cpp index d6abab0..224f4e7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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("harbour.calibreweb", 1, 0, "EpubBook");