Simplify theming for PaneGrid widget

This commit is contained in:
Héctor Ramón Jiménez 2024-03-06 15:41:57 +01:00
parent 68c8f23f02
commit 9b2fd64167
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
4 changed files with 523 additions and 655 deletions

View file

@ -6,10 +6,9 @@ pub use palette::Palette;
use crate::application;
use crate::core::widget::text;
use crate::menu;
use crate::pane_grid;
use crate::pick_list;
use crate::core::{Background, Border, Color};
use crate::core::Border;
use std::fmt;
use std::rc::Rc;
@ -375,67 +374,4 @@ impl pick_list::StyleSheet for Theme {
}
}
/// The style of a pane grid.
#[derive(Default)]
pub enum PaneGrid {
/// The default style.
#[default]
Default,
/// A custom style.
Custom(Box<dyn pane_grid::StyleSheet<Style = Theme>>),
}
impl pane_grid::StyleSheet for Theme {
type Style = PaneGrid;
fn hovered_region(&self, style: &Self::Style) -> pane_grid::Appearance {
match style {
PaneGrid::Default => {
let palette = self.extended_palette();
pane_grid::Appearance {
background: Background::Color(Color {
a: 0.5,
..palette.primary.base.color
}),
border: Border {
width: 2.0,
color: palette.primary.strong.color,
radius: 0.0.into(),
},
}
}
PaneGrid::Custom(custom) => custom.hovered_region(self),
}
}
fn picked_split(&self, style: &Self::Style) -> Option<pane_grid::Line> {
match style {
PaneGrid::Default => {
let palette = self.extended_palette();
Some(pane_grid::Line {
color: palette.primary.strong.color,
width: 2.0,
})
}
PaneGrid::Custom(custom) => custom.picked_split(self),
}
}
fn hovered_split(&self, style: &Self::Style) -> Option<pane_grid::Line> {
match style {
PaneGrid::Default => {
let palette = self.extended_palette();
Some(pane_grid::Line {
color: palette.primary.base.color,
width: 2.0,
})
}
PaneGrid::Custom(custom) => custom.hovered_split(self),
}
}
}
impl text::StyleSheet for Theme {}