diff options
Diffstat (limited to '')
| -rw-r--r-- | native/src/overlay/menu.rs | 43 | ||||
| -rw-r--r-- | native/src/widget/pick_list.rs | 46 | 
2 files changed, 30 insertions, 59 deletions
| diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 0c335bb6..ebb2a4e1 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -5,16 +5,17 @@ use crate::mouse;  use crate::overlay;  use crate::renderer;  use crate::scrollable; -use crate::text;  use crate::touch;  use crate::{      Clipboard, Container, Element, Hasher, Layout, Length, Padding, Point,      Rectangle, Scrollable, Size, Vector, Widget,  }; +pub use iced_style::menu::Style; +  /// A list of selectable options.  #[allow(missing_debug_implementations)] -pub struct Menu<'a, T, Renderer: self::Renderer> { +pub struct Menu<'a, T, Renderer: renderer::Text> {      state: &'a mut State,      options: &'a [T],      hovered_option: &'a mut Option<usize>, @@ -23,13 +24,13 @@ pub struct Menu<'a, T, Renderer: self::Renderer> {      padding: Padding,      text_size: Option<u16>,      font: Renderer::Font, -    style: <Renderer as self::Renderer>::Style, +    style: Style,  }  impl<'a, T, Renderer> Menu<'a, T, Renderer>  where      T: ToString + Clone, -    Renderer: self::Renderer + 'a, +    Renderer: renderer::Text + 'a,  {      /// Creates a new [`Menu`] with the given [`State`], a list of options, and      /// the message to produced when an option is selected. @@ -77,10 +78,7 @@ where      }      /// Sets the style of the [`Menu`]. -    pub fn style( -        mut self, -        style: impl Into<<Renderer as self::Renderer>::Style>, -    ) -> Self { +    pub fn style(mut self, style: impl Into<Style>) -> Self {          self.style = style.into();          self      } @@ -116,14 +114,14 @@ impl State {      }  } -struct Overlay<'a, Message, Renderer: self::Renderer> { +struct Overlay<'a, Message, Renderer: renderer::Text> {      container: Container<'a, Message, Renderer>,      width: u16,      target_height: f32, -    style: <Renderer as self::Renderer>::Style, +    style: Style,  } -impl<'a, Message, Renderer: self::Renderer> Overlay<'a, Message, Renderer> +impl<'a, Message, Renderer: renderer::Text> Overlay<'a, Message, Renderer>  where      Message: 'a,      Renderer: 'a, @@ -168,7 +166,7 @@ where  impl<'a, Message, Renderer> crate::Overlay<Message, Renderer>      for Overlay<'a, Message, Renderer>  where -    Renderer: self::Renderer, +    Renderer: renderer::Text,  {      fn layout(          &self, @@ -258,21 +256,21 @@ where      }  } -struct List<'a, T, Renderer: self::Renderer> { +struct List<'a, T, Renderer: renderer::Text> {      options: &'a [T],      hovered_option: &'a mut Option<usize>,      last_selection: &'a mut Option<T>,      padding: Padding,      text_size: Option<u16>,      font: Renderer::Font, -    style: <Renderer as self::Renderer>::Style, +    style: Style,  } -impl<'a, T, Message, Renderer: self::Renderer> Widget<Message, Renderer> +impl<'a, T, Message, Renderer> Widget<Message, Renderer>      for List<'a, T, Renderer>  where      T: Clone + ToString, -    Renderer: self::Renderer, +    Renderer: renderer::Text,  {      fn width(&self) -> Length {          Length::Fill @@ -389,23 +387,12 @@ where      }  } -/// The renderer of a [`Menu`]. -/// -/// Your [renderer] will need to implement this trait before being -/// able to use a [`Menu`] in your user interface. -/// -/// [renderer]: crate::renderer -pub trait Renderer: renderer::Text { -    /// The [`Menu`] style supported by this renderer. -    type Style: Default + Clone; -} -  impl<'a, T, Message, Renderer> Into<Element<'a, Message, Renderer>>      for List<'a, T, Renderer>  where      T: ToString + Clone,      Message: 'a, -    Renderer: 'a + self::Renderer, +    Renderer: 'a + renderer::Text,  {      fn into(self) -> Element<'a, Message, Renderer> {          Element::new(self) diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs index 761cfcc8..81bd41c4 100644 --- a/native/src/widget/pick_list.rs +++ b/native/src/widget/pick_list.rs @@ -6,7 +6,6 @@ use crate::mouse;  use crate::overlay;  use crate::overlay::menu::{self, Menu};  use crate::renderer; -use crate::text;  use crate::touch;  use crate::{      Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle, @@ -14,9 +13,11 @@ use crate::{  };  use std::borrow::Cow; +pub use iced_style::pick_list::{Style, StyleSheet}; +  /// A widget for selecting a single value from a list of options.  #[allow(missing_debug_implementations)] -pub struct PickList<'a, T, Message, Renderer: self::Renderer> +pub struct PickList<'a, T, Message, Renderer: renderer::Text>  where      [T]: ToOwned<Owned = Vec<T>>,  { @@ -33,7 +34,7 @@ where      padding: Padding,      text_size: Option<u16>,      font: Renderer::Font, -    style: <Renderer as self::Renderer>::Style, +    style_sheet: Box<dyn StyleSheet>,  }  /// The local state of a [`PickList`]. @@ -58,12 +59,15 @@ impl<T> Default for State<T> {      }  } -impl<'a, T: 'a, Message, Renderer: self::Renderer> +impl<'a, T: 'a, Message, Renderer: renderer::Text>      PickList<'a, T, Message, Renderer>  where      T: ToString + Eq,      [T]: ToOwned<Owned = Vec<T>>,  { +    /// The default padding of a [`PickList`]. +    pub const DEFAULT_PADDING: Padding = Padding::new(5); +      /// Creates a new [`PickList`] with the given [`State`], a list of options,      /// the current selected value, and the message to produce when an option is      /// selected. @@ -93,9 +97,9 @@ where              selected,              width: Length::Shrink,              text_size: None, -            padding: Renderer::DEFAULT_PADDING, +            padding: Self::DEFAULT_PADDING,              font: Default::default(), -            style: Default::default(), +            style_sheet: Default::default(),          }      } @@ -132,9 +136,9 @@ where      /// Sets the style of the [`PickList`].      pub fn style(          mut self, -        style: impl Into<<Renderer as self::Renderer>::Style>, +        style_sheet: impl Into<Box<dyn StyleSheet>>,      ) -> Self { -        self.style = style.into(); +        self.style_sheet = style_sheet.into();          self      }  } @@ -145,7 +149,7 @@ where      T: Clone + ToString + Eq,      [T]: ToOwned<Owned = Vec<T>>,      Message: 'static, -    Renderer: self::Renderer + 'a, +    Renderer: renderer::Text + 'a,  {      fn width(&self) -> Length {          self.width @@ -328,7 +332,6 @@ where          cursor_position: Point,          _viewport: &Rectangle,      ) { -        // TODO      }      fn overlay( @@ -347,7 +350,7 @@ where              .width(bounds.width.round() as u16)              .padding(self.padding)              .font(self.font) -            .style(Renderer::menu_style(&self.style)); +            .style(self.style_sheet.menu());              if let Some(text_size) = self.text_size {                  menu = menu.text_size(text_size); @@ -360,31 +363,12 @@ where      }  } -/// The renderer of a [`PickList`]. -/// -/// Your [renderer] will need to implement this trait before being -/// able to use a [`PickList`] in your user interface. -/// -/// [renderer]: crate::renderer -pub trait Renderer: renderer::Text + menu::Renderer { -    /// The default padding of a [`PickList`]. -    const DEFAULT_PADDING: Padding; - -    /// The [`PickList`] style supported by this renderer. -    type Style: Default; - -    /// Returns the style of the [`Menu`] of the [`PickList`]. -    fn menu_style( -        style: &<Self as Renderer>::Style, -    ) -> <Self as menu::Renderer>::Style; -} -  impl<'a, T: 'a, Message, Renderer> Into<Element<'a, Message, Renderer>>      for PickList<'a, T, Message, Renderer>  where      T: Clone + ToString + Eq,      [T]: ToOwned<Owned = Vec<T>>, -    Renderer: self::Renderer + 'a, +    Renderer: renderer::Text + 'a,      Message: 'static,  {      fn into(self) -> Element<'a, Message, Renderer> { | 
