mirror of
https://gitlab.com/feliix42/embedded-plots.git
synced 2024-11-22 01:46:30 +00:00
Make axis tick size an argument
This commit is contained in:
parent
7790a4fa4d
commit
3dd3d856b7
2 changed files with 31 additions and 25 deletions
|
@ -1,50 +1,53 @@
|
|||
use embedded_graphics::{
|
||||
pixelcolor::Rgb565,
|
||||
prelude::*,
|
||||
style::TextStyleBuilder,
|
||||
fonts::{Font6x8, Font6x6},
|
||||
};
|
||||
|
||||
use embedded_graphics_simulator::{
|
||||
SimulatorDisplay,
|
||||
Window,
|
||||
OutputSettingsBuilder,
|
||||
|
||||
};
|
||||
|
||||
use embedded_plots::{
|
||||
axis::{Axis,Orientation,Scale},
|
||||
};
|
||||
use embedded_graphics::style::TextStyleBuilder;
|
||||
use embedded_graphics::fonts::Font6x8;
|
||||
|
||||
fn main() -> Result<(), core::convert::Infallible> {
|
||||
let mut display: SimulatorDisplay<Rgb565> = SimulatorDisplay::new(Size::new(480, 272));
|
||||
|
||||
let text_style = TextStyleBuilder::new(Font6x8)
|
||||
let text_style_white = TextStyleBuilder::new(Font6x8)
|
||||
.text_color(RgbColor::WHITE)
|
||||
.build();
|
||||
|
||||
Axis::new("X Fixed 0-100(10)",Orientation::X{x1: 10, x2: 230, y: 10},0..100,Scale::Fixed(10),RgbColor::WHITE, text_style)
|
||||
let text_style_yellow_compact = TextStyleBuilder::new(Font6x6)
|
||||
.text_color(RgbColor::YELLOW)
|
||||
.build();
|
||||
|
||||
Axis::new("X Fixed 0-100(10)",Orientation::X{x1: 10, x2: 230, y: 10},0..100,Scale::Fixed(10),RgbColor::WHITE, text_style_white, 2)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("X Fixed 0-200(100)",Orientation::X{x1: 240, x2: 470, y: 10},0..200,Scale::Fixed(100),RgbColor::YELLOW, text_style)
|
||||
Axis::new("X Fixed 0-200(100)",Orientation::X{x1: 240, x2: 470, y: 10},0..200,Scale::Fixed(100),RgbColor::YELLOW, text_style_yellow_compact, 1)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("X Frac 0-100(7)",Orientation::X{x1: 20, x2: 220, y: 30},0..100,Scale::RangeFraction(7),RgbColor::BLUE, text_style)
|
||||
Axis::new("X Frac 0-100(7)",Orientation::X{x1: 20, x2: 220, y: 30},0..100,Scale::RangeFraction(7),RgbColor::BLUE, text_style_white, 3)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("X Frac 0-200(4)",Orientation::X{x1: 250, x2: 460, y: 30},0..200,Scale::RangeFraction(4),RgbColor::RED, text_style)
|
||||
Axis::new("X Frac 0-200(4)",Orientation::X{x1: 250, x2: 460, y: 30},0..200,Scale::RangeFraction(4),RgbColor::RED, text_style_yellow_compact, 7)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("Y Fixed 0-100(10)",Orientation::Y{y1: 60, y2: 250, x: 110},0..100,Scale::Fixed(10),RgbColor::WHITE, text_style)
|
||||
Axis::new("Y Fixed 0-100(10)",Orientation::Y{y1: 70, y2: 250, x: 120},0..100,Scale::Fixed(10),RgbColor::WHITE, text_style_white, 2)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("Y Fixed 0-200(100)",Orientation::Y{y1: 70, y2: 230, x: 230},0..200,Scale::Fixed(100),RgbColor::YELLOW, text_style)
|
||||
Axis::new("Y Fixed 0-200(100)",Orientation::Y{y1: 70, y2: 230, x: 230},0..200,Scale::Fixed(100),RgbColor::YELLOW, text_style_yellow_compact, 1)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("Y Frac 0-100(7)",Orientation::Y{y1: 60, y2: 180, x: 350},0..100,Scale::RangeFraction(7),RgbColor::BLUE, text_style)
|
||||
Axis::new("Y Frac 0-100(7)",Orientation::Y{y1: 60, y2: 180, x: 350},0..100,Scale::RangeFraction(7),RgbColor::BLUE, text_style_white, 3)
|
||||
.draw(&mut display)?;
|
||||
|
||||
Axis::new("Y Frac 0-200(4)",Orientation::Y{y1: 90, y2: 260, x: 470},0..200,Scale::RangeFraction(4),RgbColor::RED, text_style)
|
||||
Axis::new("Y Frac 0-200(4)",Orientation::Y{y1: 90, y2: 260, x: 470},0..200,Scale::RangeFraction(4),RgbColor::RED, text_style_yellow_compact, 7)
|
||||
.draw(&mut display)?;
|
||||
|
||||
|
||||
|
|
29
src/axis.rs
29
src/axis.rs
|
@ -38,7 +38,8 @@ pub struct Axis<'a, C, F>
|
|||
range: Range<i32>,
|
||||
scale: Scale,
|
||||
color: C,
|
||||
text_style: TextStyle<C,F>
|
||||
text_style: TextStyle<C,F>,
|
||||
tick_size: usize,
|
||||
}
|
||||
|
||||
impl<'a, C, F> Axis<'a, C, F>
|
||||
|
@ -47,8 +48,8 @@ impl<'a, C, F> Axis<'a, C, F>
|
|||
F: Font,
|
||||
TextStyle<C,F>: Clone,
|
||||
{
|
||||
pub fn new(title: &'a str, orientation: Orientation, range: Range<i32>, scale: Scale, color: C, text_style: TextStyle<C,F>) -> Axis<'a, C, F> {
|
||||
Axis { title, orientation, range, scale, color, text_style }
|
||||
pub fn new(title: &'a str, orientation: Orientation, range: Range<i32>, scale: Scale, color: C, text_style: TextStyle<C,F>, tick_height: usize) -> Axis<'a, C, F> {
|
||||
Axis { title, orientation, range, scale, color, text_style, tick_size: tick_height }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,34 +82,36 @@ impl<'a, C, F> Drawable<C> for Axis<'a, C, F>
|
|||
|
||||
for line in lines {
|
||||
let x = line.scale_between_ranges(&self.range, &(x1..x2));
|
||||
Line { start: Point { x, y: y - 2 }, end: Point { x, y: y + 2 } }
|
||||
Line { start: Point { x, y: y - self.tick_size as i32 }, end: Point { x, y: y + self.tick_size as i32 } }
|
||||
.into_styled(PrimitiveStyle::with_stroke(self.color, 1))
|
||||
.draw(display)?;
|
||||
let mut buf: String::<U8> = String::new();
|
||||
write!(buf, "{}", line).unwrap();
|
||||
Text::new(&buf, Point { x: x + 1, y: y + 1 }).into_styled(self.text_style).draw(display)?;
|
||||
Text::new(&buf, Point { x: x + 2, y: y + 2 }).into_styled(self.text_style).draw(display)?;
|
||||
}
|
||||
}
|
||||
Orientation::Y { y1, y2, x } => {
|
||||
Line { start: Point { x, y: y1 }, end: Point { x, y: y2 } }
|
||||
.into_styled(PrimitiveStyle::with_stroke(self.color, 1))
|
||||
.draw(display)?;
|
||||
let title = Text::new(self.title, Point { x, y: y1 })
|
||||
.into_styled(self.text_style);
|
||||
let title = title.translate(Point { x: -(title.size().width as i32) - 5, y: (y2-y1)/2 });
|
||||
title.draw(display)?;
|
||||
|
||||
let mut max_tick_text_width = 0;
|
||||
for line in lines {
|
||||
let y = line.scale_between_ranges(&self.range, &(y2..y1));
|
||||
Line { start: Point { x: x - 2, y }, end: Point { x: x + 2, y} }
|
||||
Line { start: Point { x: x - self.tick_size as i32, y }, end: Point { x: x + self.tick_size as i32, y} }
|
||||
.into_styled(PrimitiveStyle::with_stroke(self.color, 1))
|
||||
.draw(display)?;
|
||||
let mut buf: String::<U8> = String::new();
|
||||
write!(buf, "{}", line).unwrap();
|
||||
let tick = Text::new(&buf, Point { x, y}).into_styled(self.text_style);
|
||||
let tick = tick.translate(Point{ x: -(tick.size().width as i32), y: 0 });
|
||||
tick.draw(display)?;
|
||||
let tick_val = Text::new(&buf, Point { x, y}).into_styled(self.text_style);
|
||||
let tick_val = tick_val.translate(Point{ x: -(tick_val.size().width as i32) -2, y: 2 });
|
||||
if tick_val.size().width > max_tick_text_width { max_tick_text_width = tick_val.size().width }
|
||||
tick_val.draw(display)?;
|
||||
}
|
||||
let title = Text::new(self.title, Point { x, y: y1 })
|
||||
.into_styled(self.text_style);
|
||||
let title = title.translate(Point { x: -(title.size().width as i32) - max_tick_text_width as i32 - self.tick_size as i32 - 2, y: (y2-y1)/2 });
|
||||
title.draw(display)?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
|
Loading…
Reference in a new issue