From 664251f3f5c7b76f69a97683af1468094bba887f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 14 May 2022 01:47:55 +0200 Subject: Draft first-class `Theme` support RFC: https://github.com/iced-rs/rfcs/pull/6 --- native/src/overlay/menu.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'native/src/overlay/menu.rs') diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 13fa7beb..78d65d13 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -241,6 +241,7 @@ where fn draw( &self, renderer: &mut Renderer, + theme: &Renderer::Theme, style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, @@ -257,8 +258,14 @@ where self.style.background, ); - self.container - .draw(renderer, style, layout, cursor_position, &bounds); + self.container.draw( + renderer, + theme, + style, + layout, + cursor_position, + &bounds, + ); } } @@ -389,6 +396,7 @@ where fn draw( &self, renderer: &mut Renderer, + _theme: &Renderer::Theme, _style: &renderer::Style, layout: Layout<'_>, _cursor_position: Point, -- cgit From de21a651c0616307bb6bfd36da1a06119e629b10 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 7 Jun 2022 03:26:48 +0200 Subject: Implement theme styling for `Scrollable` --- native/src/overlay/menu.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'native/src/overlay/menu.rs') diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 78d65d13..36dc8f03 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -34,6 +34,7 @@ impl<'a, T, Renderer> Menu<'a, T, Renderer> where T: ToString + Clone, Renderer: text::Renderer + 'a, + Renderer::Theme: scrollable::StyleSheet, { /// Creates a new [`Menu`] with the given [`State`], a list of options, and /// the message to produced when an option is selected. @@ -117,17 +118,19 @@ impl State { } } -struct Overlay<'a, Message, Renderer: text::Renderer> { +struct Overlay<'a, Message, Renderer> { container: Container<'a, Message, Renderer>, width: u16, target_height: f32, style: Style, } -impl<'a, Message, Renderer: text::Renderer> Overlay<'a, Message, Renderer> +impl<'a, Message, Renderer> Overlay<'a, Message, Renderer> where Message: 'a, Renderer: 'a, + Renderer: text::Renderer, + Renderer::Theme: scrollable::StyleSheet, { pub fn new(menu: Menu<'a, T, Renderer>, target_height: f32) -> Self where -- cgit From 97555e67af8b4bcc77df69c5e72156e14948150e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 7 Jun 2022 04:11:24 +0200 Subject: Implement theme styling for `Container` --- native/src/overlay/menu.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'native/src/overlay/menu.rs') diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 36dc8f03..fdb68247 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -7,8 +7,8 @@ use crate::overlay; use crate::renderer; use crate::text::{self, Text}; use crate::touch; +use crate::widget::container::{self, Container}; use crate::widget::scrollable::{self, Scrollable}; -use crate::widget::Container; use crate::{ Clipboard, Color, Element, Layout, Length, Padding, Point, Rectangle, Shell, Size, Vector, Widget, @@ -34,7 +34,7 @@ impl<'a, T, Renderer> Menu<'a, T, Renderer> where T: ToString + Clone, Renderer: text::Renderer + 'a, - Renderer::Theme: scrollable::StyleSheet, + Renderer::Theme: container::StyleSheet + scrollable::StyleSheet, { /// Creates a new [`Menu`] with the given [`State`], a list of options, and /// the message to produced when an option is selected. @@ -118,7 +118,11 @@ impl State { } } -struct Overlay<'a, Message, Renderer> { +struct Overlay<'a, Message, Renderer> +where + Renderer: crate::Renderer, + Renderer::Theme: container::StyleSheet, +{ container: Container<'a, Message, Renderer>, width: u16, target_height: f32, @@ -130,7 +134,7 @@ where Message: 'a, Renderer: 'a, Renderer: text::Renderer, - Renderer::Theme: scrollable::StyleSheet, + Renderer::Theme: container::StyleSheet + scrollable::StyleSheet, { pub fn new(menu: Menu<'a, T, Renderer>, target_height: f32) -> Self where @@ -173,6 +177,7 @@ impl<'a, Message, Renderer> crate::Overlay for Overlay<'a, Message, Renderer> where Renderer: text::Renderer, + Renderer::Theme: container::StyleSheet, { fn layout( &self, -- cgit From 396735b682433928f52ba777891e14f2fbc703c7 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 7 Jun 2022 04:51:44 +0200 Subject: Implement theme styling for `PickList` and `Menu` --- native/src/overlay/menu.rs | 63 ++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 22 deletions(-) (limited to 'native/src/overlay/menu.rs') diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index fdb68247..979a13c3 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -14,11 +14,15 @@ use crate::{ Shell, Size, Vector, Widget, }; -pub use iced_style::menu::Style; +pub use iced_style::menu::{Appearance, StyleSheet}; /// A list of selectable options. #[allow(missing_debug_implementations)] -pub struct Menu<'a, T, Renderer: text::Renderer> { +pub struct Menu<'a, T, Renderer> +where + Renderer: text::Renderer, + Renderer::Theme: StyleSheet, +{ state: &'a mut State, options: &'a [T], hovered_option: &'a mut Option, @@ -27,14 +31,15 @@ pub struct Menu<'a, T, Renderer: text::Renderer> { padding: Padding, text_size: Option, font: Renderer::Font, - style: Style, + style: ::Style, } impl<'a, T, Renderer> Menu<'a, T, Renderer> where T: ToString + Clone, Renderer: text::Renderer + 'a, - Renderer::Theme: container::StyleSheet + scrollable::StyleSheet, + Renderer::Theme: + StyleSheet + container::StyleSheet + scrollable::StyleSheet, { /// Creates a new [`Menu`] with the given [`State`], a list of options, and /// the message to produced when an option is selected. @@ -82,7 +87,10 @@ where } /// Sets the style of the [`Menu`]. - pub fn style(mut self, style: impl Into