diff options
| author | 2023-05-19 17:16:22 +0200 | |
|---|---|---|
| committer | 2023-05-19 17:16:22 +0200 | |
| commit | 640e13943c04754ef74e11db470b6c9470640623 (patch) | |
| tree | f2163bb2cbe7e26ecdd78035203181e42d8a19cb /style/src | |
| parent | cc5d11f1a6fca90ea57e3fb3a69587c65281b6b9 (diff) | |
| parent | 9b5f32ee403c8b0730e3bac2b48aab6b87d7b653 (diff) | |
| download | iced-640e13943c04754ef74e11db470b6c9470640623.tar.gz iced-640e13943c04754ef74e11db470b6c9470640623.tar.bz2 iced-640e13943c04754ef74e11db470b6c9470640623.zip  | |
Merge pull request #1856 from jhff/pane_grid_split_with_dragged_pane
[Feature] Enhance PaneGrid to split panes by drag & drop
Diffstat (limited to '')
| -rw-r--r-- | style/src/pane_grid.rs | 38 | ||||
| -rw-r--r-- | style/src/theme.rs | 19 | 
2 files changed, 46 insertions, 11 deletions
diff --git a/style/src/pane_grid.rs b/style/src/pane_grid.rs index fd8fc05f..c1002725 100644 --- a/style/src/pane_grid.rs +++ b/style/src/pane_grid.rs @@ -1,16 +1,17 @@  //! Change the appearance of a pane grid. -use iced_core::Color; +use iced_core::{Background, Color}; -/// A set of rules that dictate the style of a container. -pub trait StyleSheet { -    /// The supported style of the [`StyleSheet`]. -    type Style: Default; - -    /// The [`Line`] to draw when a split is picked. -    fn picked_split(&self, style: &Self::Style) -> Option<Line>; - -    /// The [`Line`] to draw when a split is hovered. -    fn hovered_split(&self, style: &Self::Style) -> Option<Line>; +/// The appearance of the hovered region of a pane grid. +#[derive(Debug, Clone, Copy)] +pub struct Appearance { +    /// The [`Background`] of the hovered pane region. +    pub background: Background, +    /// The border width of the hovered pane region. +    pub border_width: f32, +    /// The border [`Color`] of the hovered pane region. +    pub border_color: Color, +    /// The border radius of the hovered pane region. +    pub border_radius: f32,  }  /// A line. @@ -24,3 +25,18 @@ pub struct Line {      /// The width of the [`Line`].      pub width: f32,  } + +/// A set of rules that dictate the style of a container. +pub trait StyleSheet { +    /// The supported style of the [`StyleSheet`]. +    type Style: Default; + +    /// The [`Region`] to draw when a pane is hovered. +    fn hovered_region(&self, style: &Self::Style) -> Appearance; + +    /// The [`Line`] to draw when a split is picked. +    fn picked_split(&self, style: &Self::Style) -> Option<Line>; + +    /// The [`Line`] to draw when a split is hovered. +    fn hovered_split(&self, style: &Self::Style) -> Option<Line>; +} diff --git a/style/src/theme.rs b/style/src/theme.rs index 477bd27b..6299975d 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -715,6 +715,25 @@ pub enum PaneGrid {  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_width: 2.0, +                    border_color: palette.primary.strong.color, +                    border_radius: 0.0, +                } +            } +            PaneGrid::Custom(custom) => custom.hovered_region(self), +        } +    } +      fn picked_split(&self, style: &Self::Style) -> Option<pane_grid::Line> {          match style {              PaneGrid::Default => {  | 
