aboutsummaryrefslogtreecommitdiff
path: root/src/drawing/rasterizer/circle.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/drawing/rasterizer/circle.rs')
-rw-r--r--src/drawing/rasterizer/circle.rs67
1 files changed, 0 insertions, 67 deletions
diff --git a/src/drawing/rasterizer/circle.rs b/src/drawing/rasterizer/circle.rs
deleted file mode 100644
index d38e00a..0000000
--- a/src/drawing/rasterizer/circle.rs
+++ /dev/null
@@ -1,67 +0,0 @@
-use crate::drawing::backend::{BackendCoord, BackendStyle, DrawingErrorKind};
-use crate::drawing::DrawingBackend;
-
-use crate::style::Color;
-
-pub fn draw_circle<B: DrawingBackend, S: BackendStyle>(
- b: &mut B,
- center: BackendCoord,
- radius: u32,
- style: &S,
- fill: bool,
-) -> Result<(), DrawingErrorKind<B::ErrorType>> {
- if style.as_color().alpha() == 0.0 {
- return Ok(());
- }
-
- if !fill && style.stroke_width() != 1 {
- // FIXME: We are currently ignore the stroke width for circles
- }
-
- let min = (f64::from(radius) * (1.0 - (2f64).sqrt() / 2.0)).ceil() as i32;
- let max = (f64::from(radius) * (1.0 + (2f64).sqrt() / 2.0)).floor() as i32;
-
- let range = min..=max;
-
- let (up, down) = (
- range.start() + center.1 - radius as i32,
- range.end() + center.1 - radius as i32,
- );
-
- for dy in range {
- let dy = dy - radius as i32;
- let y = center.1 + dy;
-
- let lx = (f64::from(radius) * f64::from(radius)
- - (f64::from(dy) * f64::from(dy)).max(1e-5))
- .sqrt();
-
- let left = center.0 - lx.floor() as i32;
- let right = center.0 + lx.floor() as i32;
-
- let v = lx - lx.floor();
-
- let x = center.0 + dy;
- let top = center.1 - lx.floor() as i32;
- let bottom = center.1 + lx.floor() as i32;
-
- if fill {
- check_result!(b.draw_line((left, y), (right, y), &style.as_color()));
- check_result!(b.draw_line((x, top), (x, up), &style.as_color()));
- check_result!(b.draw_line((x, down), (x, bottom), &style.as_color()));
- } else {
- check_result!(b.draw_pixel((left, y), &style.as_color().mix(1.0 - v)));
- check_result!(b.draw_pixel((right, y), &style.as_color().mix(1.0 - v)));
-
- check_result!(b.draw_pixel((x, top), &style.as_color().mix(1.0 - v)));
- check_result!(b.draw_pixel((x, bottom), &style.as_color().mix(1.0 - v)));
- }
-
- check_result!(b.draw_pixel((left - 1, y), &style.as_color().mix(v)));
- check_result!(b.draw_pixel((right + 1, y), &style.as_color().mix(v)));
- check_result!(b.draw_pixel((x, top - 1), &style.as_color().mix(v)));
- check_result!(b.draw_pixel((x, bottom + 1), &style.as_color().mix(v)));
- }
-
- Ok(())
-}