diff options
author | 2024-08-22 09:32:35 -0400 | |
---|---|---|
committer | 2024-08-22 12:43:48 -0400 | |
commit | 3a434c9505bcc1a9ce71db1d69f77c3374b076cb (patch) | |
tree | 30d60f48a4812991eb31acd742c061da3f5696a0 /widget/src/pane_grid/controls.rs | |
parent | 9b99b932bced46047ec2e18c2b6ec5a6c5b3636f (diff) | |
download | iced-3a434c9505bcc1a9ce71db1d69f77c3374b076cb.tar.gz iced-3a434c9505bcc1a9ce71db1d69f77c3374b076cb.tar.bz2 iced-3a434c9505bcc1a9ce71db1d69f77c3374b076cb.zip |
Add compact variant for pane grid controls
Diffstat (limited to 'widget/src/pane_grid/controls.rs')
-rw-r--r-- | widget/src/pane_grid/controls.rs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/widget/src/pane_grid/controls.rs b/widget/src/pane_grid/controls.rs new file mode 100644 index 00000000..13b57acb --- /dev/null +++ b/widget/src/pane_grid/controls.rs @@ -0,0 +1,59 @@ +use crate::container; +use crate::core::{self, Element}; + +/// The controls of a [`Pane`]. +/// +/// [`Pane`]: super::Pane +#[allow(missing_debug_implementations)] +pub struct Controls< + 'a, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where + Theme: container::Catalog, + Renderer: core::Renderer, +{ + pub(super) full: Element<'a, Message, Theme, Renderer>, + pub(super) compact: Option<Element<'a, Message, Theme, Renderer>>, +} + +impl<'a, Message, Theme, Renderer> Controls<'a, Message, Theme, Renderer> +where + Theme: container::Catalog, + Renderer: core::Renderer, +{ + /// Creates a new [`Controls`] with the given content. + pub fn new( + content: impl Into<Element<'a, Message, Theme, Renderer>>, + ) -> Self { + Self { + full: content.into(), + compact: None, + } + } + + /// Creates a new [`Controls`] with a full and compact variant. + /// If there is not enough room to show the full variant without overlap, + /// then the compact variant will be shown instead. + pub fn dynamic( + full: impl Into<Element<'a, Message, Theme, Renderer>>, + compact: impl Into<Element<'a, Message, Theme, Renderer>>, + ) -> Self { + Self { + full: full.into(), + compact: Some(compact.into()), + } + } +} + +impl<'a, Message, Theme, Renderer> From<Element<'a, Message, Theme, Renderer>> + for Controls<'a, Message, Theme, Renderer> +where + Theme: container::Catalog, + Renderer: core::Renderer, +{ + fn from(value: Element<'a, Message, Theme, Renderer>) -> Self { + Self::new(value) + } +} |