From ad34f03df4abb2c430bf6a4f5ac030d12d05863e Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sat, 19 Oct 2024 16:12:38 +1000 Subject: [PATCH] Modified clock example to make the clock more readable. Added numbers on the clock face and took the portion of the hour passed into consideration for the hour hand. It now looks like a reasonable clock. --- examples/clock/src/main.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/examples/clock/src/main.rs b/examples/clock/src/main.rs index ef3064c711..a7e86ff133 100644 --- a/examples/clock/src/main.rs +++ b/examples/clock/src/main.rs @@ -1,4 +1,4 @@ -use iced::alignment; +use iced::{alignment, Radians}; use iced::mouse; use iced::time; use iced::widget::canvas::{stroke, Cache, Geometry, LineCap, Path, Stroke}; @@ -117,9 +117,12 @@ impl canvas::Program for Clock { }; frame.translate(Vector::new(center.x, center.y)); + let minutes_portion = Radians::from(hand_rotation(self.now.minute(), 60)) / 12.0; + let hour_hand_angle = Radians::from(hand_rotation(self.now.hour(), 12)) + minutes_portion; + frame.with_save(|frame| { - frame.rotate(hand_rotation(self.now.hour(), 12)); + frame.rotate(hour_hand_angle); frame.stroke(&short_hand, wide_stroke()); }); @@ -155,10 +158,31 @@ impl canvas::Program for Clock { ..canvas::Text::default() }); }); + + // Draw clock numbers + for i in 1..=12 { + let distance_out = radius * 1.05; + let angle = + Radians::from(hand_rotation(i, 12)) - Radians::from(Degrees(90.0)); + let x = distance_out * angle.0.cos(); + let y = distance_out * angle.0.sin(); + + frame.fill_text(canvas::Text { + content: format!("{}", i), + size: (radius / 15.0).into(), + position: Point::new(x * 0.85, y * 0.85), + color: palette.secondary.strong.text, + horizontal_alignment: alignment::Horizontal::Center, + vertical_alignment: alignment::Vertical::Center, + font: Font::MONOSPACE, + ..canvas::Text::default() + }); + } }); vec![clock] } + } fn hand_rotation(n: u32, total: u32) -> Degrees {