From 99aa54cd88d7eb99149699d539ee4d59e08047b1 Mon Sep 17 00:00:00 2001 From: Joao Freitas <51237625+jhff@users.noreply.github.com> Date: Tue, 16 May 2023 16:12:29 +0100 Subject: Add pane_grid functionality to split a pane with another pane --- style/src/pane_grid.rs | 18 +++++++++++++++++- style/src/theme.rs | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) (limited to 'style/src') diff --git a/style/src/pane_grid.rs b/style/src/pane_grid.rs index fd8fc05f..ec422e86 100644 --- a/style/src/pane_grid.rs +++ b/style/src/pane_grid.rs @@ -1,11 +1,14 @@ //! 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 [`Region`] to draw when a pane is hovered. + fn hovered_region(&self, style: &Self::Style) -> Region; + /// The [`Line`] to draw when a split is picked. fn picked_split(&self, style: &Self::Style) -> Option; @@ -13,6 +16,19 @@ pub trait StyleSheet { fn hovered_split(&self, style: &Self::Style) -> Option; } +/// The appearance of the hovered region of a pane grid. +#[derive(Debug, Clone, Copy)] +pub struct Region { + /// 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. /// /// It is normally used to define the highlight of something, like a split. diff --git a/style/src/theme.rs b/style/src/theme.rs index d9893bcf..c7b2bada 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -703,6 +703,25 @@ pub enum PaneGrid { impl pane_grid::StyleSheet for Theme { type Style = PaneGrid; + fn hovered_region(&self, style: &Self::Style) -> pane_grid::Region { + match style { + PaneGrid::Default => { + let palette = self.extended_palette(); + + pane_grid::Region { + 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 { match style { PaneGrid::Default => { -- cgit