Skip to main content

cranpose_ui/modifier/
alignment.rs

1use super::{Alignment, HorizontalAlignment, Modifier, VerticalAlignment, inspector_metadata};
2use crate::modifier_nodes::AlignmentElement;
3
4impl Modifier {
5    /// Aligns this child's first text baseline with siblings that also request
6    /// baseline alignment in a Row. A child without a baseline is placed at the top.
7    pub fn align_by_baseline(self) -> Self {
8        self.then(
9            Self::with_element(AlignmentElement::row_baseline())
10                .with_inspector_metadata(inspector_metadata("alignByBaseline", |_| {})),
11        )
12    }
13
14    /// Aligns this child inside a `Box` by `alignment`. Compose's `BoxScope.align`.
15    pub fn align(self, alignment: Alignment) -> Self {
16        self.then(
17            Self::with_element(AlignmentElement::box_alignment(alignment)).with_inspector_metadata(
18                inspector_metadata("align", move |info| {
19                    info.add_alignment("boxAlignment", alignment);
20                }),
21            ),
22        )
23    }
24
25    /// Aligns this child inside a `Box`. Same as [`Self::align`].
26    #[expect(non_snake_case)]
27    pub fn alignInBox(self, alignment: Alignment) -> Self {
28        self.align(alignment)
29    }
30
31    /// Aligns this child horizontally inside a `Column`. Compose's `ColumnScope.align`.
32    #[expect(non_snake_case)]
33    pub fn alignInColumn(self, alignment: HorizontalAlignment) -> Self {
34        let modifier = Self::with_element(AlignmentElement::column_alignment(alignment))
35            .with_inspector_metadata(inspector_metadata("alignInColumn", move |info| {
36                info.add_alignment("columnAlignment", alignment);
37            }));
38        self.then(modifier)
39    }
40
41    /// Aligns this child vertically inside a `Row`. Compose's `RowScope.align`.
42    #[expect(non_snake_case)]
43    pub fn alignInRow(self, alignment: VerticalAlignment) -> Self {
44        let modifier = Self::with_element(AlignmentElement::row_alignment(alignment))
45            .with_inspector_metadata(inspector_metadata("alignInRow", move |info| {
46                info.add_alignment("rowAlignment", alignment);
47            }));
48        self.then(modifier)
49    }
50}