Repository navigation
feat: redesign settings, typography and the music page - #246
Merged
Merged
Conversation
The meter thread reset and re-found the target process within one loop iteration, so the loopback reader never saw the change and kept reading a stream that stops delivering after a device switch, leaving the spectrum flat. Device changes now bump an epoch that reopens the capture, a stall watchdog reopens it when the player is audible but no packets arrive, and the audio workers run on dedicated threads so cpal's COM apartment no longer collides with the MTA workers on reused blocking threads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds `AudioProvider::output_devices` and `set_default_output`. Devices carry their friendly name and form factor; switching uses the IPolicyConfig interface for every role. `AudioOutputs` runs both calls on a worker thread so the UI thread never blocks on COM. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings: - macOS-style window with an opaque base, a floating glass sidebar, concentric continuous corners, traffic lights with an inactive maximize button, a back/forward capsule and sidebar search across pages and items. - General settings split into General, Appearance, Size & Position, Hide & Interaction and Notifications & Alerts, with recolored sidebar and onboarding icons. - Larger capsule switches, flat push buttons, and a scrollable popup menu with a draggable gutter scrollbar, type-ahead, arrow keys, Enter and Esc. Typography: - Text APIs take a FontWeight instead of a bold flag. Latin text uses the Segoe UI Variable weight axis, variable fonts use their wght axis, and missing CJK weights are synthesized with a calibrated stroke. - The fallback locale is now the last BCP 47 tag Skia reads, so Chinese no longer falls back to Yu Gothic and Microsoft JhengHei. - Titles, buttons and numerals use semibold, labels and lyrics medium and body text regular; tiny widget values and notification details grow. Fonts: - The font menu lists the system default, a font file and installed families; regional variants such as PingFang UI SC/TC fold into one entry that follows the interface language. Adds a weight offset and a recommended PingFang UI link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The expanded player follows the iOS layout: five evenly spaced controls, gray side icons, a brighter progress track and gray secondary text. The left button shows the current output device and opens a device list that switches the default output; its scrollbar sits in its own gutter and can be dragged. The right button reflects the volume level, crossfades between levels and opens a volume slider that also responds to the mouse wheel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When music, a plugin activity or compact widgets already occupy the island, a running timer moves into the multitask orb on the right and shows only its progress ring; clicking the orb opens the timer page. On its own, the timer keeps the regular icon and countdown. The orb now carries camera, microphone and timer together. When a device indicator and the timer are both active, the orb widens into a short pill over 420 ms with the timer on the left and the dots on the right. Orb motion is quicker overall. After the island collapses from the expanded state, the orb starts separating once the collapse is halfway and settles together with the island instead of waiting for the springs to come to rest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Pre-submission checklist
CONTRIBUTING.mdand completed the required checksChange type (select one)
featNew featurefixBug fixdocsDocumentation or templatesstyleFormatting with no behavior changerefactorCode change that neither fixes a bug nor adds a featureperfPerformance improvementtestTest-related changechoreBuild, CI, dependency, or tooling changerevertRevertsecuritySecurity fixScope (select all that apply)
Other: platform API additions:
AudioProvider::output_devices/set_default_output, andWindowSystem::update_window_backdrop/set_text_inputfor the settings window. Dependency changes are newwindowscrate features only (Win32_Devices_FunctionDiscovery,Win32_System_Com_StructuredStorage,Win32_UI_Shell_PropertiesSystem).Related issues
Description
Summary
Redesigns the settings window, rebalances typography with real font weights and richer font options, restyles the music page with output-device and volume controls, adds the timer status orb, and fixes the spectrum stalling after an output device switch.
Motivation and context
zh-CNfirst, but Skia uses the last language tag, so Chinese text fell back to Yu Gothic and Microsoft JhengHei and mixed three fonts on one line.Changes
Commits are self-contained and build in order.
fix(audio): the meter thread reset and re-found the target PID within one loop iteration, so the loopback reader never noticed a device change and kept reading a stream that stops delivering. Device changes now bump an epoch that reopens the capture; a watchdog reopens it when the player is audible but no packets arrive for 2 s; the audio workers run on dedicated threads so cpal's COM apartment no longer collides with MTA workers on reused tokio blocking threads (the logs showedRPC_E_CHANGED_MODE).feat(audio):output_devices()lists active render endpoints with friendly name and form factor;set_default_output()switches viaIPolicyConfigfor all roles.AudioOutputsruns both on a worker thread.feat(settings):FontWeightinstead ofbool. Latin uses the Segoe UI Variablewghtaxis, variable fonts use their own axis, and CJK weights the family lacks are synthesized with a size-calibrated stroke. Titles, buttons and numerals use semibold, labels and lyrics medium, body text regular.ttf/otf/ttc/otc) and every installed family. Regional families such asPingFang UI SC/TC/HK/MO/JAfold into one entry that follows the interface language (Windows locale for non-Chinese UIs). A weight offset is added, along with a recommended-font link.feat(music):feat(island): while music or widgets occupy the compact island, a running timer moves into a status orb beside it, sharing the camera and microphone indicator behavior.Configuration
New keys
font_family(optional, unset by default) andfont_weight(light/regular/bold, defaultregular). Both fall back to serde defaults, so existing configs load unchanged.custom_font_pathkeeps its meaning and takes precedence overfont_family.Testing
cargo fmt --all -- --check,cargo clippy --workspace -- -D warnings,cargo build --releasepass; each commit also passescargo check.WINISLAND_HOMEsandbox: all settings pages in light and dark, the font menu, island scenes with the system font, a single-weight PingFang file and the PingFang UI variable family, and the music page with both panels.PingFang UI(if installed) or any family and check weights across the island and settings.UI changes
🤖 Generated with Claude Code