summaryrefslogtreecommitdiffstats
path: root/native/src/widget/radio.rs
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/widget/radio.rs')
-rw-r--r--native/src/widget/radio.rs39
1 files changed, 22 insertions, 17 deletions
diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs
index 5d936eaf..de7e2735 100644
--- a/native/src/widget/radio.rs
+++ b/native/src/widget/radio.rs
@@ -12,14 +12,14 @@ use crate::{
Shell, Widget,
};
-pub use iced_style::radio::{Style, StyleSheet};
+pub use iced_style::radio::{Appearance, StyleSheet};
/// A circular button representing a choice.
///
/// # Example
/// ```
-/// # type Radio<'a, Message> =
-/// # iced_native::widget::Radio<'a, Message, iced_native::renderer::Null>;
+/// # type Radio<Message> =
+/// # iced_native::widget::Radio<Message, iced_native::renderer::Null>;
/// #
/// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
/// pub enum Choice {
@@ -41,7 +41,11 @@ pub use iced_style::radio::{Style, StyleSheet};
///
/// ![Radio buttons drawn by `iced_wgpu`](https://github.com/iced-rs/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/radio.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct Radio<'a, Message, Renderer: text::Renderer> {
+pub struct Radio<Message, Renderer>
+where
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
+{
is_selected: bool,
on_click: Message,
label: String,
@@ -50,12 +54,14 @@ pub struct Radio<'a, Message, Renderer: text::Renderer> {
spacing: u16,
text_size: Option<u16>,
font: Renderer::Font,
- style_sheet: Box<dyn StyleSheet + 'a>,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<'a, Message, Renderer: text::Renderer> Radio<'a, Message, Renderer>
+impl<Message, Renderer> Radio<Message, Renderer>
where
Message: Clone,
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
/// The default size of a [`Radio`] button.
pub const DEFAULT_SIZE: u16 = 28;
@@ -90,7 +96,7 @@ where
spacing: Self::DEFAULT_SPACING, //15
text_size: None,
font: Default::default(),
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -127,18 +133,18 @@ where
/// Sets the style of the [`Radio`] button.
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
-impl<'a, Message, Renderer> Widget<Message, Renderer>
- for Radio<'a, Message, Renderer>
+impl<Message, Renderer> Widget<Message, Renderer> for Radio<Message, Renderer>
where
Message: Clone,
Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn width(&self) -> Length {
self.width
@@ -223,9 +229,9 @@ where
let mut children = layout.children();
let custom_style = if is_mouse_over {
- self.style_sheet.hovered()
+ theme.hovered(self.style)
} else {
- self.style_sheet.active()
+ theme.active(self.style)
};
{
@@ -281,15 +287,14 @@ where
}
}
-impl<'a, Message, Renderer> From<Radio<'a, Message, Renderer>>
+impl<'a, Message, Renderer> From<Radio<Message, Renderer>>
for Element<'a, Message, Renderer>
where
Message: 'a + Clone,
Renderer: 'a + text::Renderer,
+ Renderer::Theme: StyleSheet,
{
- fn from(
- radio: Radio<'a, Message, Renderer>,
- ) -> Element<'a, Message, Renderer> {
+ fn from(radio: Radio<Message, Renderer>) -> Element<'a, Message, Renderer> {
Element::new(radio)
}
}