From 7fca7fbfcd24ae34b09cbbfa24a22c647ac44f4e Mon Sep 17 00:00:00 2001 From: Carlo Baratto Date: Fri, 21 Aug 2026 13:04:04 +0200 Subject: [PATCH] Lettore 0.4.7: margini rispettati su ogni pagina Il passo di pagina era la viewport intera: il testo scorreva a filo dei bordi e i margini verticali si vedevano solo all'inizio del capitolo. Ora il passo e' viewport - 2*margine verticale: ogni pagina (e l'ultima) ha il testo dentro i margini. Simulazione geometrica verificata (9 test). --- qml/pages/ReaderPage.qml | 31 ++++++++++++++++++++----------- rpm/harbour-calibreweb.spec | 8 +++++++- src/main.cpp | 4 ++-- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/qml/pages/ReaderPage.qml b/qml/pages/ReaderPage.qml index fbaed0e..ce48e04 100644 --- a/qml/pages/ReaderPage.qml +++ b/qml/pages/ReaderPage.qml @@ -270,18 +270,25 @@ Page { function readScrollPosition() { if (!page.ready) return - var vh = Math.max(1, innerFlick.height) - var max = Math.max(0, innerFlick.contentHeight - vh) + // passo di pagina = viewport - 2*margine verticale: ogni pagina mostra + // il testo DENTRO i margini (niente righe a filo del bordo) + var step = Math.max(1, innerFlick.height - 2 * page.marginV()) + var max = Math.max(0, innerFlick.contentHeight - innerFlick.height) var y = Math.max(0, Math.min(max, innerFlick.contentY)) var len = book.chapterTextLength(page.currentChapter) page.chapterFraction = max > 0 ? y / max : 0 // posizione per caratteri (stima dalla frazione: stabile col reflow) page.charOffset = Math.round(page.chapterFraction * len) - page.pageIndex = Math.floor(y / vh) + 1 - page.pageCount = Math.max(1, Math.ceil(max / vh) + 1) + page.pageIndex = Math.floor(y / step) + 1 + page.pageCount = Math.max(1, Math.ceil(max / step) + 1) maybeSave(false) } + // margine verticale effettivo (anteprima dialog oppure impostazioni) + function marginV() { + return page.previewMarginT >= 0 ? page.previewMarginT : appSettings.readerMarginV + } + function maybeSave(force) { if (bookId <= 0) return @@ -328,13 +335,14 @@ Page { restoreTimer.start() } - // pagina successiva: una viewport avanti (contentY programmatico, il dito - // non può scrollare); a fine capitolo passa al successivo + // pagina successiva: una pagina di testo = viewport meno i margini verticali + // (così ogni pagina ha il testo dentro i margini, non a filo del bordo); + // a fine capitolo passa al successivo function nextPage() { if (!page.ready) return - var vh = innerFlick.height - var max = Math.max(0, innerFlick.contentHeight - vh) + var step = Math.max(1, innerFlick.height - 2 * page.marginV()) + var max = Math.max(0, innerFlick.contentHeight - innerFlick.height) var y = innerFlick.contentY if (y >= max - 2) { // fine capitolo (o capitolo non scrollabile): segna la coda e passa @@ -342,19 +350,20 @@ Page { maybeSave(true) gotoChapter(page.currentChapter + 1) } else { - innerFlick.contentY = Math.min(max, y + vh) + innerFlick.contentY = Math.min(max, y + step) readScrollPosition() } } - // pagina precedente: una viewport indietro; dall'inizio del capitolo va al + // pagina precedente: una pagina indietro; dall'inizio del capitolo va al // capitolo prima SULL'ULTIMA PAGINA (non salta la coda del capitolo) function prevPage() { if (!page.ready) return + var step = Math.max(1, innerFlick.height - 2 * page.marginV()) var y = innerFlick.contentY if (y > 1) { - innerFlick.contentY = Math.max(0, y - innerFlick.height) + innerFlick.contentY = Math.max(0, y - step) readScrollPosition() } else if (page.currentChapter > 0) { maybeSave(true) diff --git a/rpm/harbour-calibreweb.spec b/rpm/harbour-calibreweb.spec index b0c93fe..57ca39d 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.6 +Version: 0.4.7 Release: 1 Group: Qt/Qt License: MIT @@ -24,6 +24,12 @@ reflow del testo, margini configurabili e posizione salvata in locale. %changelog +* Fri Aug 21 2026 Carlo Baratto - 0.4.7-1 +- Fix margini lettore: il passo di pagina era la viewport intera, quindi il + testo scorreva a filo dei bordi e i margini verticali si vedevano solo + all'inizio del capitolo. Ora il passo e' viewport - 2*margine verticale: + ogni pagina mostra il testo DENTRO i margini (prima riga e ultima riga + distanziate dai bordi), anche l'ultima pagina del capitolo * Fri Aug 21 2026 Carlo Baratto - 0.4.6-1 - Fix impostazioni lettore non salvate: la scala del font era una proprieta' QML di pagina (mai persistita) -> l'ingrandimento spariva alla chiusura del diff --git a/src/main.cpp b/src/main.cpp index 03e2755..cff12ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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.6")); + app->setApplicationVersion(QStringLiteral("0.4.7")); Settings settings; @@ -56,7 +56,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) QQuickView *view = SailfishApp::createView(); - qDebug() << "harbour-calibreweb v0.4.6 build" << __DATE__ << __TIME__; + qDebug() << "harbour-calibreweb v0.4.7 build" << __DATE__ << __TIME__; qmlRegisterType("harbour.calibreweb", 1, 0, "EpubBook");