Introduce and use CrossAlign enum for Column and Row

This commit is contained in:
Héctor Ramón Jiménez 2021-09-20 14:33:02 +07:00
parent 95e4791a1e
commit 5fae6e59ff
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
33 changed files with 166 additions and 115 deletions

View file

@ -9,11 +9,34 @@ pub enum Align {
/// Align at the end of the axis. /// Align at the end of the axis.
End, End,
}
/// Alignment on the cross axis of a container.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CrossAlign {
/// Align at the start of the axis.
Start,
/// Align at the center of the axis.
Center,
/// Align at the end of the axis.
End,
/// Fill the entire axis. /// Fill the entire axis.
Fill, Fill,
} }
impl From<Align> for CrossAlign {
fn from(align: Align) -> Self {
match align {
Align::Start => Self::Start,
Align::Center => Self::Center,
Align::End => Self::End,
}
}
}
/// The horizontal alignment of some resource. /// The horizontal alignment of some resource.
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HorizontalAlignment { pub enum HorizontalAlignment {

View file

@ -29,7 +29,7 @@ mod rectangle;
mod size; mod size;
mod vector; mod vector;
pub use align::{Align, HorizontalAlignment, VerticalAlignment}; pub use align::{Align, CrossAlign, HorizontalAlignment, VerticalAlignment};
pub use background::Background; pub use background::Background;
pub use color::Color; pub use color::Color;
pub use font::Font; pub use font::Font;

View file

@ -1,6 +1,7 @@
//! This example showcases an interactive `Canvas` for drawing Bézier curves. //! This example showcases an interactive `Canvas` for drawing Bézier curves.
use iced::{ use iced::{
button, Align, Button, Column, Element, Length, Sandbox, Settings, Text, button, Button, Column, CrossAlign, Element, Length, Sandbox, Settings,
Text,
}; };
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -51,7 +52,7 @@ impl Sandbox for Example {
Column::new() Column::new()
.padding(20) .padding(20)
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push( .push(
Text::new("Bezier tool example") Text::new("Bezier tool example")
.width(Length::Shrink) .width(Length::Shrink)

View file

@ -1,8 +1,8 @@
use iced::canvas::{self, Cursor, Frame, Geometry, Path}; use iced::canvas::{self, Cursor, Frame, Geometry, Path};
use iced::{ use iced::{
slider, Align, Canvas, Color, Column, Element, HorizontalAlignment, Length, slider, Canvas, Color, Column, CrossAlign, Element, HorizontalAlignment,
Point, Rectangle, Row, Sandbox, Settings, Size, Slider, Text, Vector, Length, Point, Rectangle, Row, Sandbox, Settings, Size, Slider, Text,
VerticalAlignment, Vector, VerticalAlignment,
}; };
use palette::{self, Hsl, Limited, Srgb}; use palette::{self, Hsl, Limited, Srgb};
use std::marker::PhantomData; use std::marker::PhantomData;
@ -298,7 +298,7 @@ impl<C: 'static + ColorSpace + Copy> ColorPicker<C> {
Row::new() Row::new()
.spacing(10) .spacing(10)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(Text::new(C::LABEL).width(Length::Units(50))) .push(Text::new(C::LABEL).width(Length::Units(50)))
.push(slider(s1, cr1, c1, move |v| C::new(v, c2, c3))) .push(slider(s1, cr1, c1, move |v| C::new(v, c2, c3)))
.push(slider(s2, cr2, c2, move |v| C::new(c1, v, c3))) .push(slider(s2, cr2, c2, move |v| C::new(c1, v, c3)))

View file

@ -1,4 +1,6 @@
use iced::{button, Align, Button, Column, Element, Sandbox, Settings, Text}; use iced::{
button, Button, Column, CrossAlign, Element, Sandbox, Settings, Text,
};
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
Counter::run(Settings::default()) Counter::run(Settings::default())
@ -42,7 +44,7 @@ impl Sandbox for Counter {
fn view(&mut self) -> Element<Message> { fn view(&mut self) -> Element<Message> {
Column::new() Column::new()
.padding(20) .padding(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push( .push(
Button::new(&mut self.increment_button, Text::new("Increment")) Button::new(&mut self.increment_button, Text::new("Increment"))
.on_press(Message::IncrementPressed), .on_press(Message::IncrementPressed),

View file

@ -84,7 +84,7 @@ mod circle {
use circle::Circle; use circle::Circle;
use iced::{ use iced::{
slider, Align, Column, Container, Element, Length, Sandbox, Settings, slider, Column, Container, CrossAlign, Element, Length, Sandbox, Settings,
Slider, Text, Slider, Text,
}; };
@ -129,7 +129,7 @@ impl Sandbox for Example {
.padding(20) .padding(20)
.spacing(20) .spacing(20)
.max_width(500) .max_width(500)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(Circle::new(self.radius)) .push(Circle::new(self.radius))
.push(Text::new(format!("Radius: {:.2}", self.radius))) .push(Text::new(format!("Radius: {:.2}", self.radius)))
.push( .push(

View file

@ -1,6 +1,6 @@
use iced::{ use iced::{
button, executor, Align, Application, Button, Column, Command, Container, button, executor, Application, Button, Column, Command, Container,
Element, Length, ProgressBar, Settings, Subscription, Text, CrossAlign, Element, Length, ProgressBar, Settings, Subscription, Text,
}; };
mod download; mod download;
@ -83,7 +83,7 @@ impl Application for Example {
.on_press(Message::Add) .on_press(Message::Add)
.padding(10), .padding(10),
) )
.align_items(Align::End); .align_items(CrossAlign::End);
Container::new(downloads) Container::new(downloads)
.width(Length::Fill) .width(Length::Fill)
@ -182,7 +182,7 @@ impl Download {
} }
State::Finished { button } => Column::new() State::Finished { button } => Column::new()
.spacing(10) .spacing(10)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(Text::new("Download finished!")) .push(Text::new("Download finished!"))
.push( .push(
Button::new(button, Text::new("Start again")) Button::new(button, Text::new("Start again"))
@ -195,7 +195,7 @@ impl Download {
} }
State::Errored { button } => Column::new() State::Errored { button } => Column::new()
.spacing(10) .spacing(10)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(Text::new("Something went wrong :(")) .push(Text::new("Something went wrong :("))
.push( .push(
Button::new(button, Text::new("Try again")) Button::new(button, Text::new("Try again"))
@ -207,7 +207,7 @@ impl Download {
Column::new() Column::new()
.spacing(10) .spacing(10)
.padding(10) .padding(10)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(progress_bar) .push(progress_bar)
.push(control) .push(control)
.into() .into()

View file

@ -1,7 +1,7 @@
use iced::{ use iced::{
button, executor, Align, Application, Button, Checkbox, Column, Command, button, executor, Application, Button, Checkbox, Column, Command,
Container, Element, HorizontalAlignment, Length, Settings, Subscription, Container, CrossAlign, Element, HorizontalAlignment, Length, Settings,
Text, Subscription, Text,
}; };
use iced_native::{window, Event}; use iced_native::{window, Event};
@ -98,7 +98,7 @@ impl Application for Events {
.on_press(Message::Exit); .on_press(Message::Exit);
let content = Column::new() let content = Column::new()
.align_items(Align::Center) .align_items(CrossAlign::Center)
.spacing(20) .spacing(20)
.push(events) .push(events)
.push(toggle) .push(toggle)

View file

@ -11,8 +11,8 @@ use iced::slider::{self, Slider};
use iced::time; use iced::time;
use iced::window; use iced::window;
use iced::{ use iced::{
Align, Application, Checkbox, Column, Command, Container, Element, Length, Application, Checkbox, Column, Command, Container, CrossAlign, Element,
Row, Settings, Subscription, Text, Length, Row, Settings, Subscription, Text,
}; };
use preset::Preset; use preset::Preset;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
@ -844,7 +844,7 @@ impl Controls {
let speed_controls = Row::new() let speed_controls = Row::new()
.width(Length::Fill) .width(Length::Fill)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.spacing(10) .spacing(10)
.push( .push(
Slider::new( Slider::new(
@ -860,7 +860,7 @@ impl Controls {
Row::new() Row::new()
.padding(10) .padding(10)
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(playback_controls) .push(playback_controls)
.push(speed_controls) .push(speed_controls)
.push( .push(

View file

@ -161,8 +161,8 @@ mod rainbow {
} }
use iced::{ use iced::{
scrollable, Align, Column, Container, Element, Length, Sandbox, Scrollable, scrollable, Column, Container, CrossAlign, Element, Length, Sandbox,
Settings, Text, Scrollable, Settings, Text,
}; };
use rainbow::Rainbow; use rainbow::Rainbow;
@ -194,7 +194,7 @@ impl Sandbox for Example {
.padding(20) .padding(20)
.spacing(20) .spacing(20)
.max_width(500) .max_width(500)
.align_items(Align::Start) .align_items(CrossAlign::Start)
.push(Rainbow::new()) .push(Rainbow::new())
.push(Text::new( .push(Text::new(
"In this example we draw a custom widget Rainbow, using \ "In this example we draw a custom widget Rainbow, using \

View file

@ -1,6 +1,6 @@
use iced_glow::Renderer; use iced_glow::Renderer;
use iced_glutin::{ use iced_glutin::{
slider, Align, Color, Column, Command, Element, Length, Program, Row, slider, Color, Column, Command, CrossAlign, Element, Length, Program, Row,
Slider, Text, Slider, Text,
}; };
@ -79,11 +79,11 @@ impl Program for Controls {
Row::new() Row::new()
.width(Length::Fill) .width(Length::Fill)
.height(Length::Fill) .height(Length::Fill)
.align_items(Align::End) .align_items(CrossAlign::End)
.push( .push(
Column::new() Column::new()
.width(Length::Fill) .width(Length::Fill)
.align_items(Align::End) .align_items(CrossAlign::End)
.push( .push(
Column::new() Column::new()
.padding(10) .padding(10)

View file

@ -1,6 +1,6 @@
use iced_wgpu::Renderer; use iced_wgpu::Renderer;
use iced_winit::{ use iced_winit::{
slider, Align, Color, Column, Command, Element, Length, Program, Row, slider, Color, Column, Command, CrossAlign, Element, Length, Program, Row,
Slider, Text, Slider, Text,
}; };
@ -79,11 +79,11 @@ impl Program for Controls {
Row::new() Row::new()
.width(Length::Fill) .width(Length::Fill)
.height(Length::Fill) .height(Length::Fill)
.align_items(Align::End) .align_items(CrossAlign::End)
.push( .push(
Column::new() Column::new()
.width(Length::Fill) .width(Length::Fill)
.align_items(Align::End) .align_items(CrossAlign::End)
.push( .push(
Column::new() Column::new()
.padding(10) .padding(10)

View file

@ -1,7 +1,8 @@
use iced::{ use iced::{
button, executor, keyboard, pane_grid, scrollable, Align, Application, button, executor, keyboard, pane_grid, scrollable, Application, Button,
Button, Color, Column, Command, Container, Element, HorizontalAlignment, Color, Column, Command, Container, CrossAlign, Element,
Length, PaneGrid, Row, Scrollable, Settings, Subscription, Text, HorizontalAlignment, Length, PaneGrid, Row, Scrollable, Settings,
Subscription, Text,
}; };
use iced_native::{event, subscription, Event}; use iced_native::{event, subscription, Event};
@ -329,7 +330,7 @@ impl Content {
let content = Scrollable::new(scroll) let content = Scrollable::new(scroll)
.width(Length::Fill) .width(Length::Fill)
.spacing(10) .spacing(10)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(controls); .push(controls);
Container::new(content) Container::new(content)

View file

@ -1,5 +1,5 @@
use iced::{ use iced::{
pick_list, scrollable, Align, Container, Element, Length, PickList, pick_list, scrollable, Container, CrossAlign, Element, Length, PickList,
Sandbox, Scrollable, Settings, Space, Text, Sandbox, Scrollable, Settings, Space, Text,
}; };
@ -49,7 +49,7 @@ impl Sandbox for Example {
let mut content = Scrollable::new(&mut self.scroll) let mut content = Scrollable::new(&mut self.scroll)
.width(Length::Fill) .width(Length::Fill)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.spacing(10) .spacing(10)
.push(Space::with_height(Length::Units(600))) .push(Space::with_height(Length::Units(600)))
.push(Text::new("Which is your favorite language?")) .push(Text::new("Which is your favorite language?"))

View file

@ -1,6 +1,6 @@
use iced::{ use iced::{
button, futures, image, Align, Application, Button, Column, Command, button, futures, image, Application, Button, Column, Command, Container,
Container, Element, Length, Row, Settings, Text, CrossAlign, Element, Length, Row, Settings, Text,
}; };
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -85,14 +85,14 @@ impl Application for Pokedex {
Pokedex::Loaded { pokemon, search } => Column::new() Pokedex::Loaded { pokemon, search } => Column::new()
.max_width(500) .max_width(500)
.spacing(20) .spacing(20)
.align_items(Align::End) .align_items(CrossAlign::End)
.push(pokemon.view()) .push(pokemon.view())
.push( .push(
button(search, "Keep searching!").on_press(Message::Search), button(search, "Keep searching!").on_press(Message::Search),
), ),
Pokedex::Errored { try_again, .. } => Column::new() Pokedex::Errored { try_again, .. } => Column::new()
.spacing(20) .spacing(20)
.align_items(Align::End) .align_items(CrossAlign::End)
.push(Text::new("Whoops! Something went wrong...").size(40)) .push(Text::new("Whoops! Something went wrong...").size(40))
.push(button(try_again, "Try again").on_press(Message::Search)), .push(button(try_again, "Try again").on_press(Message::Search)),
}; };
@ -121,7 +121,7 @@ impl Pokemon {
fn view(&mut self) -> Element<Message> { fn view(&mut self) -> Element<Message> {
Row::new() Row::new()
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(image::Viewer::new( .push(image::Viewer::new(
&mut self.image_viewer, &mut self.image_viewer,
self.image.clone(), self.image.clone(),
@ -131,7 +131,7 @@ impl Pokemon {
.spacing(20) .spacing(20)
.push( .push(
Row::new() Row::new()
.align_items(Align::Center) .align_items(CrossAlign::Center)
.spacing(20) .spacing(20)
.push( .push(
Text::new(&self.name) Text::new(&self.name)

View file

@ -1,7 +1,7 @@
use iced::qr_code::{self, QRCode}; use iced::qr_code::{self, QRCode};
use iced::text_input::{self, TextInput}; use iced::text_input::{self, TextInput};
use iced::{ use iced::{
Align, Column, Container, Element, Length, Sandbox, Settings, Text, Column, Container, CrossAlign, Element, Length, Sandbox, Settings, Text,
}; };
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -62,7 +62,7 @@ impl Sandbox for QRGenerator {
let mut content = Column::new() let mut content = Column::new()
.width(Length::Units(700)) .width(Length::Units(700))
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(title) .push(title)
.push(input); .push(input);

View file

@ -1,6 +1,6 @@
use iced::{ use iced::{
button, executor, time, Align, Application, Button, Column, Command, button, executor, time, Application, Button, Column, Command, Container,
Container, Element, HorizontalAlignment, Length, Row, Settings, CrossAlign, Element, HorizontalAlignment, Length, Row, Settings,
Subscription, Text, Subscription, Text,
}; };
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
@ -130,7 +130,7 @@ impl Application for Stopwatch {
.push(reset_button); .push(reset_button);
let content = Column::new() let content = Column::new()
.align_items(Align::Center) .align_items(CrossAlign::Center)
.spacing(20) .spacing(20)
.push(duration) .push(duration)
.push(controls); .push(controls);

View file

@ -1,7 +1,7 @@
use iced::{ use iced::{
button, scrollable, slider, text_input, Align, Button, Checkbox, Column, button, scrollable, slider, text_input, Button, Checkbox, Column,
Container, Element, Length, ProgressBar, Radio, Row, Rule, Sandbox, Container, CrossAlign, Element, Length, ProgressBar, Radio, Row, Rule,
Scrollable, Settings, Slider, Space, Text, TextInput, Toggler, Sandbox, Scrollable, Settings, Slider, Space, Text, TextInput, Toggler,
}; };
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -132,7 +132,7 @@ impl Sandbox for Styling {
Row::new() Row::new()
.spacing(10) .spacing(10)
.height(Length::Units(100)) .height(Length::Units(100))
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(scrollable) .push(scrollable)
.push(Rule::vertical(38).style(self.theme)) .push(Rule::vertical(38).style(self.theme))
.push( .push(

View file

@ -1,6 +1,6 @@
use iced::{ use iced::{
button, scrollable, text_input, Align, Application, Button, Checkbox, button, scrollable, text_input, Application, Button, Checkbox, Column,
Column, Command, Container, Element, Font, HorizontalAlignment, Length, Command, Container, CrossAlign, Element, Font, HorizontalAlignment, Length,
Row, Scrollable, Settings, Text, TextInput, Row, Scrollable, Settings, Text, TextInput,
}; };
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -295,7 +295,7 @@ impl Task {
Row::new() Row::new()
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(checkbox) .push(checkbox)
.push( .push(
Button::new(edit_button, edit_icon()) Button::new(edit_button, edit_icon())
@ -320,7 +320,7 @@ impl Task {
Row::new() Row::new()
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push(text_input) .push(text_input)
.push( .push(
Button::new( Button::new(
@ -369,7 +369,7 @@ impl Controls {
Row::new() Row::new()
.spacing(20) .spacing(20)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push( .push(
Text::new(&format!( Text::new(&format!(
"{} {} left", "{} {} left",

View file

@ -1,7 +1,8 @@
use iced::tooltip::{self, Tooltip}; use iced::tooltip::{self, Tooltip};
use iced::{ use iced::{
button, Button, Column, Container, Element, HorizontalAlignment, Length, button, Button, Column, Container, CrossAlign, Element,
Row, Sandbox, Settings, Text, VerticalAlignment, HorizontalAlignment, Length, Row, Sandbox, Settings, Text,
VerticalAlignment,
}; };
pub fn main() { pub fn main() {
@ -60,7 +61,7 @@ impl Sandbox for Example {
]) ])
.width(Length::Fill) .width(Length::Fill)
.height(Length::Fill) .height(Length::Fill)
.align_items(iced::Align::Center) .align_items(CrossAlign::Center)
.spacing(50); .spacing(50);
let follow_cursor = tooltip( let follow_cursor = tooltip(

View file

@ -19,7 +19,7 @@
use crate::{ use crate::{
layout::{Limits, Node}, layout::{Limits, Node},
Align, Element, Padding, Point, Size, CrossAlign, Element, Padding, Point, Size,
}; };
/// The main axis of a flex layout. /// The main axis of a flex layout.
@ -65,7 +65,7 @@ pub fn resolve<Message, Renderer>(
limits: &Limits, limits: &Limits,
padding: Padding, padding: Padding,
spacing: f32, spacing: f32,
align_items: Align, align_items: CrossAlign,
items: &[Element<'_, Message, Renderer>], items: &[Element<'_, Message, Renderer>],
) -> Node ) -> Node
where where
@ -82,7 +82,7 @@ where
let mut nodes: Vec<Node> = Vec::with_capacity(items.len()); let mut nodes: Vec<Node> = Vec::with_capacity(items.len());
nodes.resize(items.len(), Node::default()); nodes.resize(items.len(), Node::default());
if align_items == Align::Fill { if align_items == CrossAlign::Fill {
let mut fill_cross = axis.cross(limits.min()); let mut fill_cross = axis.cross(limits.min());
items.iter().for_each(|child| { items.iter().for_each(|child| {
@ -116,13 +116,13 @@ where
.fill_factor(); .fill_factor();
if fill_factor == 0 { if fill_factor == 0 {
let (min_width, min_height) = if align_items == Align::Fill { let (min_width, min_height) = if align_items == CrossAlign::Fill {
axis.pack(0.0, cross) axis.pack(0.0, cross)
} else { } else {
axis.pack(0.0, 0.0) axis.pack(0.0, 0.0)
}; };
let (max_width, max_height) = if align_items == Align::Fill { let (max_width, max_height) = if align_items == CrossAlign::Fill {
axis.pack(available, cross) axis.pack(available, cross)
} else { } else {
axis.pack(available, max_cross) axis.pack(available, max_cross)
@ -138,7 +138,7 @@ where
available -= axis.main(size); available -= axis.main(size);
if align_items != Align::Fill { if align_items != CrossAlign::Fill {
cross = cross.max(axis.cross(size)); cross = cross.max(axis.cross(size));
} }
@ -165,13 +165,13 @@ where
max_main max_main
}; };
let (min_width, min_height) = if align_items == Align::Fill { let (min_width, min_height) = if align_items == CrossAlign::Fill {
axis.pack(min_main, cross) axis.pack(min_main, cross)
} else { } else {
axis.pack(min_main, axis.cross(limits.min())) axis.pack(min_main, axis.cross(limits.min()))
}; };
let (max_width, max_height) = if align_items == Align::Fill { let (max_width, max_height) = if align_items == CrossAlign::Fill {
axis.pack(max_main, cross) axis.pack(max_main, cross)
} else { } else {
axis.pack(max_main, max_cross) axis.pack(max_main, max_cross)
@ -184,7 +184,7 @@ where
let layout = child.layout(renderer, &child_limits); let layout = child.layout(renderer, &child_limits);
if align_items != Align::Fill { if align_items != CrossAlign::Fill {
cross = cross.max(axis.cross(layout.size())); cross = cross.max(axis.cross(layout.size()));
} }
@ -206,10 +206,18 @@ where
match axis { match axis {
Axis::Horizontal => { Axis::Horizontal => {
node.align(Align::Start, align_items, Size::new(0.0, cross)); node.align(
CrossAlign::Start,
align_items,
Size::new(0.0, cross),
);
} }
Axis::Vertical => { Axis::Vertical => {
node.align(align_items, Align::Start, Size::new(cross, 0.0)); node.align(
align_items,
CrossAlign::Start,
Size::new(cross, 0.0),
);
} }
} }

View file

@ -1,4 +1,4 @@
use crate::{Align, Point, Rectangle, Size}; use crate::{CrossAlign, Point, Rectangle, Size};
/// The bounds of an element and its children. /// The bounds of an element and its children.
#[derive(Debug, Clone, Default)] #[derive(Debug, Clone, Default)]
@ -44,32 +44,32 @@ impl Node {
/// Aligns the [`Node`] in the given space. /// Aligns the [`Node`] in the given space.
pub fn align( pub fn align(
&mut self, &mut self,
horizontal_alignment: Align, horizontal_alignment: CrossAlign,
vertical_alignment: Align, vertical_alignment: CrossAlign,
space: Size, space: Size,
) { ) {
match horizontal_alignment { match horizontal_alignment {
Align::Start => {} CrossAlign::Start => {}
Align::Center => { CrossAlign::Center => {
self.bounds.x += (space.width - self.bounds.width) / 2.0; self.bounds.x += (space.width - self.bounds.width) / 2.0;
} }
Align::End => { CrossAlign::End => {
self.bounds.x += space.width - self.bounds.width; self.bounds.x += space.width - self.bounds.width;
} }
Align::Fill => { CrossAlign::Fill => {
self.bounds.width = space.width; self.bounds.width = space.width;
} }
} }
match vertical_alignment { match vertical_alignment {
Align::Start => {} CrossAlign::Start => {}
Align::Center => { CrossAlign::Center => {
self.bounds.y += (space.height - self.bounds.height) / 2.0; self.bounds.y += (space.height - self.bounds.height) / 2.0;
} }
Align::End => { CrossAlign::End => {
self.bounds.y += space.height - self.bounds.height; self.bounds.y += space.height - self.bounds.height;
} }
Align::Fill => { CrossAlign::Fill => {
self.bounds.height = space.height; self.bounds.height = space.height;
} }
} }

View file

@ -62,8 +62,8 @@ mod debug;
mod debug; mod debug;
pub use iced_core::{ pub use iced_core::{
Align, Background, Color, Font, HorizontalAlignment, Length, Padding, Align, Background, Color, CrossAlign, Font, HorizontalAlignment, Length,
Point, Rectangle, Size, Vector, VerticalAlignment, Padding, Point, Rectangle, Size, Vector, VerticalAlignment,
}; };
pub use iced_futures::{executor, futures}; pub use iced_futures::{executor, futures};

View file

@ -8,7 +8,7 @@ use crate::row;
use crate::text; use crate::text;
use crate::touch; use crate::touch;
use crate::{ use crate::{
Align, Clipboard, Color, Element, Hasher, HorizontalAlignment, Layout, Clipboard, Color, CrossAlign, Element, Hasher, HorizontalAlignment, Layout,
Length, Point, Rectangle, Row, Text, VerticalAlignment, Widget, Length, Point, Rectangle, Row, Text, VerticalAlignment, Widget,
}; };
@ -138,7 +138,7 @@ where
Row::<(), Renderer>::new() Row::<(), Renderer>::new()
.width(self.width) .width(self.width)
.spacing(self.spacing) .spacing(self.spacing)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push( .push(
Row::new() Row::new()
.width(Length::Units(self.size)) .width(Length::Units(self.size))

View file

@ -5,7 +5,7 @@ use crate::event::{self, Event};
use crate::layout; use crate::layout;
use crate::overlay; use crate::overlay;
use crate::{ use crate::{
Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point, Clipboard, CrossAlign, Element, Hasher, Layout, Length, Padding, Point,
Rectangle, Widget, Rectangle, Widget,
}; };
@ -20,7 +20,7 @@ pub struct Column<'a, Message, Renderer> {
height: Length, height: Length,
max_width: u32, max_width: u32,
max_height: u32, max_height: u32,
align_items: Align, align_items: CrossAlign,
children: Vec<Element<'a, Message, Renderer>>, children: Vec<Element<'a, Message, Renderer>>,
} }
@ -41,7 +41,7 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> {
height: Length::Shrink, height: Length::Shrink,
max_width: u32::MAX, max_width: u32::MAX,
max_height: u32::MAX, max_height: u32::MAX,
align_items: Align::Start, align_items: CrossAlign::Start,
children, children,
} }
} }
@ -87,7 +87,7 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> {
} }
/// Sets the horizontal alignment of the contents of the [`Column`] . /// Sets the horizontal alignment of the contents of the [`Column`] .
pub fn align_items(mut self, align: Align) -> Self { pub fn align_items(mut self, align: CrossAlign) -> Self {
self.align_items = align; self.align_items = align;
self self
} }

View file

@ -5,8 +5,8 @@ use crate::event::{self, Event};
use crate::layout; use crate::layout;
use crate::overlay; use crate::overlay;
use crate::{ use crate::{
Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point, Align, Clipboard, CrossAlign, Element, Hasher, Layout, Length, Padding,
Rectangle, Widget, Point, Rectangle, Widget,
}; };
use std::u32; use std::u32;
@ -143,7 +143,11 @@ where
self.padding.left.into(), self.padding.left.into(),
self.padding.top.into(), self.padding.top.into(),
)); ));
content.align(self.horizontal_alignment, self.vertical_alignment, size); content.align(
CrossAlign::from(self.horizontal_alignment),
CrossAlign::from(self.vertical_alignment),
size,
);
layout::Node::with_children(size.pad(self.padding), vec![content]) layout::Node::with_children(size.pad(self.padding), vec![content])
} }

View file

@ -8,8 +8,8 @@ use crate::text;
use crate::touch; use crate::touch;
use crate::{layout, Color}; use crate::{layout, Color};
use crate::{ use crate::{
Align, Clipboard, Element, Hasher, HorizontalAlignment, Layout, Length, Clipboard, CrossAlign, Element, Hasher, HorizontalAlignment, Layout,
Point, Rectangle, Row, Text, VerticalAlignment, Widget, Length, Point, Rectangle, Row, Text, VerticalAlignment, Widget,
}; };
/// A circular button representing a choice. /// A circular button representing a choice.
@ -153,7 +153,7 @@ where
Row::<(), Renderer>::new() Row::<(), Renderer>::new()
.width(self.width) .width(self.width)
.spacing(self.spacing) .spacing(self.spacing)
.align_items(Align::Center) .align_items(CrossAlign::Center)
.push( .push(
Row::new() Row::new()
.width(Length::Units(self.size)) .width(Length::Units(self.size))

View file

@ -3,7 +3,7 @@ use crate::event::{self, Event};
use crate::layout; use crate::layout;
use crate::overlay; use crate::overlay;
use crate::{ use crate::{
Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point, Clipboard, CrossAlign, Element, Hasher, Layout, Length, Padding, Point,
Rectangle, Widget, Rectangle, Widget,
}; };
@ -19,7 +19,7 @@ pub struct Row<'a, Message, Renderer> {
height: Length, height: Length,
max_width: u32, max_width: u32,
max_height: u32, max_height: u32,
align_items: Align, align_items: CrossAlign,
children: Vec<Element<'a, Message, Renderer>>, children: Vec<Element<'a, Message, Renderer>>,
} }
@ -40,7 +40,7 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> {
height: Length::Shrink, height: Length::Shrink,
max_width: u32::MAX, max_width: u32::MAX,
max_height: u32::MAX, max_height: u32::MAX,
align_items: Align::Start, align_items: CrossAlign::Start,
children, children,
} }
} }
@ -86,7 +86,7 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> {
} }
/// Sets the vertical alignment of the contents of the [`Row`] . /// Sets the vertical alignment of the contents of the [`Row`] .
pub fn align_items(mut self, align: Align) -> Self { pub fn align_items(mut self, align: CrossAlign) -> Self {
self.align_items = align; self.align_items = align;
self self
} }

View file

@ -6,8 +6,8 @@ use crate::mouse;
use crate::overlay; use crate::overlay;
use crate::touch; use crate::touch;
use crate::{ use crate::{
Align, Clipboard, Column, Element, Hasher, Layout, Length, Padding, Point, Clipboard, Column, CrossAlign, Element, Hasher, Layout, Length, Padding,
Rectangle, Size, Vector, Widget, Point, Rectangle, Size, Vector, Widget,
}; };
use std::{f32, hash::Hash, u32}; use std::{f32, hash::Hash, u32};
@ -84,7 +84,7 @@ impl<'a, Message, Renderer: self::Renderer> Scrollable<'a, Message, Renderer> {
} }
/// Sets the horizontal alignment of the contents of the [`Scrollable`] . /// Sets the horizontal alignment of the contents of the [`Scrollable`] .
pub fn align_items(mut self, align_items: Align) -> Self { pub fn align_items(mut self, align_items: CrossAlign) -> Self {
self.content = self.content.align_items(align_items); self.content = self.content.align_items(align_items);
self self
} }

View file

@ -2,8 +2,8 @@
use std::hash::Hash; use std::hash::Hash;
use crate::{ use crate::{
event, layout, mouse, row, text, Align, Clipboard, Element, Event, Hasher, event, layout, mouse, row, text, Clipboard, CrossAlign, Element, Event,
HorizontalAlignment, Layout, Length, Point, Rectangle, Row, Text, Hasher, HorizontalAlignment, Layout, Length, Point, Rectangle, Row, Text,
VerticalAlignment, Widget, VerticalAlignment, Widget,
}; };
@ -132,7 +132,7 @@ where
let mut row = Row::<(), Renderer>::new() let mut row = Row::<(), Renderer>::new()
.width(self.width) .width(self.width)
.spacing(self.spacing) .spacing(self.spacing)
.align_items(Align::Center); .align_items(CrossAlign::Center);
if let Some(label) = &self.label { if let Some(label) = &self.label {
row = row.push( row = row.push(

View file

@ -246,6 +246,7 @@ pub use sandbox::Sandbox;
pub use settings::Settings; pub use settings::Settings;
pub use runtime::{ pub use runtime::{
futures, Align, Background, Color, Command, Font, HorizontalAlignment, futures, Align, Background, Color, Command, CrossAlign, Font,
Length, Point, Rectangle, Size, Subscription, Vector, VerticalAlignment, HorizontalAlignment, Length, Point, Rectangle, Size, Subscription, Vector,
VerticalAlignment,
}; };

View file

@ -1,5 +1,5 @@
//! Style your widgets. //! Style your widgets.
use crate::{bumpalo, Align, Background, Color, Length, Padding}; use crate::{bumpalo, Align, Background, Color, CrossAlign, Length, Padding};
use std::collections::BTreeMap; use std::collections::BTreeMap;
@ -201,7 +201,16 @@ pub fn align(align: Align) -> &'static str {
Align::Start => "flex-start", Align::Start => "flex-start",
Align::Center => "center", Align::Center => "center",
Align::End => "flex-end", Align::End => "flex-end",
Align::Fill => "stretch", }
}
/// Returns the style value for the given [`CrossAlign`].
pub fn cross_align(align: CrossAlign) -> &'static str {
match align {
CrossAlign::Start => "flex-start",
CrossAlign::Center => "center",
CrossAlign::End => "flex-end",
CrossAlign::Fill => "stretch",
} }
} }

View file

@ -74,8 +74,9 @@ pub use dodrio;
pub use element::Element; pub use element::Element;
pub use hasher::Hasher; pub use hasher::Hasher;
pub use iced_core::{ pub use iced_core::{
keyboard, mouse, Align, Background, Color, Font, HorizontalAlignment, keyboard, mouse, Align, Background, Color, CrossAlign, Font,
Length, Padding, Point, Rectangle, Size, Vector, VerticalAlignment, HorizontalAlignment, Length, Padding, Point, Rectangle, Size, Vector,
VerticalAlignment,
}; };
pub use iced_futures::{executor, futures}; pub use iced_futures::{executor, futures};
pub use subscription::Subscription; pub use subscription::Subscription;