Studio: editor theme system (import/export/select themes)
Goal
Implement a complete editor theme system that allows users to import, export, and select different themes. The system should cover all widgets and elements used by the Studio, leveraging the DVUI theme system. The Studio should always use theme-related values instead of hardcoded ones.
Additionally, provide independent options to select font size for the Studio and a "zoom" multiplier (which affects the size of buttons, tabs, menus). Use the Settings API to select themes and import themes into the Turian global settings folder.
Context / integration points
- DVUI exposes a structure that describes colors, spacing, typography, borders, etc. (#104 (closed))
- The Studio currently uses some hardcoded values instead of theme lookups — these must all be migrated.
- Settings panel (#9 (closed) / #87 (closed)) will host theme, font size, and zoom controls.
- Themes should be stored as files in the Turian global settings folder (~/.turian/themes/ or similar).
- Minimum shipped themes: dark-theme, light-theme, dark-high-contrast, "Darcula"-like, "Catppuccin"-like.
Design
- Extend the asset format (#104 (closed)) with editor-specific properties (widget styling, panel backgrounds, accent colors).
- Add a theme manager singleton that loads, caches, and switches themes.
- Provide import/export: files can be loaded from disk or exported to shareable files.
- Theme selector in Settings panel: dropdown of available themes, with preview thumbnails.
- Font size slider (range: 10px–20px, step 1px) and zoom slider (range: 70%–150%, step 5%) in Settings.
- All Studio widgets query theme values via the active theme; hardcoded colors must be eliminated.
- Store the active theme name, font size, and zoom in the Settings API (persisted across sessions).
Tasks
- Audit all Studio widgets for hardcoded color/typography values
- Extend format with editor-specific properties if needed
- Implement theme manager (load, cache, switch, persist)
- Add import/export functionality for files
- Create the 5 built-in themes: dark, light, dark-high-contrast, Darcula, Catppuccin
- Add theme selector UI in Settings panel
- Add font size slider in Settings panel
- Add zoom multiplier slider in Settings panel
- Migrate all Studio code to use theme lookups instead of hardcoded values
- Migrate the theme into the Turian global settings folder
- Test theme switching across all panels and dialogs
Acceptance criteria
- All Studio widgets respect the active theme — no hardcoded colors remain.
- Users can switch between 5+ built-in themes from Settings.
- Users can import files and export the current theme.
- Font size and zoom settings work independently and persist.
- Theme, font size, and zoom are stored in the Settings API.
- Themes are importable into the global settings folder.
Dependencies
Related to #104 (closed) ( theme asset) and #87 (closed) (refine default theme and add zoom settings).
Out of scope
- Runtime/animated theme transitions.
- Per-panel theme overrides.
- Theme marketplace or online sharing.
- Custom theme editor UI.