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).
This commit is contained in:
+20
-11
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user