diff options
Diffstat (limited to '')
| -rw-r--r-- | native/src/lib.rs | 1 | ||||
| -rw-r--r-- | native/src/overlay/menu.rs | 20 | ||||
| -rw-r--r-- | native/src/renderer.rs | 4 | ||||
| -rw-r--r-- | native/src/renderer/null.rs | 6 | ||||
| -rw-r--r-- | native/src/text.rs (renamed from native/src/renderer/text.rs) | 30 | ||||
| -rw-r--r-- | native/src/widget/checkbox.rs | 16 | ||||
| -rw-r--r-- | native/src/widget/pick_list.rs | 14 | ||||
| -rw-r--r-- | native/src/widget/radio.rs | 14 | ||||
| -rw-r--r-- | native/src/widget/text.rs | 17 | ||||
| -rw-r--r-- | native/src/widget/text_input.rs | 19 | ||||
| -rw-r--r-- | native/src/widget/toggler.rs | 12 | ||||
| -rw-r--r-- | native/src/widget/tooltip.rs | 9 | 
12 files changed, 80 insertions, 82 deletions
| diff --git a/native/src/lib.rs b/native/src/lib.rs index f11f7d96..6fd0d757 100644 --- a/native/src/lib.rs +++ b/native/src/lib.rs @@ -43,6 +43,7 @@ pub mod overlay;  pub mod program;  pub mod renderer;  pub mod subscription; +pub mod text;  pub mod touch;  pub mod widget;  pub mod window; diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 646d5133..c4d1e171 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -5,7 +5,7 @@ use crate::layout;  use crate::mouse;  use crate::overlay;  use crate::renderer; -use crate::renderer::text; +use crate::text::{self, Text};  use crate::touch;  use crate::widget::scrollable::{self, Scrollable};  use crate::widget::Container; @@ -18,7 +18,7 @@ pub use iced_style::menu::Style;  /// A list of selectable options.  #[allow(missing_debug_implementations)] -pub struct Menu<'a, T, Renderer: renderer::Text> { +pub struct Menu<'a, T, Renderer: text::Renderer> {      state: &'a mut State,      options: &'a [T],      hovered_option: &'a mut Option<usize>, @@ -33,7 +33,7 @@ pub struct Menu<'a, T, Renderer: renderer::Text> {  impl<'a, T, Renderer> Menu<'a, T, Renderer>  where      T: ToString + Clone, -    Renderer: renderer::Text + 'a, +    Renderer: text::Renderer + 'a,  {      /// Creates a new [`Menu`] with the given [`State`], a list of options, and      /// the message to produced when an option is selected. @@ -117,14 +117,14 @@ impl State {      }  } -struct Overlay<'a, Message, Renderer: renderer::Text> { +struct Overlay<'a, Message, Renderer: text::Renderer> {      container: Container<'a, Message, Renderer>,      width: u16,      target_height: f32,      style: Style,  } -impl<'a, Message, Renderer: renderer::Text> Overlay<'a, Message, Renderer> +impl<'a, Message, Renderer: text::Renderer> Overlay<'a, Message, Renderer>  where      Message: 'a,      Renderer: 'a, @@ -169,7 +169,7 @@ where  impl<'a, Message, Renderer> crate::Overlay<Message, Renderer>      for Overlay<'a, Message, Renderer>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn layout(          &self, @@ -266,7 +266,7 @@ where      }  } -struct List<'a, T, Renderer: renderer::Text> { +struct List<'a, T, Renderer: text::Renderer> {      options: &'a [T],      hovered_option: &'a mut Option<usize>,      last_selection: &'a mut Option<T>, @@ -280,7 +280,7 @@ impl<'a, T, Message, Renderer> Widget<Message, Renderer>      for List<'a, T, Renderer>  where      T: Clone + ToString, -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          Length::Fill @@ -441,7 +441,7 @@ where                  });              } -            renderer.fill_text(text::Section { +            renderer.fill_text(Text {                  content: &option.to_string(),                  bounds: Rectangle {                      x: bounds.x + self.padding.left as f32, @@ -468,7 +468,7 @@ impl<'a, T, Message, Renderer> Into<Element<'a, Message, Renderer>>  where      T: ToString + Clone,      Message: 'a, -    Renderer: 'a + renderer::Text, +    Renderer: 'a + text::Renderer,  {      fn into(self) -> Element<'a, Message, Renderer> {          Element::new(self) diff --git a/native/src/renderer.rs b/native/src/renderer.rs index 6d12edae..1e518936 100644 --- a/native/src/renderer.rs +++ b/native/src/renderer.rs @@ -19,10 +19,6 @@  //! [`text::Renderer`]: crate::widget::text::Renderer  //! [`Checkbox`]: crate::widget::Checkbox  //! [`checkbox::Renderer`]: crate::widget::checkbox::Renderer -pub mod text; - -pub use text::Text; -  #[cfg(debug_assertions)]  mod null;  #[cfg(debug_assertions)] diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs index e57841f4..263b38a9 100644 --- a/native/src/renderer/null.rs +++ b/native/src/renderer/null.rs @@ -1,5 +1,5 @@  use crate::renderer::{self, Renderer}; -use crate::widget::text; +use crate::text::{self, Text};  use crate::{Font, Point, Rectangle, Size, Vector};  /// A renderer that does nothing. @@ -30,7 +30,7 @@ impl Renderer for Null {      fn fill_rectangle(&mut self, _quad: renderer::Quad) {}  } -impl renderer::Text for Null { +impl text::Renderer for Null {      type Font = Font;      const ICON_FONT: Font = Font::Default; @@ -63,5 +63,5 @@ impl renderer::Text for Null {          None      } -    fn fill_text(&mut self, _text: renderer::text::Section<'_, Self::Font>) {} +    fn fill_text(&mut self, _text: Text<'_, Self::Font>) {}  } diff --git a/native/src/renderer/text.rs b/native/src/text.rs index fc1a2c66..f112a8f3 100644 --- a/native/src/renderer/text.rs +++ b/native/src/text.rs @@ -1,9 +1,20 @@  use crate::alignment; -use crate::{Color, Point, Rectangle, Renderer, Size}; +use crate::{Color, Point, Rectangle, Size}; -pub use crate::widget::text::Hit; +pub use iced_core::text::Hit; -pub trait Text: Renderer { +#[derive(Debug, Clone, Copy)] +pub struct Text<'a, Font> { +    pub content: &'a str, +    pub bounds: Rectangle, +    pub size: f32, +    pub color: Color, +    pub font: Font, +    pub horizontal_alignment: alignment::Horizontal, +    pub vertical_alignment: alignment::Vertical, +} + +pub trait Renderer: crate::Renderer {      /// The font type used.      type Font: Default + Copy; @@ -56,16 +67,5 @@ pub trait Text: Renderer {          nearest_only: bool,      ) -> Option<Hit>; -    fn fill_text(&mut self, section: Section<'_, Self::Font>); -} - -#[derive(Debug, Clone, Copy)] -pub struct Section<'a, Font> { -    pub content: &'a str, -    pub bounds: Rectangle, -    pub size: f32, -    pub color: Color, -    pub font: Font, -    pub horizontal_alignment: alignment::Horizontal, -    pub vertical_alignment: alignment::Vertical, +    fn fill_text(&mut self, text: Text<'_, Self::Font>);  } diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index b81a444e..624e01d6 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -6,9 +6,9 @@ use crate::event::{self, Event};  use crate::layout;  use crate::mouse;  use crate::renderer; +use crate::text;  use crate::touch; -use crate::widget::text; -use crate::widget::{Row, Text}; +use crate::widget::{self, Row, Text};  use crate::{      Alignment, Clipboard, Color, Element, Hasher, Layout, Length, Point,      Rectangle, Widget, @@ -34,7 +34,7 @@ pub use iced_style::checkbox::{Style, StyleSheet};  ///  ///   #[allow(missing_debug_implementations)] -pub struct Checkbox<'a, Message, Renderer: renderer::Text> { +pub struct Checkbox<'a, Message, Renderer: text::Renderer> {      is_checked: bool,      on_toggle: Box<dyn Fn(bool) -> Message>,      label: String, @@ -47,7 +47,7 @@ pub struct Checkbox<'a, Message, Renderer: renderer::Text> {      style_sheet: &'a dyn StyleSheet,  } -impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> { +impl<'a, Message, Renderer: text::Renderer> Checkbox<'a, Message, Renderer> {      /// The default size of a [`Checkbox`].      const DEFAULT_SIZE: u16 = 20; @@ -128,7 +128,7 @@ impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> {  impl<'a, Message, Renderer> Widget<Message, Renderer>      for Checkbox<'a, Message, Renderer>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          self.width @@ -232,7 +232,7 @@ where              });              if self.is_checked { -                renderer.fill_text(renderer::text::Section { +                renderer.fill_text(text::Text {                      content: &Renderer::CHECKMARK_ICON.to_string(),                      font: Renderer::ICON_FONT,                      size: bounds.height * 0.7, @@ -251,7 +251,7 @@ where          {              let label_layout = children.next().unwrap(); -            text::draw( +            widget::text::draw(                  renderer,                  style,                  label_layout, @@ -276,7 +276,7 @@ where  impl<'a, Message, Renderer> From<Checkbox<'a, Message, Renderer>>      for Element<'a, Message, Renderer>  where -    Renderer: 'a + renderer::Text, +    Renderer: 'a + text::Renderer,      Message: 'a,  {      fn from( diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs index 6fe5feb7..3a393e14 100644 --- a/native/src/widget/pick_list.rs +++ b/native/src/widget/pick_list.rs @@ -7,7 +7,7 @@ use crate::mouse;  use crate::overlay;  use crate::overlay::menu::{self, Menu};  use crate::renderer; -use crate::renderer::text; +use crate::text::{self, Text};  use crate::touch;  use crate::{      Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle, @@ -19,7 +19,7 @@ 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: renderer::Text> +pub struct PickList<'a, T, Message, Renderer: text::Renderer>  where      [T]: ToOwned<Owned = Vec<T>>,  { @@ -61,7 +61,7 @@ impl<T> Default for State<T> {      }  } -impl<'a, T: 'a, Message, Renderer: renderer::Text> +impl<'a, T: 'a, Message, Renderer: text::Renderer>      PickList<'a, T, Message, Renderer>  where      T: ToString + Eq, @@ -151,7 +151,7 @@ where      T: Clone + ToString + Eq,      [T]: ToOwned<Owned = Vec<T>>,      Message: 'static, -    Renderer: renderer::Text + 'a, +    Renderer: text::Renderer + 'a,  {      fn width(&self) -> Length {          self.width @@ -368,7 +368,7 @@ where              border_radius: style.border_radius,          }); -        renderer.fill_text(text::Section { +        renderer.fill_text(Text {              content: &Renderer::ARROW_DOWN_ICON.to_string(),              font: Renderer::ICON_FONT,              size: bounds.height * style.icon_size, @@ -390,7 +390,7 @@ where              .as_ref()              .or_else(|| self.placeholder.as_ref())          { -            renderer.fill_text(text::Section { +            renderer.fill_text(Text {                  content: label,                  size: f32::from(                      self.text_size.unwrap_or(renderer.default_size()), @@ -444,7 +444,7 @@ impl<'a, T: 'a, Message, Renderer> Into<Element<'a, Message, Renderer>>  where      T: Clone + ToString + Eq,      [T]: ToOwned<Owned = Vec<T>>, -    Renderer: renderer::Text + 'a, +    Renderer: text::Renderer + 'a,      Message: 'static,  {      fn into(self) -> Element<'a, Message, Renderer> { diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 91de8be5..afe85b76 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -6,9 +6,9 @@ use crate::event::{self, Event};  use crate::layout;  use crate::mouse;  use crate::renderer; +use crate::text;  use crate::touch; -use crate::widget::text; -use crate::widget::{Row, Text}; +use crate::widget::{self, Row, Text};  use crate::{      Alignment, Background, Clipboard, Color, Element, Hasher, Layout, Length,      Point, Rectangle, Widget, @@ -43,7 +43,7 @@ pub use iced_style::radio::{Style, StyleSheet};  ///  ///   #[allow(missing_debug_implementations)] -pub struct Radio<'a, Message, Renderer: renderer::Text> { +pub struct Radio<'a, Message, Renderer: text::Renderer> {      is_selected: bool,      on_click: Message,      label: String, @@ -56,7 +56,7 @@ pub struct Radio<'a, Message, Renderer: renderer::Text> {      style_sheet: &'a dyn StyleSheet,  } -impl<'a, Message, Renderer: renderer::Text> Radio<'a, Message, Renderer> +impl<'a, Message, Renderer: text::Renderer> Radio<'a, Message, Renderer>  where      Message: Clone,  { @@ -145,7 +145,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>      for Radio<'a, Message, Renderer>  where      Message: Clone, -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          self.width @@ -267,7 +267,7 @@ where          {              let label_layout = children.next().unwrap(); -            text::draw( +            widget::text::draw(                  renderer,                  style,                  label_layout, @@ -293,7 +293,7 @@ impl<'a, Message, Renderer> From<Radio<'a, Message, Renderer>>      for Element<'a, Message, Renderer>  where      Message: 'a + Clone, -    Renderer: 'a + renderer::Text, +    Renderer: 'a + text::Renderer,  {      fn from(          radio: Radio<'a, Message, Renderer>, diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index 563ab8c4..79688b28 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -2,12 +2,11 @@  use crate::alignment;  use crate::layout;  use crate::renderer; +use crate::text;  use crate::{      Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,  }; -pub use iced_core::text::Hit; -  use std::hash::Hash;  /// A paragraph of text. @@ -24,7 +23,7 @@ use std::hash::Hash;  ///  ///   #[derive(Debug)] -pub struct Text<Renderer: renderer::Text> { +pub struct Text<Renderer: text::Renderer> {      content: String,      size: Option<u16>,      color: Option<Color>, @@ -35,7 +34,7 @@ pub struct Text<Renderer: renderer::Text> {      vertical_alignment: alignment::Vertical,  } -impl<Renderer: renderer::Text> Text<Renderer> { +impl<Renderer: text::Renderer> Text<Renderer> {      /// Create a new fragment of [`Text`] with the given contents.      pub fn new<T: Into<String>>(label: T) -> Self {          Text { @@ -103,7 +102,7 @@ impl<Renderer: renderer::Text> Text<Renderer> {  impl<Message, Renderer> Widget<Message, Renderer> for Text<Renderer>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          self.width @@ -175,7 +174,7 @@ pub fn draw<Renderer>(      horizontal_alignment: alignment::Horizontal,      vertical_alignment: alignment::Vertical,  ) where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      let bounds = layout.bounds(); @@ -191,7 +190,7 @@ pub fn draw<Renderer>(          alignment::Vertical::Bottom => bounds.y + bounds.height,      }; -    renderer.fill_text(renderer::text::Section { +    renderer.fill_text(crate::text::Text {          content,          size: f32::from(size.unwrap_or(renderer.default_size())),          bounds: Rectangle { x, y, ..bounds }, @@ -205,14 +204,14 @@ pub fn draw<Renderer>(  impl<'a, Message, Renderer> From<Text<Renderer>>      for Element<'a, Message, Renderer>  where -    Renderer: renderer::Text + 'a, +    Renderer: text::Renderer + 'a,  {      fn from(text: Text<Renderer>) -> Element<'a, Message, Renderer> {          Element::new(text)      }  } -impl<Renderer: renderer::Text> Clone for Text<Renderer> { +impl<Renderer: text::Renderer> Clone for Text<Renderer> {      fn clone(&self) -> Self {          Self {              content: self.content.clone(), diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 5d67ddfe..a3641330 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -17,6 +17,7 @@ use crate::keyboard;  use crate::layout;  use crate::mouse::{self, click};  use crate::renderer; +use crate::text::{self, Text};  use crate::touch;  use crate::{      Background, Clipboard, Color, Element, Hasher, Layout, Length, Padding, @@ -53,7 +54,7 @@ pub use iced_style::text_input::{Style, StyleSheet};  /// ```  ///   #[allow(missing_debug_implementations)] -pub struct TextInput<'a, Message, Renderer: renderer::Text> { +pub struct TextInput<'a, Message, Renderer: text::Renderer> {      state: &'a mut State,      placeholder: String,      value: Value, @@ -71,7 +72,7 @@ pub struct TextInput<'a, Message, Renderer: renderer::Text> {  impl<'a, Message, Renderer> TextInput<'a, Message, Renderer>  where      Message: Clone, -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      /// Creates a new [`TextInput`].      /// @@ -166,7 +167,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>      for TextInput<'a, Message, Renderer>  where      Message: Clone, -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          self.width @@ -728,7 +729,7 @@ where                  renderer.fill_rectangle(cursor);              } -            renderer.fill_text(renderer::text::Section { +            renderer.fill_text(Text {                  content: if text.is_empty() {                      &self.placeholder                  } else { @@ -776,7 +777,7 @@ impl<'a, Message, Renderer> From<TextInput<'a, Message, Renderer>>      for Element<'a, Message, Renderer>  where      Message: 'a + Clone, -    Renderer: 'a + renderer::Text, +    Renderer: 'a + text::Renderer,  {      fn from(          text_input: TextInput<'a, Message, Renderer>, @@ -877,7 +878,7 @@ fn offset<Renderer>(      state: &State,  ) -> f32  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      if state.is_focused() {          let cursor = state.cursor(); @@ -911,7 +912,7 @@ fn measure_cursor_and_scroll_offset<Renderer>(      font: Renderer::Font,  ) -> (f32, f32)  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      let text_before_cursor = value.until(cursor_index).to_string(); @@ -935,7 +936,7 @@ fn find_cursor_position<Renderer>(      x: f32,  ) -> Option<usize>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      let size = size.unwrap_or(renderer.default_size()); @@ -950,5 +951,5 @@ where              Point::new(x + offset, text_bounds.height / 2.0),              true,          ) -        .map(renderer::text::Hit::cursor) +        .map(text::Hit::cursor)  } diff --git a/native/src/widget/toggler.rs b/native/src/widget/toggler.rs index 20cfea74..e5229d52 100644 --- a/native/src/widget/toggler.rs +++ b/native/src/widget/toggler.rs @@ -6,7 +6,7 @@ use crate::event;  use crate::layout;  use crate::mouse;  use crate::renderer; -use crate::widget::text; +use crate::text;  use crate::widget::{Row, Text};  use crate::{      Alignment, Clipboard, Element, Event, Hasher, Layout, Length, Point, @@ -31,7 +31,7 @@ pub use iced_style::toggler::{Style, StyleSheet};  /// Toggler::new(is_active, String::from("Toggle me!"), |b| Message::TogglerToggled(b));  /// ```  #[allow(missing_debug_implementations)] -pub struct Toggler<Message, Renderer: renderer::Text> { +pub struct Toggler<Message, Renderer: text::Renderer> {      is_active: bool,      on_toggle: Box<dyn Fn(bool) -> Message>,      label: Option<String>, @@ -44,7 +44,7 @@ pub struct Toggler<Message, Renderer: renderer::Text> {      style_sheet: Box<dyn StyleSheet>,  } -impl<Message, Renderer: renderer::Text> Toggler<Message, Renderer> { +impl<Message, Renderer: text::Renderer> Toggler<Message, Renderer> {      /// The default size of a [`Toggler`].      pub const DEFAULT_SIZE: u16 = 20; @@ -126,7 +126,7 @@ impl<Message, Renderer: renderer::Text> Toggler<Message, Renderer> {  impl<Message, Renderer> Widget<Message, Renderer> for Toggler<Message, Renderer>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          self.width @@ -223,7 +223,7 @@ where          if let Some(label) = &self.label {              let label_layout = children.next().unwrap(); -            text::draw( +            crate::widget::text::draw(                  renderer,                  style,                  label_layout, @@ -297,7 +297,7 @@ where  impl<'a, Message, Renderer> From<Toggler<Message, Renderer>>      for Element<'a, Message, Renderer>  where -    Renderer: 'a + renderer::Text, +    Renderer: 'a + text::Renderer,      Message: 'a,  {      fn from( diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs index a00158f6..a7f3a042 100644 --- a/native/src/widget/tooltip.rs +++ b/native/src/widget/tooltip.rs @@ -6,6 +6,7 @@ use iced_core::Rectangle;  use crate::event;  use crate::layout;  use crate::renderer; +use crate::text;  use crate::widget::container;  use crate::widget::text::Text;  use crate::{ @@ -15,7 +16,7 @@ use crate::{  /// An element to display a widget over another.  #[allow(missing_debug_implementations)] -pub struct Tooltip<'a, Message, Renderer: renderer::Text> { +pub struct Tooltip<'a, Message, Renderer: text::Renderer> {      content: Element<'a, Message, Renderer>,      tooltip: Text<Renderer>,      position: Position, @@ -26,7 +27,7 @@ pub struct Tooltip<'a, Message, Renderer: renderer::Text> {  impl<'a, Message, Renderer> Tooltip<'a, Message, Renderer>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      /// The default padding of a [`Tooltip`] drawn by this renderer.      const DEFAULT_PADDING: u16 = 5; @@ -100,7 +101,7 @@ pub enum Position {  impl<'a, Message, Renderer> Widget<Message, Renderer>      for Tooltip<'a, Message, Renderer>  where -    Renderer: renderer::Text, +    Renderer: text::Renderer,  {      fn width(&self) -> Length {          self.content.width() @@ -260,7 +261,7 @@ where  impl<'a, Message, Renderer> From<Tooltip<'a, Message, Renderer>>      for Element<'a, Message, Renderer>  where -    Renderer: 'a + renderer::Text, +    Renderer: 'a + text::Renderer,      Message: 'a,  {      fn from( | 
