Ask for explicit Length in center_* methods

This commit is contained in:
Héctor Ramón Jiménez 2024-05-13 17:56:02 +02:00
parent b30d34f728
commit 05f69f495e
No known key found for this signature in database
GPG key ID: 4C07CEC81AFA161F
13 changed files with 40 additions and 41 deletions

View file

@ -277,7 +277,7 @@ fn action<'a, Message: Clone + 'a>(
label: &'a str, label: &'a str,
on_press: Option<Message>, on_press: Option<Message>,
) -> Element<'a, Message> { ) -> Element<'a, Message> {
let action = button(container(content).center_x().width(30)); let action = button(container(content).center_x(30));
if let Some(on_press) = on_press { if let Some(on_press) = on_press {
tooltip( tooltip(

View file

@ -153,7 +153,7 @@ mod rainbow {
} }
use iced::widget::{column, container, scrollable}; use iced::widget::{column, container, scrollable};
use iced::Element; use iced::{Element, Length};
use rainbow::rainbow; use rainbow::rainbow;
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -176,7 +176,7 @@ fn view(_state: &()) -> Element<'_, ()> {
.spacing(20) .spacing(20)
.max_width(500); .max_width(500);
let scrollable = scrollable(container(content).center_x()); let scrollable = scrollable(container(content).center_x(Length::Fill));
container(scrollable).center_y().into() container(scrollable).center_y(Length::Fill).into()
} }

View file

@ -251,7 +251,7 @@ fn application<'a>() -> Element<'a, Message> {
.align_items(Alignment::Center), .align_items(Alignment::Center),
) )
.style(container::rounded_box) .style(container::rounded_box)
.center_y(); .center_y(Length::Fill);
let content = container( let content = container(
scrollable( scrollable(

View file

@ -207,6 +207,6 @@ impl Window {
.align_items(Alignment::Center), .align_items(Alignment::Center),
); );
container(content).center_x().width(200).into() container(content).center_x(200).into()
} }
} }

View file

@ -291,7 +291,10 @@ fn view_content<'a>(
.spacing(10) .spacing(10)
.align_items(Alignment::Center); .align_items(Alignment::Center);
container(scrollable(content)).center_y().padding(5).into() container(scrollable(content))
.center_y(Length::Fill)
.padding(5)
.into()
} }
fn view_controls<'a>( fn view_controls<'a>(

View file

@ -123,10 +123,9 @@ impl Example {
}; };
let image = container(image) let image = container(image)
.center_y() .center_y(Length::FillPortion(2))
.padding(10) .padding(10)
.style(container::rounded_box) .style(container::rounded_box);
.width(Length::FillPortion(2));
let crop_origin_controls = row![ let crop_origin_controls = row![
text("X:") text("X:")
@ -211,7 +210,7 @@ impl Example {
.spacing(40) .spacing(40)
}; };
let side_content = container(controls).center_y(); let side_content = container(controls).center_y(Length::Fill);
let content = row![side_content, image] let content = row![side_content, image]
.spacing(10) .spacing(10)

View file

@ -1,5 +1,5 @@
use iced::widget::{center, column, container, slider, text, vertical_slider}; use iced::widget::{center, column, container, slider, text, vertical_slider};
use iced::Element; use iced::{Element, Length};
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
iced::run("Slider - Iced", Slider::update, Slider::view) iced::run("Slider - Iced", Slider::update, Slider::view)
@ -56,9 +56,9 @@ impl Slider {
center( center(
column![ column![
container(v_slider).center_x(), container(v_slider).center_x(Length::Fill),
container(h_slider).center_x(), container(h_slider).center_x(Length::Fill),
container(text).center_x() container(text).center_x(Length::Fill)
] ]
.spacing(25), .spacing(25),
) )

View file

@ -45,7 +45,7 @@ impl Tiger {
.on_toggle(Message::ToggleColorFilter); .on_toggle(Message::ToggleColorFilter);
center( center(
column![svg, container(apply_color_filter).center_x()] column![svg, container(apply_color_filter).center_x(Length::Fill)]
.spacing(20) .spacing(20)
.height(Length::Fill), .height(Length::Fill),
) )

View file

@ -1,4 +1,4 @@
use iced::widget::{button, column, container, text}; use iced::widget::{button, center, column, text};
use iced::{system, Command, Element}; use iced::{system, Command, Element};
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -136,6 +136,6 @@ impl Example {
} }
}; };
container(content).center().into() center(content).into()
} }
} }

View file

@ -238,7 +238,10 @@ impl Todos {
.spacing(20) .spacing(20)
.max_width(800); .max_width(800);
scrollable(container(content).center_x().padding(40)).into() scrollable(
container(content).center_x(Length::Fill).padding(40),
)
.into()
} }
} }
} }

View file

@ -76,10 +76,10 @@ impl Tour {
} else { } else {
content content
}) })
.center_x(), .center_x(Length::Fill),
); );
container(scrollable).center_y().into() container(scrollable).center_y(Length::Fill).into()
} }
} }
@ -669,7 +669,7 @@ fn ferris<'a>(
.filter_method(filter_method) .filter_method(filter_method)
.width(width), .width(width),
) )
.center_x() .center_x(Length::Fill)
} }
fn padded_button<Message: Clone>(label: &str) -> Button<'_, Message> { fn padded_button<Message: Clone>(label: &str) -> Button<'_, Message> {

View file

@ -122,9 +122,6 @@ where
/// Sets the [`Container`] to fill all the available space. /// Sets the [`Container`] to fill all the available space.
/// ///
/// This can be useful to quickly position content when chained with
/// alignment functions—like [`center`].
///
/// Calling this method is equivalent to chaining [`fill_x`] and /// Calling this method is equivalent to chaining [`fill_x`] and
/// [`fill_y`]. /// [`fill_y`].
/// ///
@ -159,20 +156,14 @@ where
self self
} }
/// Sets the [`Container`] to fill the available space in the horizontal axis /// Sets the width of the [`Container`] and centers its contents horizontally.
/// and centers its contents there. pub fn center_x(self, width: impl Into<Length>) -> Self {
pub fn center_x(mut self) -> Self { self.width(width).align_x(alignment::Horizontal::Center)
self.width = Length::Fill;
self.horizontal_alignment = alignment::Horizontal::Center;
self
} }
/// Sets the [`Container`] to fill the available space in the vertical axis /// Sets the height of the [`Container`] and centers its contents vertically.
/// and centers its contents there. pub fn center_y(self, height: impl Into<Length>) -> Self {
pub fn center_y(mut self) -> Self { self.height(height).align_y(alignment::Vertical::Center)
self.height = Length::Fill;
self.vertical_alignment = alignment::Vertical::Center;
self
} }
/// Centers the contents in both the horizontal and vertical axes of the /// Centers the contents in both the horizontal and vertical axes of the
@ -182,8 +173,10 @@ where
/// ///
/// [`center_x`]: Self::center_x /// [`center_x`]: Self::center_x
/// [`center_y`]: Self::center_y /// [`center_y`]: Self::center_y
pub fn center(self) -> Self { pub fn center(self, length: impl Into<Length>) -> Self {
self.center_x().center_y() let length = length.into();
self.center_x(length).center_y(length)
} }
/// Sets whether the contents of the [`Container`] should be clipped on /// Sets whether the contents of the [`Container`] should be clipped on

View file

@ -83,9 +83,10 @@ where
/// ///
/// This is equivalent to: /// This is equivalent to:
/// ```rust,no_run /// ```rust,no_run
/// # use iced_widget::core::Length;
/// # use iced_widget::Container; /// # use iced_widget::Container;
/// # fn container<A>(x: A) -> Container<'static, ()> { unreachable!() } /// # fn container<A>(x: A) -> Container<'static, ()> { unreachable!() }
/// let centered = container("Centered!").center(); /// let centered = container("Centered!").center(Length::Fill);
/// ``` /// ```
/// ///
/// [`Container`]: crate::Container /// [`Container`]: crate::Container
@ -96,7 +97,7 @@ where
Theme: container::Catalog + 'a, Theme: container::Catalog + 'a,
Renderer: core::Renderer, Renderer: core::Renderer,
{ {
container(content).fill().center() container(content).center(Length::Fill)
} }
/// Creates a new [`Column`] with the given children. /// Creates a new [`Column`] with the given children.