From af28c01182f95e497d3b6d8c1364af03f86c097b Mon Sep 17 00:00:00 2001
From: John Factotum <50942278+johnfactotum@users.noreply.github.com>
Date: Mon, 9 Oct 2023 16:54:25 +0800
Subject: [PATCH] Bring back cursor autohiding
Also change "Scrolled Layout" to "Scrolled Mode"
---
...om.github.johnfactotum.Foliate.gschema.xml | 3 ++
data/gschemas.compiled | Bin 3082 -> 3138 bytes
src/book-viewer.js | 2 +
src/reader/reader.js | 41 +++++++++++++++++-
src/ui/book-viewer.ui | 18 +++++---
5 files changed, 55 insertions(+), 9 deletions(-)
diff --git a/data/com.github.johnfactotum.Foliate.gschema.xml b/data/com.github.johnfactotum.Foliate.gschema.xml
index ba2b40de..b43ddff5 100644
--- a/data/com.github.johnfactotum.Foliate.gschema.xml
+++ b/data/com.github.johnfactotum.Foliate.gschema.xml
@@ -85,6 +85,9 @@
'default'
+
+ false
+
q|cLU?4@87cY~uq`RAYvHJ)WEm3LA
zLly=SL240(3Pu=PC>j-oVESNU50PCc%NL8aI%nJ+ID5{V|J#}G|Gw{^%g*P{W>qUU
zi(J~;Szr;7LHuM(seA*sCX3k3=8g0(q%8Okz(=eiUy6R2=*OUQ5Wg-}qz|wx75Rs&
zWHA?($X1@%LF9F!FU3%G=Nu00{FY60e0X_
zckh0rD%^)d!lHuxz^XfAlk}-G;5ULJ!2Rz@ZS<+r;kTGYlQ!JUhaxsEP$yxb9oz$C
zp5Mh<7}^Fu3hxzT_T)wBQ}YE=;EzC}2-GaXG}wuqynIt~gYnd?o
z#)5@nunIUQYaRRpHGMz$43PP(Ge(~}1%3p46>s$eiIf2YB-KvU~=2YqVB
z&w;a%{qdhm{?MmRgI^5Z21L&;w3nLkrQiT{{IF1CPSPa^!IO5>=M5I>{nniB=HxV!
z#skNBQNeXU*-#-z$j}_%MtBimY`XU@eQG=W7H}JoHF1rdH#GC=g4YWq@}g#5QSevl
zcwW@VD_Ool#Plrd4~=J>M_?HI8b~{weT%)L=46e7r+|^cqDAznnfeU)H;{NVHIGIN
zY(>KpsZcW&2bkZEfa+^-SNYH|qlbD^>SvAL4aWGvZNSc~o89Pup_xM$yvIOCXtsbp
zHMczsehXYKzi6dT&C@duo}xbxUPhnV$Qk?>82MCoh(0x*vsoONSSOI!3^g}H-T-Vr
SaL_om)J(J(yjyqM-v0-7TO2F^
literal 3082
zcmb7`ZHQD=7{`ygzV2>rNFb4!l{Q1}jFEw$lo8Z^FfbIO`r_T0JA1F*xp$j8v*Tt)
zQIdqzMnoAFi$uB#A+5qf6bf5feP|IxKZy9DH+r$H2(0Yo|2uQ9yZdRj3;+55?{m+6
z?m5r%oaf9#TbzpTgjJJVi^X3xbY^a1n<<_pv87uQ}Xc%)h!?7U-ebVBnjCy`w|+yJ)`KC0^BPOd%@gdi<(a>&|V9ys+dHs!_F8
z&OI0fzEgE^lF>A#Tv~PEz+DxB0AwDgv{QRHO*wJ%k9~1u}d^5g%Cw4S;
zqxENn6T6;iW!~u7vab?vMknh*vmUr83=RJE9)8gCG`?3%ObbyERXXE>=a%i{O~%jG
z{jeC-^UcR_y3mvfmt+)T->&reErfaSEHQKm2qDQDJ+hU81bU4DwKZ
zrdRg%l_@=o?@#X0M_z~*;*$PKz4VIT5k9+GzYRN@`aLTCPe!m+8
zQQfA?mdrH$F;@OcQBYLSi*C1rGkd8XCKYVc{+84$ZH{?bS3{@dE`48H
zTd_3er@gChg*gN18LPzi2pdo3+1^&O7rU?t=e|4sE_QUg>|4d2ukP~Wl=hxO0^)+
zwshSval=0SKXFeFIK@4UR~r9jaZk=47L_3$Tuhg#rC9#j&kx{_{}-GC1LD_(wkKA+
zg&j>_9~2)F&U~_ZCU!JA8WEoq(iozN;iz~_NMnvB=I6!yZ;8FAuHsgIYBV<6ckF%A
z99XR4N7;3jqoRvjT|E_F=}^;>W(XH+N<-STjwcRf`(fh1``YH#A8TtC*Tz;z_Npdh
z%O>%|`}j&hJK%X52mY54hc#kPSifxFFk{igd58EpVW{?74m+9}9uU7NytH}uJnU%B
zJr1cu*hl+r#E!Ok5q~P2`F7*u*wOeoFTNzC`9hN~_=<4vqmOkk9?d-Ul35^3JHAPu
zNcvtJJ7L@zyA{90cZ}Jjdz-(qANu85dD2lJb1mIRjlsGvM`0BAI)ya<4^P~y2-00Q
aah`PWW^yi3^J%?PE94@b%BIGY {
footnoteDialog.addEventListener('click', e =>
e.target === footnoteDialog ? footnoteDialog.close() : null)
+class CursorAutohider {
+ #timeout
+ #el
+ #check
+ #state
+ constructor(el, check, state = {}) {
+ this.#el = el
+ this.#check = check
+ this.#state = state
+ if (this.#state.hidden) this.hide()
+ this.#el.addEventListener('mousemove', ({ screenX, screenY }) => {
+ // check if it actually moved
+ if (screenX === this.#state.x && screenY === this.#state.y) return
+ this.#state.x = screenX, this.#state.y = screenY
+ this.show()
+ if (this.#timeout) clearTimeout(this.#timeout)
+ if (check()) this.#timeout = setTimeout(this.hide.bind(this), 1000)
+ }, false)
+ }
+ cloneFor(el) {
+ return new CursorAutohider(el, this.#check, this.#state)
+ }
+ hide() {
+ this.#el.style.cursor = 'none'
+ this.#state.hidden = true
+ }
+ show() {
+ this.#el.style.cursor = 'auto'
+ this.#state.hidden = false
+ }
+}
+
class Reader {
- #tocView
+ autohideCursor
+ #cursorAutohider = new CursorAutohider(
+ document.documentElement, () => this.autohideCursor)
style = {
spacing: 1.4,
justify: true,
@@ -338,7 +372,7 @@ class Reader {
await this.view.open(this.book)
document.body.append(this.view)
}
- setAppearance({ style, layout }) {
+ setAppearance({ style, layout, autohideCursor }) {
Object.assign(this.style, style)
const { theme } = style
const $style = document.documentElement.style
@@ -356,6 +390,7 @@ class Reader {
renderer.setStyles?.(getCSS(this.style))
}
document.body.classList.toggle('invert', this.style.invert)
+ this.autohideCursor = autohideCursor
}
#handleEvents() {
this.view.addEventListener('relocate', e => {
@@ -452,6 +487,8 @@ class Reader {
if (selRange.compareBoundaryPoints(Range.END_TO_END, lastLocation.range) >= 0)
this.view.next()
}, 1000))
+
+ this.#cursorAutohider.cloneFor(doc.documentElement)
}
#showAnnotation({ index, range, value, pos }) {
globalThis.showSelection({ type: 'annotation', value, pos })
diff --git a/src/ui/book-viewer.ui b/src/ui/book-viewer.ui
index 966f35f3..1ccd7f61 100644
--- a/src/ui/book-viewer.ui
+++ b/src/ui/book-viewer.ui
@@ -85,18 +85,22 @@
-
- Invert Colors in Dark Mode
- view.invert
+ Font & Layout Settings
+ viewer.preferences
+
+
-
- Scrolled Layout
+ Scrolled Mode
view.scrolled
-
-
-
- Font & Layout Settings
- viewer.preferences
+ Invert Colors in Dark Mode
+ view.invert
+
+ -
+ Autohide Cursor
+ view.autohide-cursor