summaryrefslogtreecommitdiffstats
path: root/native
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
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')
-rw-r--r--native/src/element.rs27
-rw-r--r--native/src/lib.rs12
-rw-r--r--native/src/style.rs4
-rw-r--r--native/src/widget.rs2
-rw-r--r--native/src/widget/button.rs26
-rw-r--r--native/src/widget/checkbox.rs4
-rw-r--r--native/src/widget/column.rs2
-rw-r--r--native/src/widget/image.rs4
-rw-r--r--native/src/widget/radio.rs4
-rw-r--r--native/src/widget/row.rs2
-rw-r--r--native/src/widget/slider.rs2
-rw-r--r--native/src/widget/text.rs2
12 files changed, 51 insertions, 40 deletions
diff --git a/native/src/element.rs b/native/src/element.rs
index 417e3463..cf96b7ea 100644
--- a/native/src/element.rs
+++ b/native/src/element.rs
@@ -41,6 +41,10 @@ where
}
}
+ pub fn node(&self, renderer: &Renderer) -> Node {
+ self.widget.node(renderer)
+ }
+
pub fn draw(
&self,
renderer: &mut Renderer,
@@ -97,22 +101,22 @@ where
///
/// ```
/// # mod counter {
- /// # use iced_native::{button, Button};
+ /// # use iced_native::{text, Text};
/// #
/// # #[derive(Debug, Clone, Copy)]
/// # pub enum Message {}
- /// # pub struct Counter(button::State);
+ /// # pub struct Counter;
/// #
/// # impl Counter {
- /// # pub fn view(&mut self) -> Button<Message> {
- /// # Button::new(&mut self.0, "_")
+ /// # pub fn view(&mut self) -> Text {
+ /// # Text::new("")
/// # }
/// # }
/// # }
/// #
/// # mod iced_wgpu {
/// # use iced_native::{
- /// # button, row, Button, Node, Point, Rectangle, Style, Layout, Row
+ /// # text, row, Text, Node, Point, Rectangle, Style, Layout, Row
/// # };
/// # pub struct Renderer;
/// #
@@ -127,16 +131,15 @@ where
/// # ) {}
/// # }
/// #
- /// # impl button::Renderer for Renderer {
- /// # fn node<Message>(&self, _button: &Button<'_, Message>) -> Node {
+ /// # impl text::Renderer for Renderer {
+ /// # fn node(&self, _text: &Text) -> Node {
/// # Node::new(Style::default())
/// # }
/// #
- /// # fn draw<Message>(
+ /// # fn draw(
/// # &mut self,
- /// # _button: &Button<'_, Message>,
+ /// # _text: &Text,
/// # _layout: Layout<'_>,
- /// # _cursor_position: Point,
/// # ) {}
/// # }
/// # }
@@ -289,7 +292,7 @@ where
A: Copy,
Renderer: crate::Renderer,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
self.widget.node(renderer)
}
@@ -359,7 +362,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where
Renderer: crate::Renderer + renderer::Debugger,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
self.element.widget.node(renderer)
}
diff --git a/native/src/lib.rs b/native/src/lib.rs
index 6067f49d..18ce3a37 100644
--- a/native/src/lib.rs
+++ b/native/src/lib.rs
@@ -89,14 +89,14 @@
//! # impl button::Renderer for Renderer {
//! # fn node<Message>(
//! # &self,
-//! # _button: &Button<'_, Message>
+//! # _button: &Button<'_, Message, Self>
//! # ) -> Node {
//! # Node::new(Style::default())
//! # }
//! #
//! # fn draw<Message>(
//! # &mut self,
-//! # _button: &Button<'_, Message>,
+//! # _button: &Button<'_, Message, Self>,
//! # _layout: Layout<'_>,
//! # _cursor_position: Point,
//! # ) {}
@@ -125,7 +125,7 @@
//! .push(
//! // The increment button. We tell it to produce an
//! // `IncrementPressed` message when pressed
-//! Button::new(&mut self.increment_button, "+")
+//! Button::new(&mut self.increment_button, Text::new("+"))
//! .on_press(Message::IncrementPressed),
//! )
//! .push(
@@ -135,7 +135,7 @@
//! .push(
//! // The decrement button. We tell it to produce a
//! // `DecrementPressed` message when pressed
-//! Button::new(&mut self.decrement_button, "-")
+//! Button::new(&mut self.decrement_button, Text::new("-"))
//! .on_press(Message::DecrementPressed),
//! )
//! }
@@ -212,7 +212,9 @@ mod user_interface;
pub(crate) use iced_core::Vector;
-pub use iced_core::{Align, Color, Justify, Length, Point, Rectangle};
+pub use iced_core::{
+ Align, Background, Color, Justify, Length, Point, Rectangle,
+};
#[doc(no_inline)]
pub use stretch::{geometry::Size, number::Number};
diff --git a/native/src/style.rs b/native/src/style.rs
index b1c49fd4..70a7ff74 100644
--- a/native/src/style.rs
+++ b/native/src/style.rs
@@ -74,12 +74,12 @@ impl Style {
self
}
- pub(crate) fn align_items(mut self, align: Align) -> Self {
+ pub fn align_items(mut self, align: Align) -> Self {
self.0.align_items = into_align_items(align);
self
}
- pub(crate) fn justify_content(mut self, justify: Justify) -> Self {
+ pub fn justify_content(mut self, justify: Justify) -> Self {
self.0.justify_content = into_justify_content(justify);
self
}
diff --git a/native/src/widget.rs b/native/src/widget.rs
index eff098a6..b7181c1b 100644
--- a/native/src/widget.rs
+++ b/native/src/widget.rs
@@ -67,7 +67,7 @@ where
/// [`Node`]: ../struct.Node.html
/// [`Widget`]: trait.Widget.html
/// [`Layout`]: ../struct.Layout.html
- fn node(&self, renderer: &mut Renderer) -> Node;
+ fn node(&self, renderer: &Renderer) -> Node;
/// Draws the [`Widget`] using the associated `Renderer`.
///
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)
}
}
diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs
index 1954305a..c069bfdc 100644
--- a/native/src/widget/checkbox.rs
+++ b/native/src/widget/checkbox.rs
@@ -10,7 +10,7 @@ impl<Message, Renderer> Widget<Message, Renderer> for Checkbox<Message>
where
Renderer: self::Renderer,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self)
}
@@ -64,7 +64,7 @@ pub trait Renderer: crate::Renderer {
///
/// [`Node`]: ../../struct.Node.html
/// [`Checkbox`]: struct.Checkbox.html
- fn node<Message>(&mut self, checkbox: &Checkbox<Message>) -> Node;
+ fn node<Message>(&self, checkbox: &Checkbox<Message>) -> Node;
/// Draws a [`Checkbox`].
///
diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs
index 6228d711..7e10e662 100644
--- a/native/src/widget/column.rs
+++ b/native/src/widget/column.rs
@@ -11,7 +11,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where
Renderer: self::Renderer,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
let mut children: Vec<Node> = self
.children
.iter()
diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs
index 2bce36c2..5197d5b1 100644
--- a/native/src/widget/image.rs
+++ b/native/src/widget/image.rs
@@ -11,7 +11,7 @@ where
Renderer: self::Renderer<I>,
I: Clone,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self)
}
@@ -45,7 +45,7 @@ pub trait Renderer<I>: crate::Renderer {
///
/// [`Node`]: ../../struct.Node.html
/// [`Image`]: struct.Image.html
- fn node(&mut self, image: &Image<I>) -> Node;
+ fn node(&self, image: &Image<I>) -> Node;
/// Draws an [`Image`].
///
diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs
index 1bc052aa..22308f81 100644
--- a/native/src/widget/radio.rs
+++ b/native/src/widget/radio.rs
@@ -11,7 +11,7 @@ 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)
}
@@ -61,7 +61,7 @@ pub trait Renderer: crate::Renderer {
///
/// [`Node`]: ../../struct.Node.html
/// [`Radio`]: struct.Radio.html
- fn node<Message>(&mut self, radio: &Radio<Message>) -> Node;
+ fn node<Message>(&self, radio: &Radio<Message>) -> Node;
/// Draws a [`Radio`] button.
///
diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs
index 9d023210..b1d4a5b2 100644
--- a/native/src/widget/row.rs
+++ b/native/src/widget/row.rs
@@ -11,7 +11,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where
Renderer: self::Renderer,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
let mut children: Vec<Node> = self
.children
.iter()
diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs
index 77095cb7..643efdf4 100644
--- a/native/src/widget/slider.rs
+++ b/native/src/widget/slider.rs
@@ -15,7 +15,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> for Slider<'a, Message>
where
Renderer: self::Renderer,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self)
}
diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs
index a032b4fc..62f2d7b7 100644
--- a/native/src/widget/text.rs
+++ b/native/src/widget/text.rs
@@ -9,7 +9,7 @@ impl<Message, Renderer> Widget<Message, Renderer> for Text
where
Renderer: self::Renderer,
{
- fn node(&self, renderer: &mut Renderer) -> Node {
+ fn node(&self, renderer: &Renderer) -> Node {
renderer.node(&self)
}