2019-10-05 19:22:51 +02:00
|
|
|
use crate::{Primitive, Renderer};
|
2019-10-11 23:30:53 +02:00
|
|
|
use iced_native::{
|
2019-12-31 21:35:42 +01:00
|
|
|
checkbox, Background, Color, HorizontalAlignment, MouseCursor, Rectangle,
|
2019-11-21 13:47:20 +01:00
|
|
|
VerticalAlignment,
|
2019-10-11 23:30:53 +02:00
|
|
|
};
|
2019-10-05 19:22:51 +02:00
|
|
|
|
2019-10-13 18:10:12 +02:00
|
|
|
const SIZE: f32 = 28.0;
|
|
|
|
|
|
2019-10-05 19:22:51 +02:00
|
|
|
impl checkbox::Renderer for Renderer {
|
2019-11-21 13:47:20 +01:00
|
|
|
fn default_size(&self) -> u32 {
|
|
|
|
|
SIZE as u32
|
2019-10-05 19:22:51 +02:00
|
|
|
}
|
|
|
|
|
|
2019-11-21 13:47:20 +01:00
|
|
|
fn draw(
|
2019-10-05 19:22:51 +02:00
|
|
|
&mut self,
|
2019-11-21 13:47:20 +01:00
|
|
|
bounds: Rectangle,
|
|
|
|
|
is_checked: bool,
|
|
|
|
|
is_mouse_over: bool,
|
|
|
|
|
(label, _): Self::Output,
|
2019-10-11 22:15:39 +02:00
|
|
|
) -> Self::Output {
|
2019-12-31 21:35:42 +01:00
|
|
|
let checkbox = Primitive::Quad {
|
|
|
|
|
bounds,
|
|
|
|
|
background: Background::Color(
|
|
|
|
|
if is_mouse_over {
|
|
|
|
|
[0.90, 0.90, 0.90]
|
|
|
|
|
} else {
|
|
|
|
|
[0.95, 0.95, 0.95]
|
|
|
|
|
}
|
|
|
|
|
.into(),
|
|
|
|
|
),
|
|
|
|
|
border_radius: 5,
|
|
|
|
|
border_width: 1,
|
|
|
|
|
border_color: Color::from_rgb(0.6, 0.6, 0.6),
|
|
|
|
|
};
|
2019-10-13 18:10:12 +02:00
|
|
|
|
|
|
|
|
(
|
|
|
|
|
Primitive::Group {
|
2019-11-21 13:47:20 +01:00
|
|
|
primitives: if is_checked {
|
2019-11-14 03:34:41 +01:00
|
|
|
let check = Primitive::Text {
|
|
|
|
|
content: crate::text::CHECKMARK_ICON.to_string(),
|
|
|
|
|
font: crate::text::BUILTIN_ICONS,
|
2019-11-21 13:47:20 +01:00
|
|
|
size: bounds.height * 0.7,
|
|
|
|
|
bounds: bounds,
|
2019-11-14 03:34:41 +01:00
|
|
|
color: [0.3, 0.3, 0.3].into(),
|
|
|
|
|
horizontal_alignment: HorizontalAlignment::Center,
|
|
|
|
|
vertical_alignment: VerticalAlignment::Center,
|
|
|
|
|
};
|
2019-10-13 18:10:12 +02:00
|
|
|
|
2019-12-31 21:35:42 +01:00
|
|
|
vec![checkbox, check, label]
|
2019-10-13 18:10:12 +02:00
|
|
|
} else {
|
2019-12-31 21:35:42 +01:00
|
|
|
vec![checkbox, label]
|
2019-10-13 18:10:12 +02:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
if is_mouse_over {
|
|
|
|
|
MouseCursor::Pointer
|
|
|
|
|
} else {
|
|
|
|
|
MouseCursor::OutOfBounds
|
|
|
|
|
},
|
|
|
|
|
)
|
2019-10-05 19:22:51 +02:00
|
|
|
}
|
|
|
|
|
}
|