diff options
author | 2024-08-24 01:58:53 +0200 | |
---|---|---|
committer | 2024-08-24 01:58:53 +0200 | |
commit | 84e766fd0022783f36f02c99b150a79753e74791 (patch) | |
tree | 710ab595a6bf9fd18d7d42ece01a0346e780ebec /widget/src/pane_grid/controls.rs | |
parent | bb6fa4292433c015cb5b69a2c4f7d7f0b92339c6 (diff) | |
parent | 3a434c9505bcc1a9ce71db1d69f77c3374b076cb (diff) | |
download | iced-84e766fd0022783f36f02c99b150a79753e74791.tar.gz iced-84e766fd0022783f36f02c99b150a79753e74791.tar.bz2 iced-84e766fd0022783f36f02c99b150a79753e74791.zip |
Merge pull request #2555 from mtkennerly/feature/pane-grid-compact-controls
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) + } +} |