diff --git a/Cargo.lock b/Cargo.lock index 58013e0..354b2b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/src/model/events.rs b/src/model/events.rs index e9d0eaf..bcaba22 100644 --- a/src/model/events.rs +++ b/src/model/events.rs @@ -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 { for ev_day in &self.events { if ev_day.is_in_day(day) { - return true; + return Some(ev_day.clone()); } } - false + None } } diff --git a/src/ui/calendar.rs b/src/ui/calendar.rs index 60a53a9..f40cdf7 100644 --- a/src/ui/calendar.rs +++ b/src/ui/calendar.rs @@ -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, + }); } } }