feat: CRT scanlines, Neo message lines, custom characters, and options UI polish - #44
Merged
Conversation
- 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>
fix: generate CHANGELOG entry from git log in release workflow - remove conventional-changelog-action which computed its own version (feat: commits caused it to bump minor instead of using our patch bump) - replace with shell step that parses conventional commits since last tag - keeps existing ## [x.y.z] - date format so awk extraction in publish works - falls back to latest git tag if previous version tag is not found Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
feat: make scanlines vertical by default with direction option - change scanline orientation from horizontal to vertical (default) - add Vertical/Horizontal popup in options next to intensity slider - reduce default scanline intensity from 35% to 25% - persist direction preference via ScanLinesVertical key Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- replace width/height text fields with a single slider - 15 predefined size pairs from 4×8 to 18×34 (1.875 ratio) - default remains 11×21 - remove now-unused integer parsing and validation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- add `skipSyncDelay` flag to `NativeMatrixRenderer.Configuration` - detect ScreenSaverEngine process; skip sync window everywhere else - preview host and System Settings thumbnail no longer wait up to 10 s - number scene now appears ~21 s into preview instead of ~30+ s Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary - Add `skipSyncDelay` flag to `NativeMatrixRenderer.Configuration` - Detect `ScreenSaverEngine` process; skip the 10-second sync window everywhere else (preview host, System Settings thumbnail) - Number scene now appears ~21 s into the preview instead of ~30+ s (was hidden for most users who close the preview within 26 s)
- replace with fresh 90s recording - resize to 460px wide, max 12fps, variable frame rate Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- add Neo message scene toggle - add Neo message speed factor - add Scan lines intensity - add Scan lines vertical - update Development section option list Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
# Conflicts: # .github/workflows/release.yml # CHANGELOG.md # README.md # Sources/MatrixScreenSaver/MatrixScreenSaverOptions.swift # Sources/MatrixScreenSaver/MatrixScreenSaverView.swift # Sources/MatrixScreenSaver/NativeMatrixRenderer.swift
Merges `origin/main` (tag `0.0.10`) into `development` to resolve the merge conflicts blocking PR #44. - Resolves conflicts in `release.yml`, `CHANGELOG.md`, `README.md`, `MatrixScreenSaverOptions.swift`, `MatrixScreenSaverView.swift`, and `NativeMatrixRenderer.swift` - All conflicts resolved in favour of `development` (the more feature-complete side) - Build verified clean after resolution
patrickschaper
enabled auto-merge
May 19, 2026 15:04
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings main up to date with development. Changes since last merge: