From c135f37b45f9b6fc14e3587013dd3584b22e2794 Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Sat, 3 Aug 2019 01:14:57 +0200 Subject: [PATCH] calendar: Slow down scroll, add click navigation --- README.md | 2 +- src/calendar.rs | 37 ++++++++++++++++++++----------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 6447d14..673fd74 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ In nice, big letters! ### 3 month calendar -Scroll on it to navigate. +Scroll or click on the months to navigate. ### Battery level diff --git a/src/calendar.rs b/src/calendar.rs index 4cdde51..0b0351d 100644 --- a/src/calendar.rs +++ b/src/calendar.rs @@ -7,8 +7,8 @@ use chrono::{Date, DateTime, Datelike, Local}; pub struct Calendar { cur_date: Date, - first_draw: bool, - offset: i32, + dirty: bool, + offset: f64, } fn draw_month( @@ -152,8 +152,8 @@ impl Calendar { pub fn new() -> Calendar { Calendar { cur_date: Local::now().date(), - first_draw: true, - offset: 0, + dirty: true, + offset: 0.0, } } } @@ -167,8 +167,9 @@ impl ModuleImpl for Calendar { ) -> Result, ::std::io::Error> { let time = time.date(); let mut t = time.with_day(1).unwrap(); - if self.offset != 0 { - let mut month = (t.month() - 1) as i32 + self.offset; + let o = (self.offset / 100.0) as i32; + if o != 0 { + let mut month = (t.month() - 1) as i32 + o; let mut year = t.year(); while month > 11 { year += 1; @@ -212,8 +213,8 @@ impl ModuleImpl for Calendar { } fn update(&mut self, time: &DateTime, force: bool) -> Result { - if self.first_draw { - self.first_draw = false; + if self.dirty { + self.dirty = false; Ok(true) } else if time.date() != self.cur_date || force { self.cur_date = time.date(); @@ -226,16 +227,18 @@ impl ModuleImpl for Calendar { fn input(&mut self, input: Input) { match input { Input::Scroll { pos: _, x: _, y } => { - if y > 0.0 { - self.offset += 1; - } else { - self.offset -= 1; - } - self.first_draw = true; + self.offset += y; + self.dirty = true; } - Input::Click { pos: _, button: _ } => { - self.offset = 0; - self.first_draw = true; + Input::Click { pos: (x, _), button: _ } => { + if x < 448 { + self.offset -= 100.0; + } else if x >= 896 { + self.offset += 100.0; + } else { + self.offset = 0.0; + } + self.dirty = true; } _ => {} }