add text to events

Signed-off-by: Fabrizio Iannetti <fabrizio.iannetti@gmail.com>
This commit is contained in:
Fabrizio Iannetti 2023-02-11 11:43:24 +01:00
parent dcaf8a8df9
commit e01b2b3ceb
3 changed files with 49 additions and 20 deletions

16
Cargo.lock generated
View File

@ -1049,7 +1049,7 @@ dependencies = [
[[package]]
name = "iced"
version = "0.6.0"
version = "0.7.0"
dependencies = [
"iced_core",
"iced_futures",
@ -1062,11 +1062,11 @@ dependencies = [
[[package]]
name = "iced_core"
version = "0.6.2"
version = "0.7.0"
dependencies = [
"bitflags",
"instant",
"palette",
"wasm-timer",
]
[[package]]
@ -1081,7 +1081,7 @@ dependencies = [
[[package]]
name = "iced_graphics"
version = "0.5.0"
version = "0.6.0"
dependencies = [
"bitflags",
"bytemuck",
@ -1095,7 +1095,7 @@ dependencies = [
[[package]]
name = "iced_native"
version = "0.7.0"
version = "0.8.0"
dependencies = [
"iced_core",
"iced_futures",
@ -1107,7 +1107,7 @@ dependencies = [
[[package]]
name = "iced_style"
version = "0.5.1"
version = "0.6.0"
dependencies = [
"iced_core",
"once_cell",
@ -1116,7 +1116,7 @@ dependencies = [
[[package]]
name = "iced_wgpu"
version = "0.7.0"
version = "0.8.0"
dependencies = [
"bitflags",
"bytemuck",
@ -1135,7 +1135,7 @@ dependencies = [
[[package]]
name = "iced_winit"
version = "0.6.0"
version = "0.7.0"
dependencies = [
"iced_futures",
"iced_graphics",

View File

@ -1,12 +1,25 @@
use chrono::NaiveDate;
use std::vec::Vec;
use std::default::Default;
use std::string::String;
#[derive(Clone)]
pub struct Event {
begin: NaiveDate,
end: NaiveDate,
pub text: String,
pub begin: NaiveDate,
pub end: NaiveDate,
}
//impl Clone for Event {
// fn clone(&self) -> Self {
// Event {
// text: self.text.clone(),
// begin: self.begin,
// end: self.end,
// }
// }
//}
//
impl Event {
fn is_in_day(&self, day: NaiveDate) -> bool {
day >= self.begin && day <= self.end
@ -23,10 +36,12 @@ impl EventsCollection {
// TODO: hard-coded events
events: vec![
Event {
text: String::from("ev_1"),
begin: NaiveDate::from_ymd_opt(2023, 01, 15).unwrap(),
end: NaiveDate::from_ymd_opt(2023, 01, 16).unwrap(),
},
Event {
text: String::from("ev_2"),
begin: NaiveDate::from_ymd_opt(2023, 01, 16).unwrap(),
end: NaiveDate::from_ymd_opt(2023, 01, 17).unwrap(),
},
@ -34,13 +49,13 @@ impl EventsCollection {
}
}
pub fn is_any_in_day(&self, day: NaiveDate) -> bool {
pub fn is_any_in_day(&self, day: NaiveDate) -> Option<Event> {
for ev_day in &self.events {
if ev_day.is_in_day(day) {
return true;
return Some(ev_day.clone());
}
}
false
None
}
}

View File

@ -60,7 +60,9 @@ pub struct CalendarParams {
day_today_bg: Color,
day_text_margin: f32,
ev_height: f32,
ev_bg: Color,
ev_fontsize: f32
}
impl CalendarParams {
@ -74,7 +76,9 @@ impl CalendarParams {
day_other_month_fg: Color::from_rgb8(220, 220, 220),
day_weekend_bg: Color::from_rgb8(245, 245, 245),
day_text_margin: 5.0,
ev_bg: Color::from_rgb8(100, 100, 245)
ev_height: 20.0,
ev_bg: Color::from_rgb8(200, 245, 200),
ev_fontsize: 16.0
}
}
}
@ -581,23 +585,33 @@ impl<'a> CalendarYearView<'a> {
horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top,
});
// render events, if enough space
// render events, if enough space
let day_text_size = renderer.measure(content, font_size as u16, Default::default(), day_bounds.size());
let ev_height: f32 = 12.0;
let ev_height = self.params.ev_height;
if day_bounds.height - day_text_size.1 > ev_height {
if self.events.is_any_in_day(current_day) {
renderer.fill_quad(renderer::Quad {
bounds: Rectangle {
if let Some(ev_day) = self.events.is_any_in_day(current_day) {
let ev_bounds = Rectangle {
y: y + day_text_size.1,
height: ev_height,
..day_bounds
},
};
renderer.fill_quad(renderer::Quad {
bounds: ev_bounds,
border_radius: 0.0.into(),
border_width: 1.0,
border_color: self.params.day_other_month_fg,
},
self.params.ev_bg);
renderer.fill_text(text::Text {
content: ev_day.text.as_str(),
size: self.params.ev_fontsize,
bounds: ev_bounds,
color: fg,
font: Default::default(),
horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top,
});
}
}
}