summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-10-21 18:50:27 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-10-21 18:50:27 +0700
commit7c08c6bd138207b862933ee479752a4f1d18c4f2 (patch)
tree879d8a6676dfc36171217d9b44b6e111a95392ab
parentb6ae87ae55301d6c15f56e6c7df077aabe6383de (diff)
downloadiced-7c08c6bd138207b862933ee479752a4f1d18c4f2.tar.gz
iced-7c08c6bd138207b862933ee479752a4f1d18c4f2.tar.bz2
iced-7c08c6bd138207b862933ee479752a4f1d18c4f2.zip
Remove `Renderer` trait for `Checkbox`
-rw-r--r--examples/styling/src/main.rs6
-rw-r--r--glow/src/widget/checkbox.rs2
-rw-r--r--graphics/src/widget/checkbox.rs17
-rw-r--r--native/src/renderer/null.rs9
-rw-r--r--native/src/widget/checkbox.rs55
-rw-r--r--style/src/checkbox.rs13
-rw-r--r--web/src/widget/checkbox.rs18
-rw-r--r--wgpu/src/widget/checkbox.rs2
8 files changed, 40 insertions, 82 deletions
diff --git a/examples/styling/src/main.rs b/examples/styling/src/main.rs
index 7e9b01ab..5ce54e23 100644
--- a/examples/styling/src/main.rs
+++ b/examples/styling/src/main.rs
@@ -108,7 +108,7 @@ impl Sandbox for Styling {
"Check me!",
Message::CheckboxToggled,
)
- .style(self.theme);
+ .style(self.theme.into());
let toggler = Toggler::new(
self.toggler_value,
@@ -239,11 +239,11 @@ mod style {
}
}
- impl From<Theme> for Box<dyn checkbox::StyleSheet> {
+ impl From<Theme> for &'static dyn checkbox::StyleSheet {
fn from(theme: Theme) -> Self {
match theme {
Theme::Light => Default::default(),
- Theme::Dark => dark::Checkbox.into(),
+ Theme::Dark => &dark::Checkbox,
}
}
}
diff --git a/glow/src/widget/checkbox.rs b/glow/src/widget/checkbox.rs
index d27d77cc..9fd003d4 100644
--- a/glow/src/widget/checkbox.rs
+++ b/glow/src/widget/checkbox.rs
@@ -6,4 +6,4 @@ pub use iced_graphics::checkbox::{Style, StyleSheet};
/// A box that can be checked.
///
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
-pub type Checkbox<Message> = iced_native::Checkbox<Message, Renderer>;
+pub type Checkbox<'a, Message> = iced_native::Checkbox<'a, Message, Renderer>;
diff --git a/graphics/src/widget/checkbox.rs b/graphics/src/widget/checkbox.rs
index 3b756525..a458d85c 100644
--- a/graphics/src/widget/checkbox.rs
+++ b/graphics/src/widget/checkbox.rs
@@ -1,23 +1,10 @@
//! Show toggle controls using checkboxes.
-use crate::backend::{self, Backend};
use crate::Renderer;
-use iced_native::checkbox;
-
pub use iced_style::checkbox::{Style, StyleSheet};
/// A box that can be checked.
///
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
-pub type Checkbox<Message, Backend> =
- iced_native::Checkbox<Message, Renderer<Backend>>;
-
-impl<B> checkbox::Renderer for Renderer<B>
-where
- B: Backend + backend::Text,
-{
- type Style = Box<dyn StyleSheet>;
-
- const DEFAULT_SIZE: u16 = 20;
- const DEFAULT_SPACING: u16 = 15;
-}
+pub type Checkbox<'a, Message, Backend> =
+ iced_native::Checkbox<'a, Message, Renderer<Backend>>;
diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs
index 40fd5995..010305a2 100644
--- a/native/src/renderer/null.rs
+++ b/native/src/renderer/null.rs
@@ -1,7 +1,5 @@
-use crate::checkbox;
use crate::pane_grid;
use crate::progress_bar;
-use crate::radio;
use crate::renderer::{self, Renderer};
use crate::text;
use crate::toggler;
@@ -66,13 +64,6 @@ impl renderer::Text for Null {
fn fill_text(&mut self, _text: renderer::text::Section<'_, Self::Font>) {}
}
-impl checkbox::Renderer for Null {
- type Style = ();
-
- const DEFAULT_SIZE: u16 = 20;
- const DEFAULT_SPACING: u16 = 15;
-}
-
impl progress_bar::Renderer for Null {
type Style = ();
diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs
index c307d776..c1408d73 100644
--- a/native/src/widget/checkbox.rs
+++ b/native/src/widget/checkbox.rs
@@ -11,6 +11,8 @@ use crate::{
Rectangle, Row, Text, Widget,
};
+pub use iced_style::checkbox::{Style, StyleSheet};
+
/// A box that can be checked.
///
/// # Example
@@ -29,7 +31,7 @@ use crate::{
///
/// ![Checkbox drawn by `iced_wgpu`](https://github.com/hecrj/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/checkbox.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct Checkbox<Message, Renderer: self::Renderer + renderer::Text> {
+pub struct Checkbox<'a, Message, Renderer: renderer::Text> {
is_checked: bool,
on_toggle: Box<dyn Fn(bool) -> Message>,
label: String,
@@ -39,12 +41,16 @@ pub struct Checkbox<Message, Renderer: self::Renderer + renderer::Text> {
text_size: Option<u16>,
font: Renderer::Font,
text_color: Option<Color>,
- style: Renderer::Style,
+ style_sheet: &'a dyn StyleSheet,
}
-impl<Message, Renderer: self::Renderer + renderer::Text>
- Checkbox<Message, Renderer>
-{
+impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> {
+ /// The default size of a [`Checkbox`].
+ const DEFAULT_SIZE: u16 = 20;
+
+ /// The default spacing of a [`Checkbox`].
+ const DEFAULT_SPACING: u16 = 15;
+
/// Creates a new [`Checkbox`].
///
/// It expects:
@@ -62,12 +68,12 @@ impl<Message, Renderer: self::Renderer + renderer::Text>
on_toggle: Box::new(f),
label: label.into(),
width: Length::Shrink,
- size: <Renderer as self::Renderer>::DEFAULT_SIZE,
- spacing: Renderer::DEFAULT_SPACING,
+ size: Self::DEFAULT_SIZE,
+ spacing: Self::DEFAULT_SPACING,
text_size: None,
font: Renderer::Font::default(),
text_color: None,
- style: Renderer::Style::default(),
+ style_sheet: Default::default(),
}
}
@@ -110,16 +116,16 @@ impl<Message, Renderer: self::Renderer + renderer::Text>
}
/// Sets the style of the [`Checkbox`].
- pub fn style(mut self, style: impl Into<Renderer::Style>) -> Self {
- self.style = style.into();
+ pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self {
+ self.style_sheet = style_sheet;
self
}
}
-impl<Message, Renderer> Widget<Message, Renderer>
- for Checkbox<Message, Renderer>
+impl<'a, Message, Renderer> Widget<Message, Renderer>
+ for Checkbox<'a, Message, Renderer>
where
- Renderer: self::Renderer + renderer::Text,
+ Renderer: renderer::Text,
{
fn width(&self) -> Length {
self.width
@@ -218,31 +224,14 @@ where
}
}
-/// The renderer of a [`Checkbox`].
-///
-/// Your [renderer] will need to implement this trait before being
-/// able to use a [`Checkbox`] in your user interface.
-///
-/// [renderer]: crate::Renderer
-pub trait Renderer: crate::Renderer {
- /// The style supported by this renderer.
- type Style: Default;
-
- /// The default size of a [`Checkbox`].
- const DEFAULT_SIZE: u16;
-
- /// The default spacing of a [`Checkbox`].
- const DEFAULT_SPACING: u16;
-}
-
-impl<'a, Message, Renderer> From<Checkbox<Message, Renderer>>
+impl<'a, Message, Renderer> From<Checkbox<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + self::Renderer + renderer::Text,
+ Renderer: 'a + renderer::Text,
Message: 'a,
{
fn from(
- checkbox: Checkbox<Message, Renderer>,
+ checkbox: Checkbox<'a, Message, Renderer>,
) -> Element<'a, Message, Renderer> {
Element::new(checkbox)
}
diff --git a/style/src/checkbox.rs b/style/src/checkbox.rs
index 566136bb..4c88faaa 100644
--- a/style/src/checkbox.rs
+++ b/style/src/checkbox.rs
@@ -39,17 +39,8 @@ impl StyleSheet for Default {
}
}
-impl std::default::Default for Box<dyn StyleSheet> {
+impl std::default::Default for &'static dyn StyleSheet {
fn default() -> Self {
- Box::new(Default)
- }
-}
-
-impl<T> From<T> for Box<dyn StyleSheet>
-where
- T: 'static + StyleSheet,
-{
- fn from(style: T) -> Self {
- Box::new(style)
+ &Default
}
}
diff --git a/web/src/widget/checkbox.rs b/web/src/widget/checkbox.rs
index 43110aa7..095ef47d 100644
--- a/web/src/widget/checkbox.rs
+++ b/web/src/widget/checkbox.rs
@@ -24,17 +24,17 @@ use std::rc::Rc;
///
/// ![Checkbox drawn by Coffee's renderer](https://github.com/hecrj/coffee/blob/bda9818f823dfcb8a7ad0ff4940b4d4b387b5208/images/ui/checkbox.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct Checkbox<Message> {
+pub struct Checkbox<'a, Message> {
is_checked: bool,
on_toggle: Rc<dyn Fn(bool) -> Message>,
label: String,
id: Option<String>,
width: Length,
#[allow(dead_code)]
- style: Box<dyn StyleSheet>,
+ style_sheet: &'a dyn StyleSheet,
}
-impl<Message> Checkbox<Message> {
+impl<'a, Message> Checkbox<'a, Message> {
/// Creates a new [`Checkbox`].
///
/// It expects:
@@ -53,7 +53,7 @@ impl<Message> Checkbox<Message> {
label: label.into(),
id: None,
width: Length::Shrink,
- style: Default::default(),
+ style_sheet: Default::default(),
}
}
@@ -64,8 +64,8 @@ impl<Message> Checkbox<Message> {
}
/// Sets the style of the [`Checkbox`].
- pub fn style(mut self, style: impl Into<Box<dyn StyleSheet>>) -> Self {
- self.style = style.into();
+ pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self {
+ self.style_sheet = style_sheet;
self
}
@@ -76,7 +76,7 @@ impl<Message> Checkbox<Message> {
}
}
-impl<Message> Widget<Message> for Checkbox<Message>
+impl<'a, Message> Widget<Message> for Checkbox<'a, Message>
where
Message: 'static,
{
@@ -137,11 +137,11 @@ where
}
}
-impl<'a, Message> From<Checkbox<Message>> for Element<'a, Message>
+impl<'a, Message> From<Checkbox<'a, Message>> for Element<'a, Message>
where
Message: 'static,
{
- fn from(checkbox: Checkbox<Message>) -> Element<'a, Message> {
+ fn from(checkbox: Checkbox<'a, Message>) -> Element<'a, Message> {
Element::new(checkbox)
}
}
diff --git a/wgpu/src/widget/checkbox.rs b/wgpu/src/widget/checkbox.rs
index d27d77cc..9fd003d4 100644
--- a/wgpu/src/widget/checkbox.rs
+++ b/wgpu/src/widget/checkbox.rs
@@ -6,4 +6,4 @@ pub use iced_graphics::checkbox::{Style, StyleSheet};
/// A box that can be checked.
///
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
-pub type Checkbox<Message> = iced_native::Checkbox<Message, Renderer>;
+pub type Checkbox<'a, Message> = iced_native::Checkbox<'a, Message, Renderer>;