1#[derive(Debug)]
2pub struct Scale {
3 pub min: i64,
4 pub max: i64,
5 pub ticks: Vec<i64>,
6}
7impl Scale {
8 pub fn new(mut min: i64, mut max: i64) -> Self {
9 debug_assert!(min <= max);
10 if max < min + 3 {
11 max += 2;
12 min -= 2;
13 }
14 if min > 0 && (max - min) * 4 > max {
15 min = 0;
16 }
17 let l = ((max - min) as f64).log10().floor() as u32;
18 let d = 10i64.pow(l);
19 min = (min / d) * d;
20 let mut tick = min;
21 let mut ticks = vec![tick];
22 loop {
23 tick += d;
24 ticks.push(tick);
25 if tick > max {
26 break;
27 }
28 }
29 max = ticks[ticks.len() - 1];
30 Self { min, max, ticks }
31 }
32 pub fn range(&self) -> i64 {
33 self.max - self.min
34 }
35}