summaryrefslogtreecommitdiffstats
path: root/pure/src/widget/button.rs
diff options
context:
space:
mode:
Diffstat (limited to 'pure/src/widget/button.rs')
-rw-r--r--pure/src/widget/button.rs31
1 files changed, 22 insertions, 9 deletions
diff --git a/pure/src/widget/button.rs b/pure/src/widget/button.rs
index 456c2509..dd7688e2 100644
--- a/pure/src/widget/button.rs
+++ b/pure/src/widget/button.rs
@@ -12,7 +12,7 @@ use iced_native::{
Clipboard, Layout, Length, Padding, Point, Rectangle, Shell,
};
-pub use iced_style::button::{Style, StyleSheet};
+pub use iced_style::button::{Appearance, StyleSheet};
use button::State;
@@ -50,25 +50,33 @@ use button::State;
/// disabled_button().on_press(Message::ButtonPressed)
/// }
/// ```
-pub struct Button<'a, Message, Renderer> {
+pub struct Button<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
+{
content: Element<'a, Message, Renderer>,
on_press: Option<Message>,
- style_sheet: Box<dyn StyleSheet + 'a>,
width: Length,
height: Length,
padding: Padding,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<'a, Message, Renderer> Button<'a, Message, Renderer> {
+impl<'a, Message, Renderer> Button<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
+{
/// Creates a new [`Button`] with the given content.
pub fn new(content: impl Into<Element<'a, Message, Renderer>>) -> Self {
Button {
content: content.into(),
on_press: None,
- style_sheet: Default::default(),
width: Length::Shrink,
height: Length::Shrink,
padding: Padding::new(5),
+ style: <Renderer::Theme as StyleSheet>::Style::default(),
}
}
@@ -98,12 +106,12 @@ impl<'a, Message, Renderer> Button<'a, Message, Renderer> {
self
}
- /// Sets the style of the [`Button`].
+ /// Sets the style variant of this [`Button`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: <Renderer::Theme as StyleSheet>::Style,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style;
self
}
}
@@ -113,6 +121,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where
Message: 'a + Clone,
Renderer: 'a + iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<State>()
@@ -191,6 +200,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -204,13 +214,15 @@ where
bounds,
cursor_position,
self.on_press.is_some(),
- self.style_sheet.as_ref(),
+ theme,
+ self.style,
|| tree.state.downcast_ref::<State>(),
);
self.content.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
&renderer::Style {
text_color: styling.text_color,
},
@@ -254,6 +266,7 @@ impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
where
Message: Clone + 'a,
Renderer: iced_native::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)