summaryrefslogtreecommitdiffstats
path: root/web/src/widget
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-01-13 06:58:48 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-01-13 06:58:48 +0100
commit361be7f6b7e93c7162281a107c3070b736ba692e (patch)
treef45e81c873014b0ff0d22d5d10f3b3c3cc21086e /web/src/widget
parentb5cd9923f2e8f0d8d0b8145960e00084a27b6867 (diff)
downloadiced-361be7f6b7e93c7162281a107c3070b736ba692e.tar.gz
iced-361be7f6b7e93c7162281a107c3070b736ba692e.tar.bz2
iced-361be7f6b7e93c7162281a107c3070b736ba692e.zip
Remove `Message: Clone` bound in some web widgets
Diffstat (limited to 'web/src/widget')
-rw-r--r--web/src/widget/checkbox.rs15
-rw-r--r--web/src/widget/scrollable.rs2
-rw-r--r--web/src/widget/slider.rs4
-rw-r--r--web/src/widget/text_input.rs2
4 files changed, 13 insertions, 10 deletions
diff --git a/web/src/widget/checkbox.rs b/web/src/widget/checkbox.rs
index b81a0d52..34d13a1b 100644
--- a/web/src/widget/checkbox.rs
+++ b/web/src/widget/checkbox.rs
@@ -1,6 +1,7 @@
use crate::{style, Bus, Color, Element, Widget};
use dodrio::bumpalo;
+use std::rc::Rc;
/// A box that can be checked.
///
@@ -22,7 +23,7 @@ use dodrio::bumpalo;
#[allow(missing_debug_implementations)]
pub struct Checkbox<Message> {
is_checked: bool,
- on_toggle: Box<dyn Fn(bool) -> Message>,
+ on_toggle: Rc<dyn Fn(bool) -> Message>,
label: String,
label_color: Option<Color>,
}
@@ -44,7 +45,7 @@ impl<Message> Checkbox<Message> {
{
Checkbox {
is_checked,
- on_toggle: Box::new(f),
+ on_toggle: Rc::new(f),
label: String::from(label),
label_color: None,
}
@@ -61,7 +62,7 @@ impl<Message> Checkbox<Message> {
impl<Message> Widget<Message> for Checkbox<Message>
where
- Message: 'static + Clone,
+ Message: 'static,
{
fn node<'b>(
&self,
@@ -74,7 +75,8 @@ where
let checkbox_label = bumpalo::format!(in bump, "{}", self.label);
let event_bus = bus.clone();
- let msg = (self.on_toggle)(!self.is_checked);
+ let on_toggle = self.on_toggle.clone();
+ let is_checked = self.is_checked;
// TODO: Complete styling
label(bump)
@@ -83,7 +85,8 @@ where
.attr("type", "checkbox")
.bool_attr("checked", self.is_checked)
.on("click", move |root, vdom, _event| {
- event_bus.publish(msg.clone(), root);
+ let msg = on_toggle(!is_checked);
+ event_bus.publish(msg, root);
vdom.schedule_render();
})
@@ -96,7 +99,7 @@ where
impl<'a, Message> From<Checkbox<Message>> for Element<'a, Message>
where
- Message: 'static + Clone,
+ Message: 'static,
{
fn from(checkbox: Checkbox<Message>) -> Element<'a, Message> {
Element::new(checkbox)
diff --git a/web/src/widget/scrollable.rs b/web/src/widget/scrollable.rs
index 710bb70a..f146e007 100644
--- a/web/src/widget/scrollable.rs
+++ b/web/src/widget/scrollable.rs
@@ -134,7 +134,7 @@ where
impl<'a, Message> From<Scrollable<'a, Message>> for Element<'a, Message>
where
- Message: 'static + Clone,
+ Message: 'static,
{
fn from(scrollable: Scrollable<'a, Message>) -> Element<'a, Message> {
Element::new(scrollable)
diff --git a/web/src/widget/slider.rs b/web/src/widget/slider.rs
index 5b203e07..fc955781 100644
--- a/web/src/widget/slider.rs
+++ b/web/src/widget/slider.rs
@@ -82,7 +82,7 @@ impl<'a, Message> Slider<'a, Message> {
impl<'a, Message> Widget<Message> for Slider<'a, Message>
where
- Message: 'static + Clone,
+ Message: 'static,
{
fn node<'b>(
&self,
@@ -130,7 +130,7 @@ where
impl<'a, Message> From<Slider<'a, Message>> for Element<'a, Message>
where
- Message: 'static + Clone,
+ Message: 'static,
{
fn from(slider: Slider<'a, Message>) -> Element<'a, Message> {
Element::new(slider)
diff --git a/web/src/widget/text_input.rs b/web/src/widget/text_input.rs
index eedc25bc..a478874a 100644
--- a/web/src/widget/text_input.rs
+++ b/web/src/widget/text_input.rs
@@ -82,7 +82,7 @@ impl<'a, Message> TextInput<'a, Message> {
self.is_secure = true;
self
}
-
+
/// Sets the width of the [`TextInput`].
///
/// [`TextInput`]: struct.TextInput.html