summaryrefslogtreecommitdiffstats
path: root/native/src/widget/button.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-10-08 03:13:41 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-10-08 03:13:41 +0200
commit10e10e5e06841574425d2633f1c2916733f7b4ff (patch)
tree0407a0136973a201fe44bfc1a94268544a2f8eb5 /native/src/widget/button.rs
parenta0234d5bcea5b25f575af01d3a8e0296b2d0395c (diff)
downloadiced-10e10e5e06841574425d2633f1c2916733f7b4ff.tar.gz
iced-10e10e5e06841574425d2633f1c2916733f7b4ff.tar.bz2
iced-10e10e5e06841574425d2633f1c2916733f7b4ff.zip
Make `iced_core::Button` customizable
Now it supports: - Any kind of content - Custom border radius - Custom background
Diffstat (limited to 'native/src/widget/button.rs')
-rw-r--r--native/src/widget/button.rs26
1 files changed, 16 insertions, 10 deletions
diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs
index 5ae4e045..1f881660 100644
--- a/native/src/widget/button.rs
+++ b/native/src/widget/button.rs
@@ -10,14 +10,18 @@ use crate::input::{mouse, ButtonState};
use crate::{Element, Event, Hasher, Layout, Node, Point, Widget};
use std::hash::Hash;
-pub use iced_core::button::*;
+pub use iced_core::button::State;
-impl<'a, Message, Renderer> Widget<Message, Renderer> for Button<'a, Message>
+pub type Button<'a, Message, Renderer> =
+ iced_core::Button<'a, Message, Element<'a, Message, Renderer>>;
+
+impl<'a, Message, Renderer> Widget<Message, Renderer>
+ for Button<'a, Message, Renderer>
where
Renderer: self::Renderer,
Message: Copy + std::fmt::Debug,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self)
}
@@ -68,9 +72,9 @@ where
}
fn hash_layout(&self, state: &mut Hasher) {
- self.label.hash(state);
self.width.hash(state);
self.align_self.hash(state);
+ self.content.hash_layout(state);
}
}
@@ -81,31 +85,33 @@ where
///
/// [`Button`]: struct.Button.html
/// [renderer]: ../../renderer/index.html
-pub trait Renderer: crate::Renderer {
+pub trait Renderer: crate::Renderer + Sized {
/// Creates a [`Node`] for the provided [`Button`].
///
/// [`Node`]: ../../struct.Node.html
/// [`Button`]: struct.Button.html
- fn node<Message>(&self, button: &Button<'_, Message>) -> Node;
+ fn node<Message>(&self, button: &Button<'_, Message, Self>) -> Node;
/// Draws a [`Button`].
///
/// [`Button`]: struct.Button.html
fn draw<Message>(
&mut self,
- button: &Button<'_, Message>,
+ button: &Button<'_, Message, Self>,
layout: Layout<'_>,
cursor_position: Point,
) -> Self::Primitive;
}
-impl<'a, Message, Renderer> From<Button<'a, Message>>
+impl<'a, Message, Renderer> From<Button<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: self::Renderer,
+ Renderer: 'static + self::Renderer,
Message: 'static + Copy + std::fmt::Debug,
{
- fn from(button: Button<'a, Message>) -> Element<'a, Message, Renderer> {
+ fn from(
+ button: Button<'a, Message, Renderer>,
+ ) -> Element<'a, Message, Renderer> {
Element::new(button)
}
}