From 7a50e9e8fbb8d37e53a42c1dd5936b97463ead53 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 21 Jan 2024 17:56:01 +0100 Subject: Convert `Renderer::Theme` to generic `Widget` type --- widget/src/text_editor.rs | 54 ++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 26 deletions(-) (limited to 'widget/src/text_editor.rs') diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index 6b716238..c3a17bd2 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -23,11 +23,16 @@ pub use text::editor::{Action, Edit, Motion}; /// A multi-line text input. #[allow(missing_debug_implementations)] -pub struct TextEditor<'a, Highlighter, Message, Renderer = crate::Renderer> -where +pub struct TextEditor< + 'a, + Highlighter, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where Highlighter: text::Highlighter, + Theme: StyleSheet, Renderer: text::Renderer, - Renderer::Theme: StyleSheet, { content: &'a Content, font: Option, @@ -36,20 +41,20 @@ where width: Length, height: Length, padding: Padding, - style: ::Style, + style: Theme::Style, on_edit: Option Message + 'a>>, highlighter_settings: Highlighter::Settings, highlighter_format: fn( &Highlighter::Highlight, - &Renderer::Theme, + &Theme, ) -> highlighter::Format, } -impl<'a, Message, Renderer> - TextEditor<'a, highlighter::PlainText, Message, Renderer> +impl<'a, Message, Theme, Renderer> + TextEditor<'a, highlighter::PlainText, Message, Theme, Renderer> where + Theme: StyleSheet, Renderer: text::Renderer, - Renderer::Theme: StyleSheet, { /// Creates new [`TextEditor`] with the given [`Content`]. pub fn new(content: &'a Content) -> Self { @@ -71,12 +76,12 @@ where } } -impl<'a, Highlighter, Message, Renderer> - TextEditor<'a, Highlighter, Message, Renderer> +impl<'a, Highlighter, Message, Theme, Renderer> + TextEditor<'a, Highlighter, Message, Theme, Renderer> where Highlighter: text::Highlighter, + Theme: StyleSheet, Renderer: text::Renderer, - Renderer::Theme: StyleSheet, { /// Sets the message that should be produced when some action is performed in /// the [`TextEditor`]. @@ -111,9 +116,9 @@ where settings: H::Settings, to_format: fn( &H::Highlight, - &Renderer::Theme, + &Theme, ) -> highlighter::Format, - ) -> TextEditor<'a, H, Message, Renderer> { + ) -> TextEditor<'a, H, Message, Theme, Renderer> { TextEditor { content: self.content, font: self.font, @@ -130,10 +135,7 @@ where } /// Sets the style of the [`TextEditor`]. - pub fn style( - mut self, - style: impl Into<::Style>, - ) -> Self { + pub fn style(mut self, style: impl Into) -> Self { self.style = style.into(); self } @@ -292,12 +294,12 @@ struct State { highlighter_format_address: usize, } -impl<'a, Highlighter, Message, Renderer> Widget - for TextEditor<'a, Highlighter, Message, Renderer> +impl<'a, Highlighter, Message, Theme, Renderer> Widget + for TextEditor<'a, Highlighter, Message, Theme, Renderer> where Highlighter: text::Highlighter, + Theme: StyleSheet, Renderer: text::Renderer, - Renderer::Theme: StyleSheet, { fn tag(&self) -> widget::tree::Tag { widget::tree::Tag::of::>() @@ -433,7 +435,7 @@ where &self, tree: &widget::Tree, renderer: &mut Renderer, - theme: &::Theme, + theme: &Theme, style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, @@ -551,17 +553,17 @@ where } } -impl<'a, Highlighter, Message, Renderer> - From> - for Element<'a, Message, Renderer> +impl<'a, Highlighter, Message, Theme, Renderer> + From> + for Element<'a, Message, Theme, Renderer> where Highlighter: text::Highlighter, Message: 'a, + Theme: StyleSheet + 'a, Renderer: text::Renderer, - Renderer::Theme: StyleSheet, { fn from( - text_editor: TextEditor<'a, Highlighter, Message, Renderer>, + text_editor: TextEditor<'a, Highlighter, Message, Theme, Renderer>, ) -> Self { Self::new(text_editor) } -- cgit