bread-theme: add libadwaita components + fix slider/chip theming gaps
New `adw` feature (gated separately from `gtk`, since AdwApplicationWindow isn't compatible with gtk4-layer-shell — the five panel/launcher apps stay on plain `gtk`, only breadman/breadhelp-style plain-window apps want this): preferences_group/toggle_row/spin_row/action_row/preferences_page, wrapping libadwaita's PreferencesGroup/SwitchRow/SpinRow/ActionRow/PreferencesPage. adw::init() also forces dark color-scheme, since bread-theme's whole design is a fixed dark base regardless of system GTK preference. These directly target defects a design critique found: hand-rolled switch+label rows with no intrinsic width (breadman/settings' ~1400px stretched toggles) and spinners stranded far from their label — both just don't happen when the row is a real AdwSwitchRow/AdwSpinRow instead of a box assembled from scratch. Also, two shared-stylesheet fixes usable by every app immediately, gtk feature only: - `scale` (slider) had no rule at all, so every volume/brightness slider showed GTK's own default blue instead of the palette accent — the same critique flagged breadbar's control-panel sliders contradicting its own on-brand OSD fill two clicks away. - A new `chip()`/`set_chip_active()` helper in gtk.rs uses the existing (already-tokenized, already-defined) `.chip`/`.pill` stylesheet rule instead of each app hand-rolling its own filter-chip CSS — which is how breadclip/breadpad/breadman ended up with three different, mutually disagreeing pill fills for what's supposed to be one shared component.
This commit is contained in:
parent
6eb3479529
commit
e898535bb4
5 changed files with 155 additions and 0 deletions
|
|
@ -114,6 +114,29 @@ pub fn apply_css(css: &str, provider: &RefCell<Option<CssProvider>>) {
|
|||
}
|
||||
}
|
||||
|
||||
/// A filter/tag chip using the shared `.chip` stylesheet rule (an
|
||||
/// `@overlay`-filled pill, `@accent`-filled when the `active` CSS class is
|
||||
/// set) instead of a fresh literal color — this is the fix for the same
|
||||
/// component drifting to three different fills across breadclip (grey),
|
||||
/// breadpad, and breadman (both cream), none of which agreed with each
|
||||
/// other or with the shared token.
|
||||
pub fn chip(label: &str) -> gtk4::Button {
|
||||
gtk4::Button::builder().label(label).css_classes(["chip"]).build()
|
||||
}
|
||||
|
||||
/// Toggles a chip's (or any widget's) `active` CSS class — the `.chip.active`
|
||||
/// stylesheet rule fills it with the accent instead of the neutral overlay.
|
||||
/// Wiring *when* a chip becomes active (single-select filter, multi-select
|
||||
/// tags, etc.) is genuinely per-app, so that stays the caller's job; this is
|
||||
/// just the one-line visual toggle every case needs.
|
||||
pub fn set_chip_active(chip: &impl IsA<gtk4::Widget>, active: bool) {
|
||||
if active {
|
||||
chip.add_css_class("active");
|
||||
} else {
|
||||
chip.remove_css_class("active");
|
||||
}
|
||||
}
|
||||
|
||||
/// Apply a user CSS override file at USER priority. Clears the provider if the
|
||||
/// file is absent so stale overrides don't persist across SIGHUP reloads.
|
||||
pub fn apply_user_css(path: &Path, provider: &RefCell<Option<CssProvider>>) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue