Replace width and height with Widget::size

This commit is contained in:
Héctor Ramón Jiménez 2024-01-05 17:46:33 +01:00
parent 22226394f7
commit d278bfd21d
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
42 changed files with 212 additions and 275 deletions

View file

@ -6,7 +6,7 @@ use crate::renderer;
use crate::widget; use crate::widget;
use crate::widget::tree::{self, Tree}; use crate::widget::tree::{self, Tree};
use crate::{ use crate::{
Clipboard, Color, Layout, Length, Rectangle, Shell, Vector, Widget, Clipboard, Color, Layout, Length, Rectangle, Shell, Size, Vector, Widget,
}; };
use std::any::Any; use std::any::Any;
@ -296,12 +296,8 @@ where
self.widget.diff(tree); self.widget.diff(tree);
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.widget.width() self.widget.size()
}
fn height(&self) -> Length {
self.widget.height()
} }
fn layout( fn layout(
@ -466,12 +462,8 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where where
Renderer: crate::Renderer, Renderer: crate::Renderer,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.element.widget.width() self.element.widget.size()
}
fn height(&self) -> Length {
self.element.widget.height()
} }
fn tag(&self) -> tree::Tag { fn tag(&self) -> tree::Tag {

View file

@ -86,10 +86,11 @@ where
nodes.resize(items.len(), Node::default()); nodes.resize(items.len(), Node::default());
for (i, (child, tree)) in items.iter().zip(trees.iter_mut()).enumerate() { for (i, (child, tree)) in items.iter().zip(trees.iter_mut()).enumerate() {
let (fill_main_factor, fill_cross_factor) = axis.pack( let (fill_main_factor, fill_cross_factor) = {
child.as_widget().width().fill_factor(), let size = child.as_widget().size();
child.as_widget().height().fill_factor(),
); axis.pack(size.width.fill_factor(), size.height.fill_factor())
};
if fill_main_factor == 0 { if fill_main_factor == 0 {
if fill_cross_factor == 0 { if fill_cross_factor == 0 {
@ -124,10 +125,11 @@ where
}; };
for (i, (child, tree)) in items.iter().zip(trees.iter_mut()).enumerate() { for (i, (child, tree)) in items.iter().zip(trees.iter_mut()).enumerate() {
let (fill_main_factor, fill_cross_factor) = axis.pack( let (fill_main_factor, fill_cross_factor) = {
child.as_widget().width().fill_factor(), let size = child.as_widget().size();
child.as_widget().height().fill_factor(),
); axis.pack(size.width.fill_factor(), size.height.fill_factor())
};
if fill_main_factor == 0 && fill_cross_factor != 0 { if fill_main_factor == 0 && fill_cross_factor != 0 {
let (max_width, max_height) = axis.pack(available, intrinsic_cross); let (max_width, max_height) = axis.pack(available, intrinsic_cross);
@ -157,10 +159,11 @@ where
}; };
for (i, (child, tree)) in items.iter().zip(trees).enumerate() { for (i, (child, tree)) in items.iter().zip(trees).enumerate() {
let (fill_main_factor, fill_cross_factor) = axis.pack( let (fill_main_factor, fill_cross_factor) = {
child.as_widget().width().fill_factor(), let size = child.as_widget().size();
child.as_widget().height().fill_factor(),
); axis.pack(size.width.fill_factor(), size.height.fill_factor())
};
if fill_main_factor != 0 { if fill_main_factor != 0 {
let max_main = if fill_main_factor == 0 { let max_main = if fill_main_factor == 0 {

View file

@ -43,18 +43,15 @@ pub trait Widget<Message, Renderer>
where where
Renderer: crate::Renderer, Renderer: crate::Renderer,
{ {
/// Returns the width of the [`Widget`]. /// Returns the [`Size`] of the [`Widget`] in lengths.
fn width(&self) -> Length; fn size(&self) -> Size<Length>;
/// Returns the height of the [`Widget`].
fn height(&self) -> Length;
/// Returns a [`Size`] hint for laying out the [`Widget`]. /// Returns a [`Size`] hint for laying out the [`Widget`].
/// ///
/// This hint may be used by some widget containers to adjust their sizing strategy /// This hint may be used by some widget containers to adjust their sizing strategy
/// during construction. /// during construction.
fn size_hint(&self) -> Size<Length> { fn size_hint(&self) -> Size<Length> {
Size::new(self.width(), self.height()) self.size()
} }
/// Returns the [`layout::Node`] of the [`Widget`]. /// Returns the [`layout::Node`] of the [`Widget`].

View file

@ -5,7 +5,9 @@ use crate::mouse;
use crate::renderer; use crate::renderer;
use crate::text::{self, Paragraph}; use crate::text::{self, Paragraph};
use crate::widget::tree::{self, Tree}; use crate::widget::tree::{self, Tree};
use crate::{Color, Element, Layout, Length, Pixels, Point, Rectangle, Widget}; use crate::{
Color, Element, Layout, Length, Pixels, Point, Rectangle, Size, Widget,
};
use std::borrow::Cow; use std::borrow::Cow;
@ -134,12 +136,11 @@ where
tree::State::new(State(Renderer::Paragraph::default())) tree::State::new(State(Renderer::Paragraph::default()))
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -26,12 +26,11 @@ mod quad {
where where
Renderer: renderer::Renderer, Renderer: renderer::Renderer,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Shrink Size {
} width: Length::Shrink,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -33,12 +33,11 @@ mod circle {
where where
Renderer: renderer::Renderer, Renderer: renderer::Renderer,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Shrink Size {
} width: Length::Shrink,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -16,12 +16,11 @@ mod rainbow {
} }
impl<Message> Widget<Message, Renderer> for Rainbow { impl<Message> Widget<Message, Renderer> for Rainbow {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Fill Size {
} width: Length::Fill,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -244,12 +244,11 @@ where
tree::State::new(State::default()) tree::State::new(State::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Fixed(self.size) Size {
} width: Length::Fixed(self.size),
height: Length::Fixed(self.size),
fn height(&self) -> Length { }
Length::Fixed(self.size)
} }
fn layout( fn layout(

View file

@ -165,12 +165,11 @@ where
tree::State::new(State::default()) tree::State::new(State::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -281,12 +281,8 @@ mod modal {
tree.diff_children(&[&self.base, &self.modal]); tree.diff_children(&[&self.base, &self.modal]);
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.base.as_widget().width() self.base.as_widget().size()
}
fn height(&self) -> Length {
self.base.as_widget().height()
} }
fn layout( fn layout(

View file

@ -313,12 +313,8 @@ mod toast {
} }
impl<'a, Message> Widget<Message, Renderer> for Manager<'a, Message> { impl<'a, Message> Widget<Message, Renderer> for Manager<'a, Message> {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.content.as_widget().width() self.content.as_widget().size()
}
fn height(&self) -> Length {
self.content.as_widget().height()
} }
fn layout( fn layout(

View file

@ -11,7 +11,7 @@ use crate::core::widget::tree::{self, Tree};
use crate::core::widget::Operation; use crate::core::widget::Operation;
use crate::core::{ use crate::core::{
Background, Clipboard, Color, Element, Layout, Length, Padding, Point, Background, Clipboard, Color, Element, Layout, Length, Padding, Point,
Rectangle, Shell, Vector, Widget, Rectangle, Shell, Size, Vector, Widget,
}; };
pub use iced_style::button::{Appearance, StyleSheet}; pub use iced_style::button::{Appearance, StyleSheet};
@ -149,12 +149,11 @@ where
tree.diff_children(std::slice::from_ref(&self.content)); tree.diff_children(std::slice::from_ref(&self.content));
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -14,8 +14,9 @@ use crate::core::layout::{self, Layout};
use crate::core::mouse; use crate::core::mouse;
use crate::core::renderer; use crate::core::renderer;
use crate::core::widget::tree::{self, Tree}; use crate::core::widget::tree::{self, Tree};
use crate::core::{Clipboard, Element, Shell, Widget}; use crate::core::{
use crate::core::{Length, Rectangle, Size, Vector}; Clipboard, Element, Length, Rectangle, Shell, Size, Vector, Widget,
};
use crate::graphics::geometry; use crate::graphics::geometry;
use std::marker::PhantomData; use std::marker::PhantomData;
@ -119,12 +120,11 @@ where
tree::State::new(P::State::default()) tree::State::new(P::State::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -174,12 +174,11 @@ where
tree::State::new(widget::text::State::<Renderer::Paragraph>::default()) tree::State::new(widget::text::State::<Renderer::Paragraph>::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -7,7 +7,7 @@ use crate::core::renderer;
use crate::core::widget::{Operation, Tree}; use crate::core::widget::{Operation, Tree};
use crate::core::{ use crate::core::{
Alignment, Clipboard, Element, Layout, Length, Padding, Pixels, Rectangle, Alignment, Clipboard, Element, Layout, Length, Padding, Pixels, Rectangle,
Shell, Widget, Shell, Size, Widget,
}; };
/// A container that distributes its contents vertically. /// A container that distributes its contents vertically.
@ -129,12 +129,11 @@ where
tree.diff_children(&self.children); tree.diff_children(&self.children);
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -8,7 +8,9 @@ use crate::core::renderer;
use crate::core::text; use crate::core::text;
use crate::core::time::Instant; use crate::core::time::Instant;
use crate::core::widget::{self, Widget}; use crate::core::widget::{self, Widget};
use crate::core::{Clipboard, Element, Length, Padding, Rectangle, Shell}; use crate::core::{
Clipboard, Element, Length, Padding, Rectangle, Shell, Size,
};
use crate::overlay::menu; use crate::overlay::menu;
use crate::text::LineHeight; use crate::text::LineHeight;
use crate::{container, scrollable, text_input, TextInput}; use crate::{container, scrollable, text_input, TextInput};
@ -297,12 +299,8 @@ where
+ scrollable::StyleSheet + scrollable::StyleSheet
+ menu::StyleSheet, + menu::StyleSheet,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Widget::<TextInputEvent, Renderer>::width(&self.text_input) Widget::<TextInputEvent, Renderer>::size(&self.text_input)
}
fn height(&self) -> Length {
Widget::<TextInputEvent, Renderer>::height(&self.text_input)
} }
fn layout( fn layout(

View file

@ -163,12 +163,11 @@ where
self.content.as_widget().diff(tree); self.content.as_widget().diff(tree);
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -164,12 +164,11 @@ where
Renderer: image::Renderer<Handle = Handle>, Renderer: image::Renderer<Handle = Handle>,
Handle: Clone + Hash, Handle: Clone + Hash,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -97,12 +97,11 @@ where
tree::State::new(State::new()) tree::State::new(State::new())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -8,7 +8,7 @@ use crate::core::widget::tree::{self, Tree};
use crate::core::widget::Operation; use crate::core::widget::Operation;
use crate::core::{ use crate::core::{
Alignment, Clipboard, Element, Layout, Length, Padding, Pixels, Rectangle, Alignment, Clipboard, Element, Layout, Length, Padding, Pixels, Rectangle,
Shell, Widget, Shell, Size, Widget,
}; };
/// A container that distributes its contents vertically. /// A container that distributes its contents vertically.
@ -173,12 +173,11 @@ where
} }
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -142,12 +142,8 @@ where
} }
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.with_element(|element| element.as_widget().width()) self.with_element(|element| element.as_widget().size())
}
fn height(&self) -> Length {
self.with_element(|element| element.as_widget().height())
} }
fn size_hint(&self) -> Size<Length> { fn size_hint(&self) -> Size<Length> {

View file

@ -244,12 +244,8 @@ where
self.rebuild_element_if_necessary(); self.rebuild_element_if_necessary();
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.with_element(|element| element.as_widget().width()) self.with_element(|element| element.as_widget().size())
}
fn height(&self) -> Length {
self.with_element(|element| element.as_widget().height())
} }
fn size_hint(&self) -> Size<Length> { fn size_hint(&self) -> Size<Length> {

View file

@ -135,12 +135,11 @@ where
}) })
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Fill Size {
} width: Length::Fill,
height: Length::Fill,
fn height(&self) -> Length { }
Length::Fill
} }
fn layout( fn layout(

View file

@ -8,7 +8,7 @@ use crate::core::renderer;
use crate::core::touch; use crate::core::touch;
use crate::core::widget::{tree, Operation, Tree}; use crate::core::widget::{tree, Operation, Tree};
use crate::core::{ use crate::core::{
Clipboard, Element, Layout, Length, Rectangle, Shell, Widget, Clipboard, Element, Layout, Length, Rectangle, Shell, Size, Widget,
}; };
/// Emit messages on mouse events. /// Emit messages on mouse events.
@ -110,12 +110,8 @@ where
tree.diff_children(std::slice::from_ref(&self.content)); tree.diff_children(std::slice::from_ref(&self.content));
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.content.as_widget().width() self.content.as_widget().size()
}
fn height(&self) -> Length {
self.content.as_widget().height()
} }
fn layout( fn layout(

View file

@ -342,12 +342,11 @@ where
Renderer: text::Renderer, Renderer: text::Renderer,
Renderer::Theme: StyleSheet, Renderer::Theme: StyleSheet,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Fill Size {
} width: Length::Fill,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -265,12 +265,11 @@ where
} }
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -164,12 +164,11 @@ where
tree::State::new(State::<Renderer::Paragraph>::new()) tree::State::new(State::<Renderer::Paragraph>::new())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -85,12 +85,11 @@ where
Renderer: crate::core::Renderer, Renderer: crate::core::Renderer,
Renderer::Theme: StyleSheet, Renderer::Theme: StyleSheet,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height.unwrap_or(Length::Fixed(Self::DEFAULT_HEIGHT)),
fn height(&self) -> Length { }
self.height.unwrap_or(Length::Fixed(Self::DEFAULT_HEIGHT))
} }
fn layout( fn layout(

View file

@ -50,12 +50,11 @@ impl<'a> QRCode<'a> {
} }
impl<'a, Message, Theme> Widget<Message, Renderer<Theme>> for QRCode<'a> { impl<'a, Message, Theme> Widget<Message, Renderer<Theme>> for QRCode<'a> {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Shrink Size {
} width: Length::Shrink,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -201,12 +201,11 @@ where
tree::State::new(widget::text::State::<Renderer::Paragraph>::default()) tree::State::new(widget::text::State::<Renderer::Paragraph>::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -7,7 +7,7 @@ use crate::core::renderer;
use crate::core::widget::{Operation, Tree}; use crate::core::widget::{Operation, Tree};
use crate::core::{ use crate::core::{
Alignment, Clipboard, Element, Length, Padding, Pixels, Rectangle, Shell, Alignment, Clipboard, Element, Length, Padding, Pixels, Rectangle, Shell,
Widget, Size, Widget,
}; };
/// A container that distributes its contents horizontally. /// A container that distributes its contents horizontally.
@ -123,12 +123,11 @@ where
tree.diff_children(&self.children); tree.diff_children(&self.children);
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -62,12 +62,11 @@ where
Renderer: crate::core::Renderer, Renderer: crate::core::Renderer,
Renderer::Theme: StyleSheet, Renderer::Theme: StyleSheet,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -220,12 +220,11 @@ where
tree.diff_children(std::slice::from_ref(&self.content)); tree.diff_children(std::slice::from_ref(&self.content));
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -70,12 +70,11 @@ where
tree::State::new(P::State::default()) tree::State::new(P::State::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -159,12 +159,11 @@ where
tree::State::new(State::new()) tree::State::new(State::new())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -45,12 +45,11 @@ impl<Message, Renderer> Widget<Message, Renderer> for Space
where where
Renderer: core::Renderer, Renderer: core::Renderer,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -96,12 +96,11 @@ where
Renderer: svg::Renderer, Renderer: svg::Renderer,
Renderer::Theme: iced_style::svg::StyleSheet, Renderer::Theme: iced_style::svg::StyleSheet,
{ {
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -9,7 +9,7 @@ use crate::core::text::highlighter::{self, Highlighter};
use crate::core::text::{self, LineHeight}; use crate::core::text::{self, LineHeight};
use crate::core::widget::{self, Widget}; use crate::core::widget::{self, Widget};
use crate::core::{ use crate::core::{
Clipboard, Color, Element, Length, Padding, Pixels, Rectangle, Shell, Clipboard, Color, Element, Length, Padding, Pixels, Rectangle, Shell, Size,
Vector, Vector,
}; };
@ -316,12 +316,11 @@ where
}) })
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(

View file

@ -283,12 +283,11 @@ where
} }
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -168,12 +168,11 @@ where
tree::State::new(widget::text::State::<Renderer::Paragraph>::default()) tree::State::new(widget::text::State::<Renderer::Paragraph>::default())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.width Size {
} width: self.width,
height: Length::Shrink,
fn height(&self) -> Length { }
Length::Shrink
} }
fn layout( fn layout(

View file

@ -131,12 +131,8 @@ where
widget::tree::Tag::of::<State>() widget::tree::Tag::of::<State>()
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
self.content.as_widget().width() self.content.as_widget().size()
}
fn height(&self) -> Length {
self.content.as_widget().height()
} }
fn layout( fn layout(

View file

@ -156,12 +156,11 @@ where
tree::State::new(State::new()) tree::State::new(State::new())
} }
fn width(&self) -> Length { fn size(&self) -> Size<Length> {
Length::Shrink Size {
} width: Length::Shrink,
height: self.height,
fn height(&self) -> Length { }
self.height
} }
fn layout( fn layout(