summaryrefslogtreecommitdiffstats
path: root/pure/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--pure/src/widget.rs13
-rw-r--r--pure/src/widget/checkbox.rs82
2 files changed, 95 insertions, 0 deletions
diff --git a/pure/src/widget.rs b/pure/src/widget.rs
index 9ab65614..3488f99d 100644
--- a/pure/src/widget.rs
+++ b/pure/src/widget.rs
@@ -1,4 +1,5 @@
mod button;
+mod checkbox;
mod column;
mod container;
mod element;
@@ -7,6 +8,7 @@ mod text;
mod tree;
pub use button::Button;
+pub use checkbox::Checkbox;
pub use column::Column;
pub use container::Container;
pub use element::Element;
@@ -105,3 +107,14 @@ where
{
Text::new(text)
}
+
+pub fn checkbox<'a, Message, Renderer>(
+ label: impl Into<String>,
+ is_checked: bool,
+ f: impl Fn(bool) -> Message + 'a,
+) -> Checkbox<'a, Message, Renderer>
+where
+ Renderer: iced_native::text::Renderer,
+{
+ Checkbox::new(is_checked, label, f)
+}
diff --git a/pure/src/widget/checkbox.rs b/pure/src/widget/checkbox.rs
new file mode 100644
index 00000000..8ee2b7bb
--- /dev/null
+++ b/pure/src/widget/checkbox.rs
@@ -0,0 +1,82 @@
+use crate::{Element, Tree, Widget};
+
+use iced_native::layout::{self, Layout};
+use iced_native::renderer;
+use iced_native::text;
+use iced_native::{Hasher, Length, Point, Rectangle};
+
+use std::any::{self, Any};
+
+pub use iced_native::widget::Checkbox;
+
+impl<'a, Message, Renderer> Widget<Message, Renderer>
+ for Checkbox<'a, Message, Renderer>
+where
+ Renderer: text::Renderer,
+{
+ fn tag(&self) -> any::TypeId {
+ any::TypeId::of::<()>()
+ }
+
+ fn state(&self) -> Box<dyn Any> {
+ Box::new(())
+ }
+
+ fn children(&self) -> &[Element<Message, Renderer>] {
+ &[]
+ }
+
+ fn width(&self) -> Length {
+ <Self as iced_native::Widget<Message, Renderer>>::width(self)
+ }
+
+ fn height(&self) -> Length {
+ <Self as iced_native::Widget<Message, Renderer>>::height(self)
+ }
+
+ fn layout(
+ &self,
+ renderer: &Renderer,
+ limits: &layout::Limits,
+ ) -> layout::Node {
+ <Self as iced_native::Widget<Message, Renderer>>::layout(
+ self, renderer, limits,
+ )
+ }
+
+ fn draw(
+ &self,
+ _tree: &Tree,
+ renderer: &mut Renderer,
+ style: &renderer::Style,
+ layout: Layout<'_>,
+ cursor_position: Point,
+ viewport: &Rectangle,
+ ) {
+ <Self as iced_native::Widget<Message, Renderer>>::draw(
+ self,
+ renderer,
+ style,
+ layout,
+ cursor_position,
+ viewport,
+ )
+ }
+
+ fn hash_layout(&self, state: &mut Hasher) {
+ <Self as iced_native::Widget<Message, Renderer>>::hash_layout(
+ self, state,
+ )
+ }
+}
+
+impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
+ for Checkbox<'a, Message, Renderer>
+where
+ Message: 'a,
+ Renderer: text::Renderer + 'a,
+{
+ fn into(self) -> Element<'a, Message, Renderer> {
+ Element::new(self)
+ }
+}