Wire up styling to Radio in iced_native
This commit is contained in:
parent
cc560aca18
commit
d39ad717ed
11 changed files with 97 additions and 135 deletions
|
|
@ -11,12 +11,14 @@ use crate::{
|
|||
Rectangle, Row, Text, Widget,
|
||||
};
|
||||
|
||||
pub use iced_style::radio::{Style, StyleSheet};
|
||||
|
||||
/// A circular button representing a choice.
|
||||
///
|
||||
/// # Example
|
||||
/// ```
|
||||
/// # type Radio<Message> =
|
||||
/// # iced_native::Radio<Message, iced_native::renderer::Null>;
|
||||
/// # type Radio<'a, Message> =
|
||||
/// # iced_native::Radio<'a, Message, iced_native::renderer::Null>;
|
||||
/// #
|
||||
/// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
/// pub enum Choice {
|
||||
|
|
@ -38,7 +40,7 @@ use crate::{
|
|||
///
|
||||
/// 
|
||||
#[allow(missing_debug_implementations)]
|
||||
pub struct Radio<Message, Renderer: self::Renderer + renderer::Text> {
|
||||
pub struct Radio<'a, Message, Renderer: renderer::Text> {
|
||||
is_selected: bool,
|
||||
on_click: Message,
|
||||
label: String,
|
||||
|
|
@ -48,14 +50,19 @@ pub struct Radio<Message, Renderer: self::Renderer + renderer::Text> {
|
|||
text_size: Option<u16>,
|
||||
text_color: Option<Color>,
|
||||
font: Renderer::Font,
|
||||
style: Renderer::Style,
|
||||
style_sheet: &'a dyn StyleSheet,
|
||||
}
|
||||
|
||||
impl<Message, Renderer: self::Renderer + renderer::Text>
|
||||
Radio<Message, Renderer>
|
||||
impl<'a, Message, Renderer: renderer::Text> Radio<'a, Message, Renderer>
|
||||
where
|
||||
Message: Clone,
|
||||
{
|
||||
/// The default size of a [`Radio`] button.
|
||||
pub const DEFAULT_SIZE: u16 = 28;
|
||||
|
||||
/// The default spacing of a [`Radio`] button.
|
||||
pub const DEFAULT_SPACING: u16 = 15;
|
||||
|
||||
/// Creates a new [`Radio`] button.
|
||||
///
|
||||
/// It expects:
|
||||
|
|
@ -79,12 +86,12 @@ where
|
|||
on_click: f(value),
|
||||
label: label.into(),
|
||||
width: Length::Shrink,
|
||||
size: <Renderer as self::Renderer>::DEFAULT_SIZE,
|
||||
spacing: Renderer::DEFAULT_SPACING, //15
|
||||
size: Self::DEFAULT_SIZE,
|
||||
spacing: Self::DEFAULT_SPACING, //15
|
||||
text_size: None,
|
||||
text_color: None,
|
||||
font: Default::default(),
|
||||
style: Renderer::Style::default(),
|
||||
style_sheet: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -125,16 +132,17 @@ where
|
|||
}
|
||||
|
||||
/// Sets the style of the [`Radio`] button.
|
||||
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 Radio<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
for Radio<'a, Message, Renderer>
|
||||
where
|
||||
Message: Clone,
|
||||
Renderer: self::Renderer + renderer::Text,
|
||||
Renderer: renderer::Text,
|
||||
{
|
||||
fn width(&self) -> Length {
|
||||
self.width
|
||||
|
|
@ -198,36 +206,6 @@ where
|
|||
cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
// TODO
|
||||
// let bounds = layout.bounds();
|
||||
// let mut children = layout.children();
|
||||
|
||||
// let radio_layout = children.next().unwrap();
|
||||
// let label_layout = children.next().unwrap();
|
||||
// let radio_bounds = radio_layout.bounds();
|
||||
|
||||
// let label = text::Renderer::draw(
|
||||
// renderer,
|
||||
// defaults,
|
||||
// label_layout.bounds(),
|
||||
// &self.label,
|
||||
// self.text_size.unwrap_or(renderer.default_size()),
|
||||
// self.font,
|
||||
// self.text_color,
|
||||
// alignment::Horizontal::Left,
|
||||
// alignment::Vertical::Center,
|
||||
// );
|
||||
|
||||
// let is_mouse_over = bounds.contains(cursor_position);
|
||||
|
||||
// self::Renderer::draw(
|
||||
// renderer,
|
||||
// radio_bounds,
|
||||
// self.is_selected,
|
||||
// is_mouse_over,
|
||||
// label,
|
||||
// &self.style,
|
||||
// )
|
||||
}
|
||||
|
||||
fn hash_layout(&self, state: &mut Hasher) {
|
||||
|
|
@ -238,30 +216,15 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
/// The renderer of a [`Radio`] button.
|
||||
///
|
||||
/// Your [renderer] will need to implement this trait before being
|
||||
/// able to use a [`Radio`] button 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 [`Radio`] button.
|
||||
const DEFAULT_SIZE: u16;
|
||||
|
||||
/// The default spacing of a [`Radio`] button.
|
||||
const DEFAULT_SPACING: u16;
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> From<Radio<Message, Renderer>>
|
||||
impl<'a, Message, Renderer> From<Radio<'a, Message, Renderer>>
|
||||
for Element<'a, Message, Renderer>
|
||||
where
|
||||
Message: 'a + Clone,
|
||||
Renderer: 'a + self::Renderer + renderer::Text,
|
||||
Renderer: 'a + renderer::Text,
|
||||
{
|
||||
fn from(radio: Radio<Message, Renderer>) -> Element<'a, Message, Renderer> {
|
||||
fn from(
|
||||
radio: Radio<'a, Message, Renderer>,
|
||||
) -> Element<'a, Message, Renderer> {
|
||||
Element::new(radio)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue