Replace chrono with time in clock example

This commit is contained in:
Héctor Ramón Jiménez 2022-01-12 20:16:33 +07:00
parent 8f97619785
commit aaf2444e9f
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 14 additions and 11 deletions

View file

@ -7,4 +7,4 @@ publish = false
[dependencies] [dependencies]
iced = { path = "../..", features = ["canvas", "tokio", "debug"] } iced = { path = "../..", features = ["canvas", "tokio", "debug"] }
chrono = "0.4" time = { version = "0.3.5", features = ["local-offset"] }

View file

@ -1,7 +1,7 @@
use iced::{ use iced::{
canvas::{self, Cache, Canvas, Cursor, Geometry, LineCap, Path, Stroke}, canvas::{self, Cache, Canvas, Cursor, Geometry, LineCap, Path, Stroke},
executor, time, Application, Color, Command, Container, Element, Length, executor, Application, Color, Command, Container, Element, Length, Point,
Point, Rectangle, Settings, Subscription, Vector, Rectangle, Settings, Subscription, Vector,
}; };
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
@ -12,13 +12,13 @@ pub fn main() -> iced::Result {
} }
struct Clock { struct Clock {
now: chrono::DateTime<chrono::Local>, now: time::OffsetDateTime,
clock: Cache, clock: Cache,
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
enum Message { enum Message {
Tick(chrono::DateTime<chrono::Local>), Tick(time::OffsetDateTime),
} }
impl Application for Clock { impl Application for Clock {
@ -29,7 +29,8 @@ impl Application for Clock {
fn new(_flags: ()) -> (Self, Command<Message>) { fn new(_flags: ()) -> (Self, Command<Message>) {
( (
Clock { Clock {
now: chrono::Local::now(), now: time::OffsetDateTime::now_local()
.unwrap_or_else(|_| time::OffsetDateTime::now_utc()),
clock: Default::default(), clock: Default::default(),
}, },
Command::none(), Command::none(),
@ -56,8 +57,12 @@ impl Application for Clock {
} }
fn subscription(&self) -> Subscription<Message> { fn subscription(&self) -> Subscription<Message> {
time::every(std::time::Duration::from_millis(500)) iced::time::every(std::time::Duration::from_millis(500)).map(|_| {
.map(|_| Message::Tick(chrono::Local::now())) Message::Tick(
time::OffsetDateTime::now_local()
.unwrap_or_else(|_| time::OffsetDateTime::now_utc()),
)
})
} }
fn view(&mut self) -> Element<Message> { fn view(&mut self) -> Element<Message> {
@ -77,8 +82,6 @@ impl Application for Clock {
impl canvas::Program<Message> for Clock { impl canvas::Program<Message> for Clock {
fn draw(&self, bounds: Rectangle, _cursor: Cursor) -> Vec<Geometry> { fn draw(&self, bounds: Rectangle, _cursor: Cursor) -> Vec<Geometry> {
use chrono::Timelike;
let clock = self.clock.draw(bounds.size(), |frame| { let clock = self.clock.draw(bounds.size(), |frame| {
let center = frame.center(); let center = frame.center();
let radius = frame.width().min(frame.height()) / 2.0; let radius = frame.width().min(frame.height()) / 2.0;
@ -126,7 +129,7 @@ impl canvas::Program<Message> for Clock {
} }
} }
fn hand_rotation(n: u32, total: u32) -> f32 { fn hand_rotation(n: u8, total: u8) -> f32 {
let turns = n as f32 / total as f32; let turns = n as f32 / total as f32;
2.0 * std::f32::consts::PI * turns 2.0 * std::f32::consts::PI * turns