Skip to content

feat: CRT scanlines + editable Neo message lines + multi-screen sync fixes - #30

Merged
patrickschaper merged 17 commits into
mainfrom
development
May 15, 2026
Merged

feat: CRT scanlines + editable Neo message lines + multi-screen sync fixes#30
patrickschaper merged 17 commits into
mainfrom
development

Conversation

@patrickschaper

Copy link
Copy Markdown
Owner

Merges development into main.

  • Editable Neo message lines with drag-reorderable table editor
  • CRT scanlines overlay with 0–100% intensity slider in options (default 35%)
  • Multi-screen sync: scene start always at next 10s boundary (no fast-forward)
  • Synced number scene blackout: fixed 10 rounds across all screen widths
  • Cursor keeps blinking after "Call trans opt" line finishes typing

LouisFaure and others added 17 commits May 15, 2026 14:11
- add characters field to options model and configure sheet
- make glyph pool instance-level in renderer
- deduplicate custom characters and fall back to full default set when empty
- update README with new option
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- add CHANGELOG.md with history from all previous releases
- use TriPSs/conventional-changelog-action in the prepare job to
  generate a new section from commits since the last tag
- include CHANGELOG.md in the release branch commit

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- extract the current version's section from CHANGELOG.md
- pass it to gh release create via --notes-file

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- supportedScalars returns union of default pool and active pool so
  custom glyphs (e.g. ATGC) are included in the glyph cache
- resolveGlyphPool filters out whitespace, control, and non-grapheme
  scalars so invalid input fails gracefully instead of blank columns
- sanitized() trims and deduplicates characters so storage, Equatable
  comparison, and rendering all use a canonical form
- widen the Characters text field to ~24 M-widths so longer custom
  sets remain fully visible in the options sheet

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- add diacritic filter to sanitized() so persisted value matches rendered glyphs
- cache supportedScalars before loop in makeNativeGlyphCaches to avoid repeated recomputation
- preserve activeGlyphPool insertion order in supportedScalars instead of iterating a Set
- align README Characters description with charactersDescription string

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
feat: add custom character set option
feat: add CHANGELOG and auto-update on release
- conventional-changelog-action defaults to v prefix
- repo uses unprefixed tags (e.g. 0.0.9)
- without tag-prefix: "" the action cannot find the previous tag
  and generates changelog from the wrong commit range

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
fix: set tag-prefix to empty string in changelog action
- add neoMessageLines field to MatrixScreenSaverOptions with persist/load/save
- add Edit… button in options sheet opening a secondary lines editor sheet
- editor uses NSTableView with drag-and-drop row reordering via grab handle
- support add/remove/reset lines; 1–10 lines, max 256 chars each
- pass custom lines through renderer config to NeoMessageScene.reset
- keep four original lines as defaults

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- increase sync window to 10 s to tolerate slow-waking screens
- sceneStartTime always targets the next 10-second boundary so no
  display fast-forwards past the start of the Neo scene
- replace fraction-based blackout rounds with a fixed count of 10 so
  all screens finish the blackout at the same wall-clock time regardless
  of display width
- keep cursor blinking after 'Call trans opt' finishes typing through
  the pause before 'Trace program: running' replaces it

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Changes

- Add editable Neo message lines in the options sheet behind an `Edit…`
button
- Secondary editor sheet with `NSTableView`; drag handle (⠿) for
reordering rows
  - Add / remove lines with +/− buttons; Reset to defaults
- 1–10 lines, max 256 characters each; persisted via
`ScreenSaverDefaults`
- Increase sync window to 10 s so slow-waking screens join the same
scene sequence
- Fix Neo scene being skipped on late-activating screens:
`sceneStartTime` now always targets the next 10-second boundary,
eliminating fast-forward
- Sync number scene blackout end across screens with different widths:
fixed 10 blackout rounds regardless of column count
- Keep cursor blinking on the `Call trans opt` line after typing
completes, until the line is replaced
feat: add CRT scanlines effect with intensity slider

- draw 1px dark stripes every 2px over the terminal area each frame
- intensity controlled by a 0–100% slider in the options sheet (default 35%)
- alpha maps directly to percentage: 100% = fully opaque
- effect is skipped entirely when intensity is 0

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- add 'macOS Matrix Screen Saver' headline at top of sheet (left-aligned)
- add 'About' link button that opens the GitHub repository

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- replace NSStackView+spacer with plain NSView container
- pin title to leading, About button to trailing via explicit anchors
- avoids constraint conflict with NSStackView edge insets

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- replace NSStackView+spacer with plain NSView container
- pin title to leading, About button to trailing via explicit anchors
- avoids constraint conflict with NSStackView edge insets

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@patrickschaper
patrickschaper merged commit d229de7 into main May 15, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants