summaryrefslogtreecommitdiffstats
path: root/examples/custom_widget
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-07-27 06:49:20 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-07-27 06:49:20 +0200
commitff2519b1d43d481987351a83b6dd7237524c21f0 (patch)
tree5731eeb7eb1247d4a8951de0d5bc5d8102640559 /examples/custom_widget
parentc44267b85f7aaa2997e3caf1323b837d95818c22 (diff)
downloadiced-ff2519b1d43d481987351a83b6dd7237524c21f0.tar.gz
iced-ff2519b1d43d481987351a83b6dd7237524c21f0.tar.bz2
iced-ff2519b1d43d481987351a83b6dd7237524c21f0.zip
Replace stateful widgets with new `iced_pure` API
Diffstat (limited to 'examples/custom_widget')
-rw-r--r--examples/custom_widget/src/main.rs53
1 files changed, 23 insertions, 30 deletions
diff --git a/examples/custom_widget/src/main.rs b/examples/custom_widget/src/main.rs
index d1a7bb06..c37a1a12 100644
--- a/examples/custom_widget/src/main.rs
+++ b/examples/custom_widget/src/main.rs
@@ -11,7 +11,8 @@ mod circle {
// implemented by `iced_wgpu` and other renderers.
use iced_native::layout::{self, Layout};
use iced_native::renderer;
- use iced_native::{Color, Element, Length, Point, Rectangle, Size, Widget};
+ use iced_native::widget::{self, Widget};
+ use iced_native::{Color, Element, Length, Point, Rectangle, Size};
pub struct Circle {
radius: f32,
@@ -23,6 +24,10 @@ mod circle {
}
}
+ pub fn circle(radius: f32) -> Circle {
+ Circle::new(radius)
+ }
+
impl<Message, Renderer> Widget<Message, Renderer> for Circle
where
Renderer: renderer::Renderer,
@@ -45,6 +50,7 @@ mod circle {
fn draw(
&self,
+ _state: &widget::Tree,
renderer: &mut Renderer,
_theme: &Renderer::Theme,
_style: &renderer::Style,
@@ -74,11 +80,9 @@ mod circle {
}
}
-use circle::Circle;
-use iced::{
- slider, Alignment, Column, Container, Element, Length, Sandbox, Settings,
- Slider, Text,
-};
+use circle::circle;
+use iced::widget::{column, container, slider, text};
+use iced::{Alignment, Element, Length, Sandbox, Settings};
pub fn main() -> iced::Result {
Example::run(Settings::default())
@@ -86,7 +90,6 @@ pub fn main() -> iced::Result {
struct Example {
radius: f32,
- slider: slider::State,
}
#[derive(Debug, Clone, Copy)]
@@ -98,10 +101,7 @@ impl Sandbox for Example {
type Message = Message;
fn new() -> Self {
- Example {
- radius: 50.0,
- slider: slider::State::new(),
- }
+ Example { radius: 50.0 }
}
fn title(&self) -> String {
@@ -116,25 +116,18 @@ impl Sandbox for Example {
}
}
- fn view(&mut self) -> Element<Message> {
- let content = Column::new()
- .padding(20)
- .spacing(20)
- .max_width(500)
- .align_items(Alignment::Center)
- .push(Circle::new(self.radius))
- .push(Text::new(format!("Radius: {:.2}", self.radius)))
- .push(
- Slider::new(
- &mut self.slider,
- 1.0..=100.0,
- self.radius,
- Message::RadiusChanged,
- )
- .step(0.01),
- );
-
- Container::new(content)
+ fn view(&self) -> Element<Message> {
+ let content = column![
+ circle(self.radius),
+ text(format!("Radius: {:.2}", self.radius)),
+ slider(1.0..=100.0, self.radius, Message::RadiusChanged).step(0.01),
+ ]
+ .padding(20)
+ .spacing(20)
+ .max_width(500)
+ .align_items(Alignment::Center);
+
+ container(content)
.width(Length::Fill)
.height(Length::Fill)
.center_x()