Make numbers bigger and draw ticks in clock example
This commit is contained in:
parent
ad34f03df4
commit
10e5362c04
1 changed files with 35 additions and 16 deletions
|
|
@ -1,11 +1,11 @@
|
||||||
use iced::{alignment, Radians};
|
|
||||||
use iced::mouse;
|
use iced::mouse;
|
||||||
use iced::time;
|
use iced::time;
|
||||||
use iced::widget::canvas::{stroke, Cache, Geometry, LineCap, Path, Stroke};
|
use iced::widget::canvas::{stroke, Cache, Geometry, LineCap, Path, Stroke};
|
||||||
use iced::widget::{canvas, container};
|
use iced::widget::{canvas, container};
|
||||||
|
use iced::{alignment, Radians};
|
||||||
use iced::{
|
use iced::{
|
||||||
Degrees, Element, Fill, Font, Point, Rectangle, Renderer, Subscription,
|
Degrees, Element, Fill, Font, Point, Rectangle, Renderer, Size,
|
||||||
Theme, Vector,
|
Subscription, Theme, Vector,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn main() -> iced::Result {
|
pub fn main() -> iced::Result {
|
||||||
|
|
@ -117,9 +117,11 @@ impl<Message> canvas::Program<Message> for Clock {
|
||||||
};
|
};
|
||||||
|
|
||||||
frame.translate(Vector::new(center.x, center.y));
|
frame.translate(Vector::new(center.x, center.y));
|
||||||
let minutes_portion = Radians::from(hand_rotation(self.now.minute(), 60)) / 12.0;
|
let minutes_portion =
|
||||||
let hour_hand_angle = Radians::from(hand_rotation(self.now.hour(), 12)) + 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.with_save(|frame| {
|
||||||
frame.rotate(hour_hand_angle);
|
frame.rotate(hour_hand_angle);
|
||||||
|
|
@ -160,17 +162,16 @@ impl<Message> canvas::Program<Message> for Clock {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Draw clock numbers
|
// Draw clock numbers
|
||||||
for i in 1..=12 {
|
for hour in 1..=12 {
|
||||||
let distance_out = radius * 1.05;
|
let angle = Radians::from(hand_rotation(hour, 12))
|
||||||
let angle =
|
- Radians::from(Degrees(90.0));
|
||||||
Radians::from(hand_rotation(i, 12)) - Radians::from(Degrees(90.0));
|
let x = radius * angle.0.cos();
|
||||||
let x = distance_out * angle.0.cos();
|
let y = radius * angle.0.sin();
|
||||||
let y = distance_out * angle.0.sin();
|
|
||||||
|
|
||||||
frame.fill_text(canvas::Text {
|
frame.fill_text(canvas::Text {
|
||||||
content: format!("{}", i),
|
content: format!("{}", hour),
|
||||||
size: (radius / 15.0).into(),
|
size: (radius / 5.0).into(),
|
||||||
position: Point::new(x * 0.85, y * 0.85),
|
position: Point::new(x * 0.82, y * 0.82),
|
||||||
color: palette.secondary.strong.text,
|
color: palette.secondary.strong.text,
|
||||||
horizontal_alignment: alignment::Horizontal::Center,
|
horizontal_alignment: alignment::Horizontal::Center,
|
||||||
vertical_alignment: alignment::Vertical::Center,
|
vertical_alignment: alignment::Vertical::Center,
|
||||||
|
|
@ -178,11 +179,29 @@ impl<Message> canvas::Program<Message> for Clock {
|
||||||
..canvas::Text::default()
|
..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]
|
vec![clock]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hand_rotation(n: u32, total: u32) -> Degrees {
|
fn hand_rotation(n: u32, total: u32) -> Degrees {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue