Commit 5ae54b63 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Remove float math

parent 2b06951e
use alloc::Vec;
/// point type (is the point a new position or a connection point)
pub enum PointType {
Move,
Connect,
None,
}
/// graphic path with similar functions like html canvas
pub struct GraphicsPath {
x: i32,
y: i32,
pub points: Vec<(i32, i32, PointType)>,
}
impl GraphicsPath {
pub fn new() -> GraphicsPath {
GraphicsPath {
x : 0,
y : 0,
points: Vec::new(),
}
}
/// move to position
pub fn move_to(&mut self, x: i32, y: i32){
self.points.push((x,y,PointType::Move));
self.x = x;
self.y = y;
}
/// create a line between the last and new point
pub fn line_to(&mut self, x: i32, y: i32) {
self.points.push((x,y,PointType::Connect));
self.x = x;
self.y = y;
}
/// quadratic bezier curve
pub fn quadratic_curve_to(&mut self, argx1: i32, argy1: i32, argx2: i32, argy2: i32){
let mut t:f32 = 0.0;
let mut u:f32;
let mut tt:f32;
let mut uu:f32;
let mut x:f32;
let mut y:f32;
while t < 1.0 {
u = 1.0 - t;
uu = u * u;
tt = t * t;
x = (self.x as f32) * uu;
y = (self.y as f32) * uu;
x += 2.0 * u * t * (argx1 as f32);
y += 2.0 * u * t * (argy1 as f32);
x += tt * (argx2 as f32);
y += tt * (argy2 as f32);
t = t+0.01;
self.points.push((x as i32, y as i32, PointType::Connect));
}
self.x = argx2;
self.y = argy2;
}
/// cubic bezier curve
pub fn bezier_curve_to(&mut self, argx1: i32, argy1: i32, argx2: i32, argy2: i32, argx3: i32, argy3: i32){
let mut t:f32 = 0.0;
let mut u:f32;
let mut tt:f32;
let mut uu:f32;
let mut uuu:f32;
let mut ttt:f32;
let mut x:f32;
let mut y:f32;
while t < 1.0 {
u = 1.0 - t;
tt = t * t;
uu = u * u;
uuu = uu * u;
ttt = tt * t;
x = (self.x as f32) * uuu;
y = (self.y as f32) * uuu;
x += 3.0 * uu * t * (argx1 as f32);
y += 3.0 * uu * t * (argy1 as f32);
x += 3.0 * u * tt * (argx2 as f32);
y += 3.0 * u * tt * (argy2 as f32);
x += ttt * (argx3 as f32);
y += ttt * (argy3 as f32);
t = t+0.01;
self.points.push((x as i32, y as i32, PointType::Connect));
}
self.x = argx3;
self.y = argy3;
}
}
......@@ -13,12 +13,10 @@ pub static FONT: &'static [u8] = include_bytes!("../res/unifont.font");
pub use color::Color;
pub use event::*;
pub use graphicspath::GraphicsPath;
pub use renderer::Renderer;
pub mod color;
pub mod event;
pub mod graphicspath;
pub mod renderer;
#[derive(Clone, Copy, Debug)]
......
......@@ -2,8 +2,6 @@ use core::cmp;
use FONT;
use color::Color;
use graphicspath::GraphicsPath;
use graphicspath::PointType;
#[cfg(target_arch = "x86")]
#[inline(always)]
......@@ -186,21 +184,6 @@ pub trait Renderer {
}
}
/// Draw a path (GraphicsPath)
fn draw_path_stroke(&mut self, graphicspath: GraphicsPath, color: Color) {
let mut x: i32 = 0;
let mut y: i32 = 0;
for point in graphicspath.points {
match point.2 {
PointType::Connect => {self.line(x,y, point.0, point.1, color)},
_ => {},
}
x = point.0;
y = point.1;
}
}
/// Draw a character, using the loaded font
fn char(&mut self, x: i32, y: i32, c: char, color: Color) {
let mut offset = (c as usize) * 16;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment