summaryrefslogtreecommitdiffstats
path: root/src/tuice/component/base/flex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tuice/component/base/flex.rs')
-rw-r--r--src/tuice/component/base/flex.rs33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/tuice/component/base/flex.rs b/src/tuice/component/base/flex.rs
index 1aefca0e..98172955 100644
--- a/src/tuice/component/base/flex.rs
+++ b/src/tuice/component/base/flex.rs
@@ -3,7 +3,7 @@ use tui::{backend::Backend, layout::Rect, Frame};
pub mod flex_element;
pub use flex_element::FlexElement;
-use crate::tuice::{Bounds, DrawContext, Element, Event, LayoutNode, Size, Status, TmpComponent};
+use crate::tuice::{Bounds, Component, DrawContext, Element, Event, LayoutNode, Size, Status};
#[derive(Clone, Copy, Debug)]
pub enum Axis {
@@ -14,12 +14,12 @@ pub enum Axis {
Vertical,
}
-pub struct Flex<'a, Message> {
- children: Vec<FlexElement<'a, Message>>,
+pub struct Flex<'a, Message, B: Backend> {
+ children: Vec<FlexElement<'a, Message, B>>,
alignment: Axis,
}
-impl<'a, Message> Flex<'a, Message> {
+impl<'a, Message, B: Backend> Flex<'a, Message, B> {
pub fn new(alignment: Axis) -> Self {
Self {
children: vec![],
@@ -38,7 +38,7 @@ impl<'a, Message> Flex<'a, Message> {
/// Creates a new [`Flex`] with a horizontal alignment with the given children.
pub fn row_with_children<C>(children: Vec<C>) -> Self
where
- C: Into<FlexElement<'a, Message>>,
+ C: Into<FlexElement<'a, Message, B>>,
{
Self {
children: children.into_iter().map(Into::into).collect(),
@@ -57,7 +57,7 @@ impl<'a, Message> Flex<'a, Message> {
/// Creates a new [`Flex`] with a vertical alignment with the given children.
pub fn column_with_children<C>(children: Vec<C>) -> Self
where
- C: Into<FlexElement<'a, Message>>,
+ C: Into<FlexElement<'a, Message, B>>,
{
Self {
children: children.into_iter().map(Into::into).collect(),
@@ -67,7 +67,7 @@ impl<'a, Message> Flex<'a, Message> {
pub fn with_child<E>(mut self, child: E) -> Self
where
- E: Into<Element<'a, Message>>,
+ E: Into<Element<'a, Message, B>>,
{
self.children.push(FlexElement::with_no_flex(child.into()));
self
@@ -75,7 +75,7 @@ impl<'a, Message> Flex<'a, Message> {
pub fn with_flex_child<E>(mut self, child: E, flex: u16) -> Self
where
- E: Into<Element<'a, Message>>,
+ E: Into<Element<'a, Message, B>>,
{
self.children
.push(FlexElement::with_flex(child.into(), flex));
@@ -83,11 +83,8 @@ impl<'a, Message> Flex<'a, Message> {
}
}
-impl<'a, Message> TmpComponent<Message> for Flex<'a, Message> {
- fn draw<B>(&mut self, context: DrawContext<'_>, frame: &mut Frame<'_, B>)
- where
- B: Backend,
- {
+impl<'a, Message, B: Backend> Component<Message, B> for Flex<'a, Message, B> {
+ fn draw(&mut self, context: DrawContext<'_>, frame: &mut Frame<'_, B>) {
self.children
.iter_mut()
.zip(context.children())
@@ -194,3 +191,13 @@ impl<'a, Message> TmpComponent<Message> for Flex<'a, Message> {
current_size
}
}
+
+impl<'a, Message, B: Backend> From<Flex<'a, Message, B>> for Element<'a, Message, B>
+where
+ Message: 'a,
+ B: 'a,
+{
+ fn from(flex: Flex<'a, Message, B>) -> Self {
+ Element::new(flex)
+ }
+}