summaryrefslogtreecommitdiffstats
path: root/widget/src/pane_grid/controls.rs
diff options
context:
space:
mode:
authorLibravatar mtkennerly <mtkennerly@gmail.com>2024-08-22 09:32:35 -0400
committerLibravatar mtkennerly <mtkennerly@gmail.com>2024-08-22 12:43:48 -0400
commit3a434c9505bcc1a9ce71db1d69f77c3374b076cb (patch)
tree30d60f48a4812991eb31acd742c061da3f5696a0 /widget/src/pane_grid/controls.rs
parent9b99b932bced46047ec2e18c2b6ec5a6c5b3636f (diff)
downloadiced-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.rs59
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)
+ }
+}