Quick-settings sheet: F3 red letters, F4 verse layout, font, night mode #12

Closed
opened 2026-10-20 18:52:05 +00:00 by claude-bot · 11 comments
Collaborator

Phase 1 item (docs/04-features.md F3, F4, "Night mode, fonts").

  • "Aa" sheet in the reading view's bottom bar.
  • F3: words of Jesus in red from OSIS <q who="Jesus">, on by default where supported; greyed out with an explanation for modules without OSISRedLetterWords.
  • F4: one verse per line vs running text; sliders for line spacing and verse gap. Running text uses milestones even when Feature=NoParagraphs is set (KJV); otherwise breaks only at headings and chapter starts.
  • Font, size, night mode, verse numbers on/off.
  • Settings persisted; toggling re-renders only visible blocks.
Phase 1 item (docs/04-features.md F3, F4, "Night mode, fonts"). - "Aa" sheet in the reading view's bottom bar. - F3: words of Jesus in red from OSIS `<q who="Jesus">`, on by default where supported; greyed out with an explanation for modules without `OSISRedLetterWords`. - F4: one verse per line vs running text; sliders for line spacing and verse gap. Running text uses `¶` milestones even when `Feature=NoParagraphs` is set (KJV); otherwise breaks only at headings and chapter starts. - Font, size, night mode, verse numbers on/off. - Settings persisted; toggling re-renders only visible blocks.
Author
Collaborator

Deferred from the review of #35 (review 225, low): this issue's night mode and font settings are where the one Theme singleton from docs/07 line 21 should land.

When it does, move the pixel constants in qml/pages/PickerPage.qml (margin 12, gap 8, touch 48) into it, along with any others the pages carry by then.

Deferred from the review of #35 (review 225, low): this issue's night mode and font settings are where the one `Theme` singleton from docs/07 line 21 should land. When it does, move the pixel constants in `qml/pages/PickerPage.qml` (`margin` 12, `gap` 8, `touch` 48) into it, along with any others the pages carry by then.
Author
Collaborator

Split into three PRs, shipped one at a time:

  1. Theme and the Aa sheet (this one first). A Theme singleton holds the picker's margin, gap and touch size (comment above), the text sizes and the colours. The "Aa" button in the reading footer opens a sheet with night mode, text size (a percentage of the system font size, so it still follows the system font scale), Sans or Serif, and verse numbers on/off. Each setting is saved through the core's settings store as soon as it is changed (the slider saves on release). Night mode and fonts only change QML bindings, so only the delegates already created are re-laid out.
  2. F3 red letters: core::render turns <q who="Jesus"> into styled runs. The toggle is greyed out with an explanation when the module lacks OSISRedLetterWords.
  3. F4 running text: milestones, plus the line-spacing and verse-gap sliders.
Split into three PRs, shipped one at a time: 1. **Theme and the Aa sheet** (this one first). A `Theme` singleton holds the picker's margin, gap and touch size (comment above), the text sizes and the colours. The "Aa" button in the reading footer opens a sheet with night mode, text size (a percentage of the system font size, so it still follows the system font scale), Sans or Serif, and verse numbers on/off. Each setting is saved through the core's settings store as soon as it is changed (the slider saves on release). Night mode and fonts only change QML bindings, so only the delegates already created are re-laid out. 2. **F3 red letters**: `core::render` turns `<q who="Jesus">` into styled runs. The toggle is greyed out with an explanation when the module lacks `OSISRedLetterWords`. 3. **F4 running text**: `¶` milestones, plus the line-spacing and verse-gap sliders.
Author
Collaborator

Part 1 (the Aa sheet) is merged in #36. Merged main is installed on Plinius: build 0.0.1 9426d2197. It started cleanly: window loaded after 339 ms, restored KJV Gen 7, no QML warnings in the journal.

On the phone, try:

  • Aa in the footer opens the sheet. It fits the screen, and tapping outside or Back closes it.
  • Night mode turns the reading pane, the picker (books, chapters, verses) and the sheet itself dark, then light again.
  • Text size slider: the verse at the top stays at the top while the text grows and shrinks.
  • Serif / sans: the text changes face, and each option's label is shown in its own face.
  • Verse numbers off hides the numbers in front of verses, and the top verse stays put.
  • Persistence: set night mode and a larger text size, close the app (or kill it), and reopen it. Both settings are back, and there's no white flash before the text appears.
  • The footer buttons (Back, the reference, Aa) still work, and holding the reference still shows the build.

This issue stays open: part 2 (F3 red letters, through core::render) and part 3 (F4 running text and the sliders) are still to come. I'm starting part 2 now.

🤖 Generated with Claude Code

Part 1 (the Aa sheet) is merged in #36. Merged main is installed on Plinius: build `0.0.1 9426d2197`. It started cleanly: window loaded after 339 ms, restored KJV Gen 7, no QML warnings in the journal. **On the phone, try:** - [x] **Aa** in the footer opens the sheet. It fits the screen, and tapping outside or Back closes it. - [ ] **Night mode** turns the reading pane, the picker (books, chapters, verses) and the sheet itself dark, then light again. - [ ] **Text size slider:** the verse at the top stays at the top while the text grows and shrinks. - [x] **Serif / sans:** the text changes face, and each option's label is shown in its own face. - [x] **Verse numbers off** hides the numbers in front of verses, and the top verse stays put. - [ ] **Persistence:** set night mode and a larger text size, close the app (or kill it), and reopen it. Both settings are back, and there's no white flash before the text appears. - [x] The footer buttons (Back, the reference, Aa) still work, and holding the reference still shows the build. This issue stays open: part 2 (F3 red letters, through core::render) and part 3 (F4 running text and the sliders) are still to come. I'm starting part 2 now. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Owner

Night mode didn't turn the background dark for me, but only shifted the text color.

Night mode didn't turn the background dark for me, but only shifted the text color.
Author
Collaborator

Part 2 (red letters) is merged in #37. Merged main is installed on Plinius: build 0.0.1 8ae7d6049. It started cleanly: window loaded after 314 ms, restored KJV John 7. Your saved settings have red letters off (utsb: red letters false), so the first step switches them back on.

On the phone, try:

  • Aa → Red letters on: in John 7 (or Matthew 5), Jesus' words turn red. Only the verses already on screen re-render, and the place doesn't jump.
  • The red is readable in both the light and the dark system theme.
  • Red letters off: the words go back to the normal text colour.
  • Survives a kill: with red letters on, swipe the app away, reopen it, and the red is still there at the same place.
  • Greyed out: with a module that has no words-of-Jesus markup (if one is installed), the switch is greyed out with an explanation.

Known follow-up, not in this part: #41 (night mode follows the system theme and dims it).
Still to come in #12: part 3, F4 verse layout (one verse per line or running text, line spacing and verse gap).

Part 2 (red letters) is merged in #37. Merged main is installed on Plinius: build `0.0.1 8ae7d6049`. It started cleanly: window loaded after 314 ms, restored KJV John 7. Your saved settings have red letters **off** (`utsb: red letters false`), so the first step switches them back on. **On the phone, try:** - [x] **Aa → Red letters on:** in John 7 (or Matthew 5), Jesus' words turn red. Only the verses already on screen re-render, and the place doesn't jump. - [x] **The red is readable** in both the light and the dark system theme. - [x] **Red letters off:** the words go back to the normal text colour. - [x] **Survives a kill:** with red letters on, swipe the app away, reopen it, and the red is still there at the same place. - [x] **Greyed out:** with a module that has no words-of-Jesus markup (if one is installed), the switch is greyed out with an explanation. Known follow-up, not in this part: #41 (night mode follows the system theme and dims it). Still to come in #12: part 3, F4 verse layout (one verse per line or running text, line spacing and verse gap).
Author
Collaborator

Owner request (2026-10-23), for part 3 (F4 verse layout): verse numbers should be small superscripts, as on other Bible sites and apps, so they distract less from the text. There is no setting for this; it is simply how numbers look. The existing "verse numbers on/off" stays.

  • Tap target: a verse number will open the verse sheet (docs/04, "Tap a verse number"). A smaller glyph must keep a touch area of at least the Theme's touch size, so the area around the number stays tappable.
  • Distinct from Strong's numbers: Strong's numbers are also superscripts (docs/04, "references on"). Verse numbers need a different weight or colour so the two can be told apart.
  • Contrast: the number stays readable in night mode and in both text faces.
  • No jump: the top verse stays put when the layout changes, as with the text size slider.

🤖 Generated with Claude Code

Owner request (2026-10-23), for part 3 (F4 verse layout): verse numbers should be small superscripts, as on other Bible sites and apps, so they distract less from the text. There is no setting for this; it is simply how numbers look. The existing "verse numbers on/off" stays. - **Tap target:** a verse number will open the verse sheet (docs/04, "Tap a verse number"). A smaller glyph must keep a touch area of at least the Theme's touch size, so the area around the number stays tappable. - **Distinct from Strong's numbers:** Strong's numbers are also superscripts (docs/04, "references on"). Verse numbers need a different weight or colour so the two can be told apart. - **Contrast:** the number stays readable in night mode and in both text faces. - **No jump:** the top verse stays put when the layout changes, as with the text size slider. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Owner

@claude-bot wrote in #12 (comment):

Part 2 (red letters) is merged in #37. Merged main is installed on Plinius: build 0.0.1 8ae7d6049. It started cleanly: window loaded after 314 ms, restored KJV John 7. Your saved settings have red letters off (utsb: red letters false), so the first step switches them back on.

On the phone, try:

* [x] **Aa → Red letters on:** in John 7 (or Matthew 5), Jesus' words turn red. Only the verses already on screen re-render, and the place doesn't jump.

* [x] **The red is readable** in both the light and the dark system theme.

* [x] **Red letters off:** the words go back to the normal text colour.

* [x] **Survives a kill:** with red letters on, swipe the app away, reopen it, and the red is still there at the same place.

* [x] **Greyed out:** with a module that has no words-of-Jesus markup (if one is installed), the switch is greyed out with an explanation.

Known follow-up, not in this part: #41 (night mode follows the system theme and dims it). Still to come in #12: part 3, F4 verse layout (one verse per line or running text, line spacing and verse gap).

All checks passed at 13:35 with build c6a386944 in phase1/switch-bible

@claude-bot wrote in https://code.austinschaefer.com/schaefera/utStudyBIble/issues/12#issuecomment-1713: > Part 2 (red letters) is merged in #37. Merged main is installed on Plinius: build `0.0.1 8ae7d6049`. It started cleanly: window loaded after 314 ms, restored KJV John 7. Your saved settings have red letters **off** (`utsb: red letters false`), so the first step switches them back on. > > **On the phone, try:** > > * [x] **Aa → Red letters on:** in John 7 (or Matthew 5), Jesus' words turn red. Only the verses already on screen re-render, and the place doesn't jump. > > * [x] **The red is readable** in both the light and the dark system theme. > > * [x] **Red letters off:** the words go back to the normal text colour. > > * [x] **Survives a kill:** with red letters on, swipe the app away, reopen it, and the red is still there at the same place. > > * [x] **Greyed out:** with a module that has no words-of-Jesus markup (if one is installed), the switch is greyed out with an explanation. > > > Known follow-up, not in this part: #41 (night mode follows the system theme and dims it). Still to come in #12: part 3, F4 verse layout (one verse per line or running text, line spacing and verse gap). All checks passed at 13:35 with build c6a386944 in phase1/switch-bible
Author
Collaborator

Part 3 (F4) is bigger than it looked. Running text can't be one row per verse, and the reading model, anchors, Go to and saved place all count verses. So I'm splitting part 3 into three PRs, shipped one at a time:

  • 3a. Verse look, no model change. Verse numbers become small superscripts, in a different weight and colour from future Strong's numbers, and readable in night mode and both faces. Display settings get two sliders, line spacing and verse gap. Each is saved on release and keeps the top verse in place, like the text size slider. The verse number's ≥ touch-size tap area comes with the verse sheet, which doesn't exist yet.
  • 3b. Paragraph starts from the module. sword marks each verse that opens a paragraph: OSIS milestones (x-p), <p>, and paragraph divs, with headings and chapter starts counted too. This sits beside the run text, so the diatheke goldens stay as they are. Synthetic tests cover KJV-style milestones and a module without paragraphs.
  • 3c. Running text. This is the switch. In running mode a row is a paragraph block (docs/03 Block), and each row keeps the start offset of every verse in it. Anchors, Go to, Back and the saved place still resolve to a verse plus a fraction. Switching keeps the top verse. Memory and frame drops get measured against S1 (17–36 ms per switch, about 72 MB).

I'm starting 3a now.

🤖 Generated with Claude Code

Part 3 (F4) is bigger than it looked. Running text can't be one row per verse, and the reading model, anchors, Go to and saved place all count verses. So I'm splitting part 3 into three PRs, shipped one at a time: - **3a. Verse look, no model change.** Verse numbers become small superscripts, in a different weight and colour from future Strong's numbers, and readable in night mode and both faces. Display settings get two sliders, line spacing and verse gap. Each is saved on release and keeps the top verse in place, like the text size slider. The verse number's ≥ touch-size tap area comes with the verse sheet, which doesn't exist yet. - **3b. Paragraph starts from the module.** sword marks each verse that opens a paragraph: OSIS `¶` milestones (`x-p`), `<p>`, and paragraph `div`s, with headings and chapter starts counted too. This sits beside the run text, so the diatheke goldens stay as they are. Synthetic tests cover KJV-style `¶` milestones and a module without paragraphs. - **3c. Running text.** This is the switch. In running mode a row is a paragraph block (docs/03 `Block`), and each row keeps the start offset of every verse in it. Anchors, Go to, Back and the saved place still resolve to a verse plus a fraction. Switching keeps the top verse. Memory and frame drops get measured against S1 (17–36 ms per switch, about 72 MB). I'm starting 3a now. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

All of #12 is merged: #36, #37, #113, #114 and #115. Merged main is installed on Plinius as build 0.0.1 9c6ab1825. The window loaded after 338–370 ms and restored the saved place.

I checked these myself on the phone with ute2e taps, screenshots and the app log:

  • Running text on BSB Matt 23: the chapter shows as paragraphs (52 rows instead of 136). The saved place BSB 24914 0.792 didn't change, and line pitch is 24 in both modes.
  • Verse numbers off in running text hides the numbers and keeps the place. Turning them back on restores them.
  • Words of Jesus in red on BSB is greyed out with "This Bible doesn't mark the words of Jesus."
  • Red letters on KJV: with running text on, Jesus' words turn red while the verse numbers stay grey. Off turns them back; the log shows red on screen going 0 → 2.
  • Switching Bible (BSB → KJV → BSB) keeps the verse.
  • Text size 150 %, line spacing 130 % and a 24 px verse gap, all in running text: the top verse stays at Matt 23:3 (0.733 → 0.735).
  • Survives a kill: the place (KJV 24916 0.735) and every setting came back after a relaunch.
  • Earlier, on the PR build, I checked Go to mid-paragraph and Back, and the numbers in Sans and Serif (PR #115, comment 2394).

I put your settings back as they were: BSB, verse mode, size, spacing and gap at their old values, and red letters on.

Only you can judge these:

  • Feel: flicking and reading in running text is smooth, at a larger text size too.
  • Dark theme: with the system theme on dark, running text and the red letters read well. Switching the system theme is your setting, so I didn't.
  • No flash on start: the log shows the default sizes and then yours, in the same frame (16:37:03). Check whether you see the text jump when the app opens with a non-default size.

Wiki: there is a new manual page, Reading display, and a #12 section on Screenshots. Both are linked from Home. The shots are light theme only.

Follow-up filed while testing: #119 (the ASV module itself is missing spaces around added words).

This issue stays open until you sign off.

🤖 Generated with Claude Code

All of #12 is merged: #36, #37, #113, #114 and #115. Merged main is installed on Plinius as build `0.0.1 9c6ab1825`. The window loaded after 338–370 ms and restored the saved place. **I checked these myself on the phone** with ute2e taps, screenshots and the app log: - [x] **Running text on BSB Matt 23:** the chapter shows as paragraphs (52 rows instead of 136). The saved place `BSB 24914 0.792` didn't change, and line pitch is 24 in both modes. - [x] **Verse numbers off** in running text hides the numbers and keeps the place. Turning them back on restores them. - [x] **Words of Jesus in red** on BSB is greyed out with "This Bible doesn't mark the words of Jesus." - [x] **Red letters on KJV:** with running text on, Jesus' words turn red while the verse numbers stay grey. Off turns them back; the log shows `red on screen` going 0 → 2. - [x] **Switching Bible** (BSB → KJV → BSB) keeps the verse. - [x] **Text size 150 %, line spacing 130 % and a 24 px verse gap**, all in running text: the top verse stays at Matt 23:3 (0.733 → 0.735). - [x] **Survives a kill:** the place (`KJV 24916 0.735`) and every setting came back after a relaunch. - [x] Earlier, on the PR build, I checked Go to mid-paragraph and Back, and the numbers in Sans and Serif (PR #115, comment 2394). I put your settings back as they were: BSB, verse mode, size, spacing and gap at their old values, and red letters on. **Only you can judge these:** - [x] **Feel:** flicking and reading in running text is smooth, at a larger text size too. - [x] **Dark theme:** with the system theme on dark, running text and the red letters read well. Switching the system theme is your setting, so I didn't. - [ ] **No flash on start:** the log shows the default sizes and then yours, in the same frame (16:37:03). Check whether you see the text jump when the app opens with a non-default size. **Wiki:** there is a new manual page, [Reading display](https://code.austinschaefer.com/schaefera/utStudyBIble/wiki/Reading-display), and a #12 section on [Screenshots](https://code.austinschaefer.com/schaefera/utStudyBIble/wiki/Screenshots). Both are linked from Home. The shots are light theme only. Follow-up filed while testing: #119 (the ASV module itself is missing spaces around added words). This issue stays open until you sign off. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Owner

There is a very fast "flash" on start, but it's very short. It would be a polish todo after 0.1 to maybe have a loading splash if we determine if it's needed, or to somehow track whether all settings have been loaded, and only actually display the app once everything is ready to go (until then, just let the UT Splash screen stay up).

There is a very fast "flash" on start, but it's very short. It would be a polish todo after 0.1 to maybe have a loading splash if we determine if it's needed, or to somehow track whether all settings have been loaded, and only actually display the app once everything is ready to go (until then, just let the UT Splash screen stay up).
Author
Collaborator

Thanks. Feel and the dark theme are signed off. The short start flash is now #122 (priority/Could, milestone v0.2), with both of your options: keep the UT splash up until every setting is loaded, or add a splash of our own if one is needed. Everything else in #12 is shipped and checked, so I'm closing it.

🤖 Generated with Claude Code

Thanks. Feel and the dark theme are signed off. The short start flash is now #122 (priority/Could, milestone v0.2), with both of your options: keep the UT splash up until every setting is loaded, or add a splash of our own if one is needed. Everything else in #12 is shipped and checked, so I'm closing it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
schaefera/utStudyBIble#12
No description provided.