Skip to content

feat(wallpaper): add smart rotation selection - #34

Open
perlowja wants to merge 5 commits into
singularityos-lab:mainfrom
perlowja:feat/wallpaper-smart-rotation-phase3-pr
Open

perlowja wants to merge 5 commits into
singularityos-lab:mainfrom
perlowja:feat/wallpaper-smart-rotation-phase3-pr

Conversation

@perlowja

Copy link
Copy Markdown
Contributor

Depends on #32. This branch is based on the current Phase 1 PR head because favorites weighting uses WallpaperFavorites; it must be rebased onto main after #32 merges.

The shipped GSettings contract is in singularityos-lab/singularity-desktop#266; this PR must not merge before that schema change ships.

Adds minimum image dimensions, display-aspect preference, threefold favorites weighting, and an immediate Next Wallpaper action. All paths use the existing generic Singularity conventions: ~/.config/singularity/wallpaper-rotation and singularity/wallpaper-collections.

Verification:

  • wallpaper-rotator-test: 19/19 passed, including deterministic dimension, fallback, aspect, exact favorites-weighting, and immediate-next cases
  • Phase 1 focused tests: 2/2 executables passed
  • Shipped schema: strict compile plus memory-backend set/read-back passed for all four keys
  • Diff guardrails: no added comments, ASCII punctuation, no new libadwaita usage, and no NCZ path or brand additions

AI assistance: disclosed

Extends the wallpaper title/author overlay from a fixed bottom-left
position to a user-selected quadrant (top-left, top-right, bottom-left,
bottom-right), exposed as a Settings row below the existing visibility
toggle. An invalid or unset value safely falls back to bottom-left,
matching the previous fixed behavior.

The contrast-sampling rect (corner_luminance_frac call in
update_attribution()) now tracks the active quadrant too -- it previously
always sampled the bottom-left corner of the wallpaper regardless of
where the label actually sat, which would have picked light/dark text
against the wrong part of the image for any non-bottom-left placement.

Needs the wallpaper-attribution-position schema key
(singularityos-lab/singularity-desktop#262).

This ports and extends a working left/right-only version the operator
had running locally (never previously upstreamed) to the full 4-quadrant
case the current design calls for.

contrast-sample rect to track the active quadrant, added the Settings
picker row.

Assisted-by: Claude Code:claude-sonnet-5
AI-Scope: Ported and extended prior left/right attribution-position vala logic to full 4-quadrant support, plus fixed the contrast-sample rect to track the active quadrant.
Move top-positioned wallpaper attribution below the panel using the
panel height tracked by AppSystem, while retaining the existing edge
gutter. Make the position row insensitive whenever wallpaper attribution
is disabled.

Assisted-by: Codex:gpt-5.6-sol
AI-Scope: Fixed top attribution placement to clear the panel and bound the position row sensitivity to the attribution setting.
Persist bounded wallpaper history and favorites, and expose navigation, rotation, and favorite actions in the panel.

Assisted-by: Codex:gpt-5
Assisted-by: Codex:gpt-5.6-sol
AI-Scope: Rebased and integrated Phase 1 wallpaper favorites, history, panel controls, tests, and the generic rotation-state path.
Add grayscale, blur, oil-paint, and quote effects with a bounded cache, settings UI, schema fixture, and round-trip coverage.

Assisted-by: Claude Code:claude-sonnet-5
Assisted-by: Codex:gpt-5.6-sol
AI-Scope: Rebased Phase 2, resolved current wallpaper overlaps, added the settings contract fixture and round-trip test, and fixed test linkage.
Add minimum dimensions, aspect preference, favorites weighting, and an immediate-next action with deterministic tests.

Assisted-by: Claude Code:claude-sonnet-5
Assisted-by: Codex:gpt-5.6-sol
AI-Scope: Rebased Phase 3, retained generic Singularity paths, resolved rotator overlaps, completed schema coverage, and fixed focused test dependencies.
@perlowja
perlowja force-pushed the feat/wallpaper-smart-rotation-phase3-pr branch from 015b9c9 to 137443b Compare September 29, 2026 22:15
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.

1 participant