diff options
Diffstat (limited to 'native')
| -rw-r--r-- | native/src/layout/flex.rs | 12 | ||||
| -rw-r--r-- | native/src/layout/limits.rs | 9 | ||||
| -rw-r--r-- | native/src/lib.rs | 4 | ||||
| -rw-r--r-- | native/src/overlay/menu.rs | 24 | ||||
| -rw-r--r-- | native/src/renderer/null.rs | 4 | ||||
| -rw-r--r-- | native/src/widget/button.rs | 23 | ||||
| -rw-r--r-- | native/src/widget/column.rs | 15 | ||||
| -rw-r--r-- | native/src/widget/container.rs | 24 | ||||
| -rw-r--r-- | native/src/widget/pane_grid/title_bar.rs | 24 | ||||
| -rw-r--r-- | native/src/widget/pick_list.rs | 21 | ||||
| -rw-r--r-- | native/src/widget/row.rs | 15 | ||||
| -rw-r--r-- | native/src/widget/scrollable.rs | 8 | ||||
| -rw-r--r-- | native/src/widget/text_input.rs | 23 | 
13 files changed, 113 insertions, 93 deletions
diff --git a/native/src/layout/flex.rs b/native/src/layout/flex.rs index 4f6523fb..3d3ff82c 100644 --- a/native/src/layout/flex.rs +++ b/native/src/layout/flex.rs @@ -16,9 +16,10 @@  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  // See the License for the specific language governing permissions and  // limitations under the License. +  use crate::{      layout::{Limits, Node}, -    Align, Element, Point, Size, +    Align, Element, Padding, Point, Size,  };  /// The main axis of a flex layout. @@ -62,7 +63,7 @@ pub fn resolve<Message, Renderer>(      axis: Axis,      renderer: &Renderer,      limits: &Limits, -    padding: f32, +    padding: Padding,      spacing: f32,      align_items: Align,      items: &[Element<'_, Message, Renderer>], @@ -141,14 +142,15 @@ where          }      } -    let mut main = padding; +    let pad = axis.pack(padding.left as f32, padding.top as f32); +    let mut main = pad.0;      for (i, node) in nodes.iter_mut().enumerate() {          if i > 0 {              main += spacing;          } -        let (x, y) = axis.pack(main, padding); +        let (x, y) = axis.pack(main, pad.1);          node.move_to(Point::new(x, y)); @@ -166,7 +168,7 @@ where          main += axis.main(size);      } -    let (width, height) = axis.pack(main - padding, cross); +    let (width, height) = axis.pack(main - pad.0, cross);      let size = limits.resolve(Size::new(width, height));      Node::with_children(size.pad(padding), nodes) diff --git a/native/src/layout/limits.rs b/native/src/layout/limits.rs index a7bb5c9c..6d5f6563 100644 --- a/native/src/layout/limits.rs +++ b/native/src/layout/limits.rs @@ -1,4 +1,4 @@ -use crate::{Length, Size}; +use crate::{Length, Padding, Size};  /// A set of size constraints for layouting.  #[derive(Debug, Clone, Copy)] @@ -117,8 +117,11 @@ impl Limits {      }      /// Shrinks the current [`Limits`] to account for the given padding. -    pub fn pad(&self, padding: f32) -> Limits { -        self.shrink(Size::new(padding * 2.0, padding * 2.0)) +    pub fn pad(&self, padding: Padding) -> Limits { +        self.shrink(Size::new( +            padding.horizontal() as f32, +            padding.vertical() as f32, +        ))      }      /// Shrinks the current [`Limits`] by the given [`Size`]. diff --git a/native/src/lib.rs b/native/src/lib.rs index 20bbb1d0..cd214e36 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -61,8 +61,8 @@ mod debug;  mod debug;  pub use iced_core::{ -    Align, Background, Color, Font, HorizontalAlignment, Length, Point, -    Rectangle, Size, Vector, VerticalAlignment, +    Align, Background, Color, Font, HorizontalAlignment, Length, Padding, +    Point, Rectangle, Size, Vector, VerticalAlignment,  };  pub use iced_futures::{executor, futures, Command}; diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index afb17bd3..f62dcb46 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -8,8 +8,8 @@ use crate::scrollable;  use crate::text;  use crate::touch;  use crate::{ -    Clipboard, Container, Element, Hasher, Layout, Length, Point, Rectangle, -    Scrollable, Size, Vector, Widget, +    Clipboard, Container, Element, Hasher, Layout, Length, Padding, Point, +    Rectangle, Scrollable, Size, Vector, Widget,  };  /// A list of selectable options. @@ -20,7 +20,7 @@ pub struct Menu<'a, T, Renderer: self::Renderer> {      hovered_option: &'a mut Option<usize>,      last_selection: &'a mut Option<T>,      width: u16, -    padding: u16, +    padding: Padding,      text_size: Option<u16>,      font: Renderer::Font,      style: <Renderer as self::Renderer>::Style, @@ -45,7 +45,7 @@ where              hovered_option,              last_selection,              width: 0, -            padding: 0, +            padding: Padding::ZERO,              text_size: None,              font: Default::default(),              style: Default::default(), @@ -58,9 +58,9 @@ where          self      } -    /// Sets the padding of the [`Menu`]. -    pub fn padding(mut self, padding: u16) -> Self { -        self.padding = padding; +    /// Sets the [`Padding`] of the [`Menu`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -261,7 +261,7 @@ struct List<'a, T, Renderer: self::Renderer> {      options: &'a [T],      hovered_option: &'a mut Option<usize>,      last_selection: &'a mut Option<T>, -    padding: u16, +    padding: Padding,      text_size: Option<u16>,      font: Renderer::Font,      style: <Renderer as self::Renderer>::Style, @@ -294,7 +294,7 @@ where          let size = {              let intrinsic = Size::new(                  0.0, -                f32::from(text_size + self.padding * 2) +                f32::from(text_size + self.padding.vertical())                      * self.options.len() as f32,              ); @@ -345,7 +345,7 @@ where                      *self.hovered_option = Some(                          ((cursor_position.y - bounds.y) -                            / f32::from(text_size + self.padding * 2)) +                            / f32::from(text_size + self.padding.vertical()))                              as usize,                      );                  } @@ -359,7 +359,7 @@ where                      *self.hovered_option = Some(                          ((cursor_position.y - bounds.y) -                            / f32::from(text_size + self.padding * 2)) +                            / f32::from(text_size + self.padding.vertical()))                              as usize,                      ); @@ -430,7 +430,7 @@ pub trait Renderer:          viewport: &Rectangle,          options: &[T],          hovered_option: Option<usize>, -        padding: u16, +        padding: Padding,          text_size: u16,          font: Self::Font,          style: &<Self as Renderer>::Style, diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs index 9e91d29f..28746585 100644 --- a/native/src/renderer/null.rs +++ b/native/src/renderer/null.rs @@ -1,7 +1,7 @@  use crate::{      button, checkbox, column, container, pane_grid, progress_bar, radio, row,      scrollable, slider, text, text_input, Color, Element, Font, -    HorizontalAlignment, Layout, Point, Rectangle, Renderer, Size, +    HorizontalAlignment, Layout, Padding, Point, Rectangle, Renderer, Size,      VerticalAlignment,  }; @@ -145,7 +145,7 @@ impl text_input::Renderer for Null {  }  impl button::Renderer for Null { -    const DEFAULT_PADDING: u16 = 0; +    const DEFAULT_PADDING: Padding = Padding::ZERO;      type Style = (); diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 99e98fd1..f61c22d0 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -7,7 +7,8 @@ use crate::mouse;  use crate::overlay;  use crate::touch;  use crate::{ -    Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, +    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle, +    Widget,  };  use std::hash::Hash; @@ -37,7 +38,7 @@ pub struct Button<'a, Message, Renderer: self::Renderer> {      height: Length,      min_width: u32,      min_height: u32, -    padding: u16, +    padding: Padding,      style: Renderer::Style,  } @@ -89,9 +90,9 @@ where          self      } -    /// Sets the padding of the [`Button`]. -    pub fn padding(mut self, padding: u16) -> Self { -        self.padding = padding; +    /// Sets the [`Padding`] of the [`Button`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -140,18 +141,20 @@ where          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { -        let padding = f32::from(self.padding);          let limits = limits              .min_width(self.min_width)              .min_height(self.min_height)              .width(self.width)              .height(self.height) -            .pad(padding); +            .pad(self.padding);          let mut content = self.content.layout(renderer, &limits); -        content.move_to(Point::new(padding, padding)); +        content.move_to(Point::new( +            self.padding.left.into(), +            self.padding.top.into(), +        )); -        let size = limits.resolve(content.size()).pad(padding); +        let size = limits.resolve(content.size()).pad(self.padding);          layout::Node::with_children(size, vec![content])      } @@ -258,7 +261,7 @@ where  /// [renderer]: crate::renderer  pub trait Renderer: crate::Renderer + Sized {      /// The default padding of a [`Button`]. -    const DEFAULT_PADDING: u16; +    const DEFAULT_PADDING: Padding;      /// The style supported by this renderer.      type Style: Default; diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index d7f0365a..52a2e80c 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -5,7 +5,8 @@ use crate::event::{self, Event};  use crate::layout;  use crate::overlay;  use crate::{ -    Align, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, +    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point, +    Rectangle, Widget,  };  use std::u32; @@ -14,7 +15,7 @@ use std::u32;  #[allow(missing_debug_implementations)]  pub struct Column<'a, Message, Renderer> {      spacing: u16, -    padding: u16, +    padding: Padding,      width: Length,      height: Length,      max_width: u32, @@ -35,7 +36,7 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> {      ) -> Self {          Column {              spacing: 0, -            padding: 0, +            padding: Padding::ZERO,              width: Length::Shrink,              height: Length::Shrink,              max_width: u32::MAX, @@ -55,9 +56,9 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> {          self      } -    /// Sets the padding of the [`Column`]. -    pub fn padding(mut self, units: u16) -> Self { -        self.padding = units; +    /// Sets the [`Padding`] of the [`Column`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -129,7 +130,7 @@ where              layout::flex::Axis::Vertical,              renderer,              &limits, -            self.padding as f32, +            self.padding,              self.spacing as f32,              self.align_items,              &self.children, diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index 69fe699b..69aee64d 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -5,7 +5,8 @@ use crate::event::{self, Event};  use crate::layout;  use crate::overlay;  use crate::{ -    Align, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, +    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point, +    Rectangle, Widget,  };  use std::u32; @@ -15,7 +16,7 @@ use std::u32;  /// It is normally used for alignment purposes.  #[allow(missing_debug_implementations)]  pub struct Container<'a, Message, Renderer: self::Renderer> { -    padding: u16, +    padding: Padding,      width: Length,      height: Length,      max_width: u32, @@ -36,7 +37,7 @@ where          T: Into<Element<'a, Message, Renderer>>,      {          Container { -            padding: 0, +            padding: Padding::ZERO,              width: Length::Shrink,              height: Length::Shrink,              max_width: u32::MAX, @@ -48,9 +49,9 @@ where          }      } -    /// Sets the padding of the [`Container`]. -    pub fn padding(mut self, units: u16) -> Self { -        self.padding = units; +    /// Sets the [`Padding`] of the [`Container`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -127,23 +128,24 @@ where          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { -        let padding = f32::from(self.padding); -          let limits = limits              .loose()              .max_width(self.max_width)              .max_height(self.max_height)              .width(self.width)              .height(self.height) -            .pad(padding); +            .pad(self.padding);          let mut content = self.content.layout(renderer, &limits.loose());          let size = limits.resolve(content.size()); -        content.move_to(Point::new(padding, padding)); +        content.move_to(Point::new( +            self.padding.left.into(), +            self.padding.top.into(), +        ));          content.align(self.horizontal_alignment, self.vertical_alignment, size); -        layout::Node::with_children(size.pad(padding), vec![content]) +        layout::Node::with_children(size.pad(self.padding), vec![content])      }      fn on_event( diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 8e42ce38..d9d85dbb 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -2,7 +2,9 @@ use crate::container;  use crate::event::{self, Event};  use crate::layout;  use crate::pane_grid; -use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; +use crate::{ +    Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size, +};  /// The title bar of a [`Pane`].  /// @@ -11,7 +13,7 @@ use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size};  pub struct TitleBar<'a, Message, Renderer: pane_grid::Renderer> {      content: Element<'a, Message, Renderer>,      controls: Option<Element<'a, Message, Renderer>>, -    padding: u16, +    padding: Padding,      always_show_controls: bool,      style: <Renderer as container::Renderer>::Style,  } @@ -28,7 +30,7 @@ where          Self {              content: content.into(),              controls: None, -            padding: 0, +            padding: Padding::ZERO,              always_show_controls: false,              style: Default::default(),          } @@ -43,9 +45,9 @@ where          self      } -    /// Sets the padding of the [`TitleBar`]. -    pub fn padding(mut self, units: u16) -> Self { -        self.padding = units; +    /// Sets the [`Padding`] of the [`TitleBar`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -161,8 +163,7 @@ where          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { -        let padding = f32::from(self.padding); -        let limits = limits.pad(padding); +        let limits = limits.pad(self.padding);          let max_size = limits.max();          let title_layout = self @@ -192,9 +193,12 @@ where              )          }; -        node.move_to(Point::new(padding, padding)); +        node.move_to(Point::new( +            self.padding.left.into(), +            self.padding.top.into(), +        )); -        layout::Node::with_children(node.size().pad(padding), vec![node]) +        layout::Node::with_children(node.size().pad(self.padding), vec![node])      }      pub(crate) fn on_event( diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs index b17d93a3..92c183f3 100644 --- a/native/src/widget/pick_list.rs +++ b/native/src/widget/pick_list.rs @@ -8,7 +8,8 @@ use crate::scrollable;  use crate::text;  use crate::touch;  use crate::{ -    Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, +    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle, +    Size, Widget,  };  use std::borrow::Cow; @@ -26,7 +27,7 @@ where      options: Cow<'a, [T]>,      selected: Option<T>,      width: Length, -    padding: u16, +    padding: Padding,      text_size: Option<u16>,      font: Renderer::Font,      style: <Renderer as self::Renderer>::Style, @@ -96,9 +97,9 @@ where          self      } -    /// Sets the padding of the [`PickList`]. -    pub fn padding(mut self, padding: u16) -> Self { -        self.padding = padding; +    /// Sets the [`Padding`] of the [`PickList`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -150,7 +151,7 @@ where          let limits = limits              .width(self.width)              .height(Length::Shrink) -            .pad(f32::from(self.padding)); +            .pad(self.padding);          let text_size = self.text_size.unwrap_or(renderer.default_size()); @@ -179,11 +180,11 @@ where              let intrinsic = Size::new(                  max_width as f32                      + f32::from(text_size) -                    + f32::from(self.padding), +                    + f32::from(self.padding.left),                  f32::from(text_size),              ); -            limits.resolve(intrinsic).pad(f32::from(self.padding)) +            limits.resolve(intrinsic).pad(self.padding)          };          layout::Node::new(size) @@ -308,7 +309,7 @@ where  /// [renderer]: crate::renderer  pub trait Renderer: text::Renderer + menu::Renderer {      /// The default padding of a [`PickList`]. -    const DEFAULT_PADDING: u16; +    const DEFAULT_PADDING: Padding;      /// The [`PickList`] style supported by this renderer.      type Style: Default; @@ -324,7 +325,7 @@ pub trait Renderer: text::Renderer + menu::Renderer {          bounds: Rectangle,          cursor_position: Point,          selected: Option<String>, -        padding: u16, +        padding: Padding,          text_size: u16,          font: Self::Font,          style: &<Self as Renderer>::Style, diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index 5634ab12..9ebc9145 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -3,7 +3,8 @@ use crate::event::{self, Event};  use crate::layout;  use crate::overlay;  use crate::{ -    Align, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, +    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point, +    Rectangle, Widget,  };  use std::hash::Hash; @@ -13,7 +14,7 @@ use std::u32;  #[allow(missing_debug_implementations)]  pub struct Row<'a, Message, Renderer> {      spacing: u16, -    padding: u16, +    padding: Padding,      width: Length,      height: Length,      max_width: u32, @@ -34,7 +35,7 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> {      ) -> Self {          Row {              spacing: 0, -            padding: 0, +            padding: Padding::ZERO,              width: Length::Shrink,              height: Length::Shrink,              max_width: u32::MAX, @@ -54,9 +55,9 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> {          self      } -    /// Sets the padding of the [`Row`]. -    pub fn padding(mut self, units: u16) -> Self { -        self.padding = units; +    /// Sets the [`Padding`] of the [`Row`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -128,7 +129,7 @@ where              layout::flex::Axis::Horizontal,              renderer,              &limits, -            self.padding as f32, +            self.padding,              self.spacing as f32,              self.align_items,              &self.children, diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 70ebebe2..7c4ea16c 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -6,7 +6,7 @@ use crate::mouse;  use crate::overlay;  use crate::touch;  use crate::{ -    Align, Clipboard, Column, Element, Hasher, Layout, Length, Point, +    Align, Clipboard, Column, Element, Hasher, Layout, Length, Padding, Point,      Rectangle, Size, Vector, Widget,  }; @@ -51,9 +51,9 @@ impl<'a, Message, Renderer: self::Renderer> Scrollable<'a, Message, Renderer> {          self      } -    /// Sets the padding of the [`Scrollable`]. -    pub fn padding(mut self, units: u16) -> Self { -        self.content = self.content.padding(units); +    /// Sets the [`Padding`] of the [`Scrollable`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.content = self.content.padding(padding);          self      } diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index de6032b7..20117fa0 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -18,7 +18,8 @@ use crate::mouse::{self, click};  use crate::text;  use crate::touch;  use crate::{ -    Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, +    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle, +    Size, Widget,  };  use std::u32; @@ -56,7 +57,7 @@ pub struct TextInput<'a, Message, Renderer: self::Renderer> {      font: Renderer::Font,      width: Length,      max_width: u32, -    padding: u16, +    padding: Padding,      size: Option<u16>,      on_change: Box<dyn Fn(String) -> Message>,      on_submit: Option<Message>, @@ -92,7 +93,7 @@ where              font: Default::default(),              width: Length::Fill,              max_width: u32::MAX, -            padding: 0, +            padding: Padding::ZERO,              size: None,              on_change: Box::new(on_change),              on_submit: None, @@ -126,9 +127,9 @@ where          self      } -    /// Sets the padding of the [`TextInput`]. -    pub fn padding(mut self, units: u16) -> Self { -        self.padding = units; +    /// Sets the [`Padding`] of the [`TextInput`]. +    pub fn padding<P: Into<Padding>>(mut self, padding: P) -> Self { +        self.padding = padding.into();          self      } @@ -223,19 +224,21 @@ where          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { -        let padding = self.padding as f32;          let text_size = self.size.unwrap_or(renderer.default_size());          let limits = limits -            .pad(padding) +            .pad(self.padding)              .width(self.width)              .max_width(self.max_width)              .height(Length::Units(text_size));          let mut text = layout::Node::new(limits.resolve(Size::ZERO)); -        text.move_to(Point::new(padding, padding)); +        text.move_to(Point::new( +            self.padding.left.into(), +            self.padding.top.into(), +        )); -        layout::Node::with_children(text.size().pad(padding), vec![text]) +        layout::Node::with_children(text.size().pad(self.padding), vec![text])      }      fn on_event(  | 
