Margini alto/basso (Settings.readerMarginV) + applicazione a caldo senza reload: i margini si sovrascrivono via runJavaScript (setProperty !important) sul documento aperto, anteprima live nel dialogo e al ritorno dalle impostazioni

This commit is contained in:
2026-08-13 09:11:38 +02:00
parent fad647cf9e
commit 2652f413a5
7 changed files with 122 additions and 25 deletions
+39 -8
View File
@@ -43,11 +43,14 @@ Page {
MenuItem {
text: "Margini del testo"
onClicked: {
var dlg = pageStack.push(Qt.resolvedUrl("MarginDialog.qml"),
{ marginValue: appSettings.readerMargin })
var dlg = pageStack.push(Qt.resolvedUrl("MarginDialog.qml"), {
marginLr: appSettings.readerMargin,
marginTb: appSettings.readerMarginV,
previewHandler: page.previewMargins
})
dlg.accepted.connect(function() {
if (page.ready && book.chapterCount() > 0)
loadChapter()
// i valori sono già persistiti da onAccepted; rinfresca subito
applyMarginsJS()
})
}
}
@@ -239,7 +242,7 @@ Page {
// e margini) è iniettato nell'HTML dal parser, quindi niente JS post-load
function loadChapter() {
var html = book.chapterHtml(page.currentChapter, page.fontPx(),
appSettings.readerMargin)
appSettings.readerMargin, appSettings.readerMarginV)
if (html.length === 0) {
page.errorMessage = "Capitolo non leggibile"
page.ready = true
@@ -259,6 +262,34 @@ Page {
})
}
// JS che sovrascrive i margini sul documento aperto: stile inline con
// 'important' batte lo stylesheet iniettato. Effetto immediato, niente reload.
function marginJs(lr, tb) {
return "var h=document.documentElement,b=document.body;"
+ "h.style.setProperty('margin-left','" + lr + "px','important');"
+ "h.style.setProperty('margin-right','" + lr + "px','important');"
+ "b.style.setProperty('margin-left','" + lr + "px','important');"
+ "b.style.setProperty('margin-right','" + lr + "px','important');"
+ "b.style.setProperty('margin-top','" + tb + "px','important');"
+ "b.style.setProperty('margin-bottom','" + tb + "px','important');"
+ "true"
}
// riapplica i margini salvati nelle impostazioni (senza ricaricare il libro)
function applyMarginsJS() {
if (!web.loaded || !page.ready)
return
web.runJavaScript(marginJs(appSettings.readerMargin, appSettings.readerMarginV),
function() { })
}
// anteprima live dal dialogo margini: valori non ancora persistiti
function previewMargins(lr, tb) {
if (!web.loaded || !page.ready)
return
web.runJavaScript(marginJs(lr, tb), function() { })
}
Component.onCompleted: {
page.ready = false
if (!book.open(page.epubPath)) {
@@ -290,10 +321,10 @@ Page {
if (status === PageStatus.Inactive) {
maybeSave(true)
} else if (status === PageStatus.Active) {
// riapplica font/margini se cambiati nelle impostazioni:
// ricarica il capitolo e ripristina la posizione
// riapplica i margini se cambiati nelle impostazioni:
// via JS sul documento aperto, senza ricaricare il capitolo
if (page.ready && book.chapterCount() > 0)
loadChapter()
applyMarginsJS()
}
}
}