summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2025-01-16 12:07:41 +0000
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2025-01-16 12:07:41 +0000
commit10e5362c04b968e9e708287dece4b167d4040570 (patch)
treedd8acca8b905dae97ecd88e8e99eb33671050804 /examples
parentad34f03df4abb2c430bf6a4f5ac030d12d05863e (diff)
downloadiced-10e5362c04b968e9e708287dece4b167d4040570.tar.gz
iced-10e5362c04b968e9e708287dece4b167d4040570.tar.bz2
iced-10e5362c04b968e9e708287dece4b167d4040570.zip
Make numbers bigger and draw ticks in `clock` example
Diffstat (limited to 'examples')
-rw-r--r--examples/clock/src/main.rs51
1 files changed, 35 insertions, 16 deletions
diff --git a/examples/clock/src/main.rs b/examples/clock/src/main.rs
index a7e86ff1..0aa54d3a 100644
--- a/examples/clock/src/main.rs
+++ b/examples/clock/src/main.rs
@@ -1,11 +1,11 @@
-use iced::{alignment, Radians};
use iced::mouse;
use iced::time;
use iced::widget::canvas::{stroke, Cache, Geometry, LineCap, Path, Stroke};
use iced::widget::{canvas, container};
+use iced::{alignment, Radians};
use iced::{
- Degrees, Element, Fill, Font, Point, Rectangle, Renderer, Subscription,
- Theme, Vector,
+ Degrees, Element, Fill, Font, Point, Rectangle, Renderer, Size,
+ Subscription, Theme, Vector,
};
pub fn main() -> iced::Result {
@@ -117,9 +117,11 @@ impl<Message> canvas::Program<Message> 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;
-
+ 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(hour_hand_angle);
@@ -160,17 +162,16 @@ impl<Message> canvas::Program<Message> for Clock {
});
// 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();
+ for hour in 1..=12 {
+ let angle = Radians::from(hand_rotation(hour, 12))
+ - Radians::from(Degrees(90.0));
+ let x = radius * angle.0.cos();
+ let y = radius * 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),
+ content: format!("{}", hour),
+ size: (radius / 5.0).into(),
+ position: Point::new(x * 0.82, y * 0.82),
color: palette.secondary.strong.text,
horizontal_alignment: alignment::Horizontal::Center,
vertical_alignment: alignment::Vertical::Center,
@@ -178,11 +179,29 @@ impl<Message> canvas::Program<Message> for Clock {
..canvas::Text::default()
});
}
+
+ // Draw ticks
+ for tick in 0..60 {
+ let angle = Radians::from(hand_rotation(tick, 60))
+ - Radians::from(Degrees(90.0));
+
+ let width = if tick % 5 == 0 { 3.0 } else { 1.0 };
+
+ frame.with_save(|frame| {
+ frame.rotate(angle);
+ frame.fill(
+ &Path::rectangle(
+ Point::new(0.0, radius - 15.0),
+ Size::new(width, 7.0),
+ ),
+ palette.secondary.strong.text,
+ );
+ });
+ }
});
vec![clock]
}
-
}
fn hand_rotation(n: u32, total: u32) -> Degrees {