Remove Renderer trait for Checkbox
This commit is contained in:
parent
b6ae87ae55
commit
7c08c6bd13
8 changed files with 40 additions and 82 deletions
|
|
@ -108,7 +108,7 @@ impl Sandbox for Styling {
|
||||||
"Check me!",
|
"Check me!",
|
||||||
Message::CheckboxToggled,
|
Message::CheckboxToggled,
|
||||||
)
|
)
|
||||||
.style(self.theme);
|
.style(self.theme.into());
|
||||||
|
|
||||||
let toggler = Toggler::new(
|
let toggler = Toggler::new(
|
||||||
self.toggler_value,
|
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 {
|
fn from(theme: Theme) -> Self {
|
||||||
match theme {
|
match theme {
|
||||||
Theme::Light => Default::default(),
|
Theme::Light => Default::default(),
|
||||||
Theme::Dark => dark::Checkbox.into(),
|
Theme::Dark => &dark::Checkbox,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,4 @@ pub use iced_graphics::checkbox::{Style, StyleSheet};
|
||||||
/// A box that can be checked.
|
/// A box that can be checked.
|
||||||
///
|
///
|
||||||
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
|
/// 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>;
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,10 @@
|
||||||
//! Show toggle controls using checkboxes.
|
//! Show toggle controls using checkboxes.
|
||||||
use crate::backend::{self, Backend};
|
|
||||||
use crate::Renderer;
|
use crate::Renderer;
|
||||||
|
|
||||||
use iced_native::checkbox;
|
|
||||||
|
|
||||||
pub use iced_style::checkbox::{Style, StyleSheet};
|
pub use iced_style::checkbox::{Style, StyleSheet};
|
||||||
|
|
||||||
/// A box that can be checked.
|
/// A box that can be checked.
|
||||||
///
|
///
|
||||||
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
|
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
|
||||||
pub type Checkbox<Message, Backend> =
|
pub type Checkbox<'a, Message, Backend> =
|
||||||
iced_native::Checkbox<Message, Renderer<Backend>>;
|
iced_native::Checkbox<'a, 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;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
use crate::checkbox;
|
|
||||||
use crate::pane_grid;
|
use crate::pane_grid;
|
||||||
use crate::progress_bar;
|
use crate::progress_bar;
|
||||||
use crate::radio;
|
|
||||||
use crate::renderer::{self, Renderer};
|
use crate::renderer::{self, Renderer};
|
||||||
use crate::text;
|
use crate::text;
|
||||||
use crate::toggler;
|
use crate::toggler;
|
||||||
|
|
@ -66,13 +64,6 @@ impl renderer::Text for Null {
|
||||||
fn fill_text(&mut self, _text: renderer::text::Section<'_, Self::Font>) {}
|
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 {
|
impl progress_bar::Renderer for Null {
|
||||||
type Style = ();
|
type Style = ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ use crate::{
|
||||||
Rectangle, Row, Text, Widget,
|
Rectangle, Row, Text, Widget,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub use iced_style::checkbox::{Style, StyleSheet};
|
||||||
|
|
||||||
/// A box that can be checked.
|
/// A box that can be checked.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
|
|
@ -29,7 +31,7 @@ use crate::{
|
||||||
///
|
///
|
||||||
/// 
|
/// 
|
||||||
#[allow(missing_debug_implementations)]
|
#[allow(missing_debug_implementations)]
|
||||||
pub struct Checkbox<Message, Renderer: self::Renderer + renderer::Text> {
|
pub struct Checkbox<'a, Message, Renderer: renderer::Text> {
|
||||||
is_checked: bool,
|
is_checked: bool,
|
||||||
on_toggle: Box<dyn Fn(bool) -> Message>,
|
on_toggle: Box<dyn Fn(bool) -> Message>,
|
||||||
label: String,
|
label: String,
|
||||||
|
|
@ -39,12 +41,16 @@ pub struct Checkbox<Message, Renderer: self::Renderer + renderer::Text> {
|
||||||
text_size: Option<u16>,
|
text_size: Option<u16>,
|
||||||
font: Renderer::Font,
|
font: Renderer::Font,
|
||||||
text_color: Option<Color>,
|
text_color: Option<Color>,
|
||||||
style: Renderer::Style,
|
style_sheet: &'a dyn StyleSheet,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Message, Renderer: self::Renderer + renderer::Text>
|
impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> {
|
||||||
Checkbox<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`].
|
/// Creates a new [`Checkbox`].
|
||||||
///
|
///
|
||||||
/// It expects:
|
/// It expects:
|
||||||
|
|
@ -62,12 +68,12 @@ impl<Message, Renderer: self::Renderer + renderer::Text>
|
||||||
on_toggle: Box::new(f),
|
on_toggle: Box::new(f),
|
||||||
label: label.into(),
|
label: label.into(),
|
||||||
width: Length::Shrink,
|
width: Length::Shrink,
|
||||||
size: <Renderer as self::Renderer>::DEFAULT_SIZE,
|
size: Self::DEFAULT_SIZE,
|
||||||
spacing: Renderer::DEFAULT_SPACING,
|
spacing: Self::DEFAULT_SPACING,
|
||||||
text_size: None,
|
text_size: None,
|
||||||
font: Renderer::Font::default(),
|
font: Renderer::Font::default(),
|
||||||
text_color: None,
|
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`].
|
/// Sets the style of the [`Checkbox`].
|
||||||
pub fn style(mut self, style: impl Into<Renderer::Style>) -> Self {
|
pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self {
|
||||||
self.style = style.into();
|
self.style_sheet = style_sheet;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Message, Renderer> Widget<Message, Renderer>
|
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||||
for Checkbox<Message, Renderer>
|
for Checkbox<'a, Message, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: self::Renderer + renderer::Text,
|
Renderer: renderer::Text,
|
||||||
{
|
{
|
||||||
fn width(&self) -> Length {
|
fn width(&self) -> Length {
|
||||||
self.width
|
self.width
|
||||||
|
|
@ -218,31 +224,14 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The renderer of a [`Checkbox`].
|
impl<'a, Message, Renderer> From<Checkbox<'a, Message, Renderer>>
|
||||||
///
|
|
||||||
/// 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>>
|
|
||||||
for Element<'a, Message, Renderer>
|
for Element<'a, Message, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: 'a + self::Renderer + renderer::Text,
|
Renderer: 'a + renderer::Text,
|
||||||
Message: 'a,
|
Message: 'a,
|
||||||
{
|
{
|
||||||
fn from(
|
fn from(
|
||||||
checkbox: Checkbox<Message, Renderer>,
|
checkbox: Checkbox<'a, Message, Renderer>,
|
||||||
) -> Element<'a, Message, Renderer> {
|
) -> Element<'a, Message, Renderer> {
|
||||||
Element::new(checkbox)
|
Element::new(checkbox)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
fn default() -> Self {
|
||||||
Box::new(Default)
|
&Default
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T> From<T> for Box<dyn StyleSheet>
|
|
||||||
where
|
|
||||||
T: 'static + StyleSheet,
|
|
||||||
{
|
|
||||||
fn from(style: T) -> Self {
|
|
||||||
Box::new(style)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,17 +24,17 @@ use std::rc::Rc;
|
||||||
///
|
///
|
||||||
/// 
|
/// 
|
||||||
#[allow(missing_debug_implementations)]
|
#[allow(missing_debug_implementations)]
|
||||||
pub struct Checkbox<Message> {
|
pub struct Checkbox<'a, Message> {
|
||||||
is_checked: bool,
|
is_checked: bool,
|
||||||
on_toggle: Rc<dyn Fn(bool) -> Message>,
|
on_toggle: Rc<dyn Fn(bool) -> Message>,
|
||||||
label: String,
|
label: String,
|
||||||
id: Option<String>,
|
id: Option<String>,
|
||||||
width: Length,
|
width: Length,
|
||||||
#[allow(dead_code)]
|
#[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`].
|
/// Creates a new [`Checkbox`].
|
||||||
///
|
///
|
||||||
/// It expects:
|
/// It expects:
|
||||||
|
|
@ -53,7 +53,7 @@ impl<Message> Checkbox<Message> {
|
||||||
label: label.into(),
|
label: label.into(),
|
||||||
id: None,
|
id: None,
|
||||||
width: Length::Shrink,
|
width: Length::Shrink,
|
||||||
style: Default::default(),
|
style_sheet: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,8 +64,8 @@ impl<Message> Checkbox<Message> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the style of the [`Checkbox`].
|
/// Sets the style of the [`Checkbox`].
|
||||||
pub fn style(mut self, style: impl Into<Box<dyn StyleSheet>>) -> Self {
|
pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self {
|
||||||
self.style = style.into();
|
self.style_sheet = style_sheet;
|
||||||
self
|
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
|
where
|
||||||
Message: 'static,
|
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
|
where
|
||||||
Message: 'static,
|
Message: 'static,
|
||||||
{
|
{
|
||||||
fn from(checkbox: Checkbox<Message>) -> Element<'a, Message> {
|
fn from(checkbox: Checkbox<'a, Message>) -> Element<'a, Message> {
|
||||||
Element::new(checkbox)
|
Element::new(checkbox)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,4 @@ pub use iced_graphics::checkbox::{Style, StyleSheet};
|
||||||
/// A box that can be checked.
|
/// A box that can be checked.
|
||||||
///
|
///
|
||||||
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
|
/// 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>;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue