diff options
| author | 2023-08-30 04:31:21 +0200 | |
|---|---|---|
| committer | 2023-08-30 04:31:21 +0200 | |
| commit | ed3454301e663a7cb7d73cd56b57b188f4d14a2f (patch) | |
| tree | 8118d1305c2eba3a1b45d04634cd0e8d050fc0fa /core/src/layout.rs | |
| parent | c9bd48704dd9679c033dd0b8588e2744a3df44a0 (diff) | |
| download | iced-ed3454301e663a7cb7d73cd56b57b188f4d14a2f.tar.gz iced-ed3454301e663a7cb7d73cd56b57b188f4d14a2f.tar.bz2 iced-ed3454301e663a7cb7d73cd56b57b188f4d14a2f.zip | |
Implement explicit text caching in the widget state tree
Diffstat (limited to 'core/src/layout.rs')
| -rw-r--r-- | core/src/layout.rs | 28 | 
1 files changed, 27 insertions, 1 deletions
| diff --git a/core/src/layout.rs b/core/src/layout.rs index 04954fb9..50ccf1f4 100644 --- a/core/src/layout.rs +++ b/core/src/layout.rs @@ -7,7 +7,7 @@ pub mod flex;  pub use limits::Limits;  pub use node::Node; -use crate::{Point, Rectangle, Vector}; +use crate::{Point, Rectangle, Size, Vector};  /// The bounds of a [`Node`] and its children, using absolute coordinates.  #[derive(Debug, Clone, Copy)] @@ -63,3 +63,29 @@ impl<'a> Layout<'a> {          })      }  } + +/// Produces a [`Node`] with two children nodes one right next to each other. +pub fn next_to_each_other( +    limits: &Limits, +    spacing: f32, +    left: impl FnOnce(&Limits) -> Node, +    right: impl FnOnce(&Limits) -> Node, +) -> Node { +    let left_node = left(limits); +    let left_size = left_node.size(); + +    let right_limits = limits.shrink(Size::new(left_size.width + spacing, 0.0)); + +    let mut right_node = right(&right_limits); +    let right_size = right_node.size(); + +    right_node.move_to(Point::new(left_size.width + spacing, 0.0)); + +    Node::with_children( +        Size::new( +            left_size.width + spacing + right_size.width, +            left_size.height.max(right_size.height), +        ), +        vec![left_node, right_node], +    ) +} | 
