feat(ui): theme system saving, multiple theme support#1570
Conversation
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
…upport - Add PathHelpers namespace for consistent file system path handling - Implement theme JSON loading/saving system with validation - Add 9 theme presets (Default, Amber, DragonBlood, DwemerBronze, Forest, HighContrast, Light, NordicFrost, Ocean) - Add ThemeManager core for theme discovery and application - Add THEME config mode to State - Update SettingsOverrideManager to use PathHelpers - Integrate theme loading/saving into Menu - Add CreateDefaultThemes and theme discovery at plugin startup - Remove PR #2 files (Font system - to be added in next PR) - Remove PR #3 files (Settings UI overhaul - to be added in future PR) - Remove PR #4 files (UI candy/blur - to be added in future PR) - Remove PR #5 files (Performance overlay improvements - to be added in future PR)
|
Caution Review failedThe pull request is closed. WalkthroughAdds a full theming system (JSON themes, theme discovery/load/save, per-role fonts, background blur) and integrates it across the Menu/UI. Refactors upscaling to use 2D resolution scales (float2) with API changes in FidelityFX/Streamline and related UI updates. Minor shader tweak to hair albedo. Paths and overrides refactored to helpers. Adds a PR split plan doc. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Game as Game/Plugin Loader
participant XSE as XSEPlugin
participant State as State
participant Menu as Menu
participant TM as ThemeManager
Game->>XSE: Load()
XSE->>State: LoadTheme()
alt No preset selected
State->>TM: (may) ForceApplyDefaultTheme()
end
XSE->>Menu: CreateDefaultThemes()
XSE->>TM: DiscoverThemes()
Menu->>TM: SetupImGuiStyle(menu)
Menu->>TM: ReloadFont(menu, cachedFontSize)
Note over TM: Applies FullPalette, per-role fonts, recovery
Menu->>TM: ApplyBackgroundBlur(blurIntensity)
sequenceDiagram
autonumber
participant UI as Menu/UI
participant Ups as Upscaling
participant FFX as FidelityFX
participant SL as Streamline
UI->>Ups: Update settings / preset
Ups->>FFX: GetInputResolutionScale(quality)
FFX-->>Ups: float2{sx, sy}
Ups->>SL: GetInputResolutionScale(quality)
SL-->>Ups: float2{dx, dy}
Ups->>Ups: Compute renderWidth = sw*sx, renderHeight = sh*sy
alt 1:1 match
Ups->>Ups: resolutionScale = {1.0, 1.0}
else Scaled
Ups->>Ups: resolutionScale = {rw/sw, rh/sh}
end
Ups-->>UI: Display preset label with avg(scale)
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
Suggested reviewers
Poem
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (34)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary by CodeRabbit
New Features
Improvements
Bug Fixes
Documentation