From 705274997d6adc2687dfb5fb5df87500eb3dd527 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 2 Oct 2017 11:40:11 -0700 Subject: [PATCH] Remove the now-obsolete path legalizer --- partitioner/src/capi.rs | 82 -------------------- partitioner/src/legalizer.rs | 144 ----------------------------------- partitioner/src/lib.rs | 3 - 3 files changed, 229 deletions(-) delete mode 100644 partitioner/src/legalizer.rs diff --git a/partitioner/src/capi.rs b/partitioner/src/capi.rs index 0033519e..a4d45efa 100644 --- a/partitioner/src/capi.rs +++ b/partitioner/src/capi.rs @@ -2,7 +2,6 @@ use env_logger; use euclid::Point2D; -use legalizer::Legalizer; use partitioner::Partitioner; use std::mem; use std::slice; @@ -55,87 +54,6 @@ pub struct EdgeIndices { pub lower_curve_indices_len: u32, } -#[no_mangle] -pub unsafe extern fn pf_legalizer_new() -> *mut Legalizer { - let mut legalizer = Box::new(Legalizer::new()); - let legalizer_ptr: *mut Legalizer = &mut *legalizer; - mem::forget(legalizer); - legalizer_ptr -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_destroy(legalizer: *mut Legalizer) { - drop(mem::transmute::<*mut Legalizer, Box>(legalizer)) -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_endpoints(legalizer: *const Legalizer, - out_endpoint_count: *mut u32) - -> *const Endpoint { - let endpoints = (*legalizer).endpoints(); - if !out_endpoint_count.is_null() { - *out_endpoint_count = endpoints.len() as u32 - } - endpoints.as_ptr() -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_control_points(legalizer: *const Legalizer, - out_control_points_count: *mut u32) - -> *const Point2DF32 { - let control_points = (*legalizer).control_points(); - if !out_control_points_count.is_null() { - *out_control_points_count = control_points.len() as u32 - } - // FIXME(pcwalton): This is unsafe! `Point2D` and `Point2DF32` may have different layouts! - control_points.as_ptr() as *const Point2DF32 -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_subpaths(legalizer: *const Legalizer, - out_subpaths_count: *mut u32) - -> *const Subpath { - let subpaths = (*legalizer).subpaths(); - if !out_subpaths_count.is_null() { - *out_subpaths_count = subpaths.len() as u32 - } - subpaths.as_ptr() -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_move_to(legalizer: *mut Legalizer, - position: *const Point2DF32) { - (*legalizer).move_to(&(*position).to_point2d()) -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_close_path(legalizer: *mut Legalizer) { - (*legalizer).close_path() -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_line_to(legalizer: *mut Legalizer, - endpoint: *const Point2DF32) { - (*legalizer).line_to(&(*endpoint).to_point2d()) -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_quadratic_curve_to(legalizer: *mut Legalizer, - control_point: *const Point2DF32, - endpoint: *const Point2DF32) { - (*legalizer).quadratic_curve_to(&(*control_point).to_point2d(), &(*endpoint).to_point2d()) -} - -#[no_mangle] -pub unsafe extern fn pf_legalizer_bezier_curve_to(legalizer: *mut Legalizer, - point1: *const Point2DF32, - point2: *const Point2DF32, - endpoint: *const Point2DF32) { - (*legalizer).bezier_curve_to(&(*point1).to_point2d(), - &(*point2).to_point2d(), - &(*endpoint).to_point2d()) -} - #[no_mangle] pub unsafe extern fn pf_partitioner_new() -> *mut Partitioner<'static> { let mut partitioner = Box::new(Partitioner::new()); diff --git a/partitioner/src/legalizer.rs b/partitioner/src/legalizer.rs deleted file mode 100644 index c0f1bb69..00000000 --- a/partitioner/src/legalizer.rs +++ /dev/null @@ -1,144 +0,0 @@ -// partitionfinder/legalizer.rs - -use euclid::Point2D; -use geometry::{QuadraticBezierInflectionPoints, SubdividedQuadraticBezier}; -use std::u32; -use {Endpoint, Subpath}; - -pub struct Legalizer { - endpoints: Vec, - control_points: Vec>, - subpaths: Vec, -} - -impl Legalizer { - #[inline] - pub fn new() -> Legalizer { - Legalizer { - endpoints: vec![], - control_points: vec![], - subpaths: vec![], - } - } - - #[inline] - pub fn endpoints(&self) -> &[Endpoint] { - &self.endpoints - } - - #[inline] - pub fn control_points(&self) -> &[Point2D] { - &self.control_points - } - - #[inline] - pub fn subpaths(&self) -> &[Subpath] { - &self.subpaths - } - - pub fn move_to(&mut self, position: &Point2D) { - self.subpaths.push(Subpath { - first_endpoint_index: self.endpoints.len() as u32, - last_endpoint_index: self.endpoints.len() as u32 + 1, - }); - self.endpoints.push(Endpoint { - position: *position, - control_point_index: u32::MAX, - subpath_index: (self.subpaths.len() - 1) as u32, - }) - } - - #[inline] - pub fn close_path(&mut self) { - // All paths are implicitly closed. - } - - pub fn line_to(&mut self, endpoint: &Point2D) { - self.subpaths - .last_mut() - .expect("`line_to()` called with no current subpath") - .last_endpoint_index += 1; - self.endpoints.push(Endpoint { - position: *endpoint, - control_point_index: u32::MAX, - subpath_index: (self.subpaths.len() - 1) as u32, - }) - } - - fn monotone_quadratic_curve_to(&mut self, - control_point: &Point2D, - endpoint: &Point2D) { - self.subpaths - .last_mut() - .expect("`quadratic_curve_to()` called with no current subpath") - .last_endpoint_index += 1; - self.endpoints.push(Endpoint { - position: *endpoint, - control_point_index: self.control_points.len() as u32, - subpath_index: (self.subpaths.len() - 1) as u32, - }); - self.control_points.push(*control_point) - } - - pub fn quadratic_curve_to(&mut self, control_point: &Point2D, endpoint: &Point2D) { - let last_endpoint_index = - self.subpaths - .last() - .expect("`quadratic_curve_to()` called with no current subpath") - .last_endpoint_index; - let point0 = self.endpoints[last_endpoint_index as usize - 1].position; - - match QuadraticBezierInflectionPoints::calculate(&point0, control_point, endpoint) { - QuadraticBezierInflectionPoints { - xt: Some(xt), - yt: Some(yt), - } => { - let subdivision = SubdividedQuadraticBezier::new(f32::min(xt, yt), - &point0, - control_point, - endpoint); - self.monotone_quadratic_curve_to(&subdivision.ap1, &subdivision.ap2bp0); - self.quadratic_curve_to(&subdivision.bp1, &subdivision.bp2) - } - QuadraticBezierInflectionPoints { - xt: Some(t), - yt: None, - } | - QuadraticBezierInflectionPoints { - xt: None, - yt: Some(t), - } => { - let subdivision = SubdividedQuadraticBezier::new(t, - &point0, - control_point, - endpoint); - self.monotone_quadratic_curve_to(&subdivision.ap1, &subdivision.ap2bp0); - self.quadratic_curve_to(&subdivision.bp1, &subdivision.bp2) - } - QuadraticBezierInflectionPoints { - xt: None, - yt: None, - } => { - self.monotone_quadratic_curve_to(control_point, endpoint) - } - } - } - - - pub fn bezier_curve_to(&mut self, - point1: &Point2D, - point2: &Point2D, - endpoint: &Point2D) { - // https://stackoverflow.com/a/2029695 - // - // FIXME(pcwalton): Reimplement subdivision! - let last_endpoint_index = self.subpaths - .last() - .expect("`bezier_curve_to()` called with no current subpath") - .last_endpoint_index; - let point0 = self.endpoints[last_endpoint_index as usize - 1].position; - let control_point = ((point1.to_vector() + point2.to_vector()) * 0.75 - - (point0.to_vector() + endpoint.to_vector()) * 0.25).to_point(); - self.quadratic_curve_to(&control_point, endpoint) - } -} diff --git a/partitioner/src/lib.rs b/partitioner/src/lib.rs index ddc212b0..9e329c60 100644 --- a/partitioner/src/lib.rs +++ b/partitioner/src/lib.rs @@ -15,11 +15,9 @@ extern crate alloc_jemalloc; extern crate bit_vec; extern crate env_logger; extern crate euclid; -extern crate half; #[macro_use] extern crate log; extern crate pathfinder_path_utils; -extern crate serde; #[macro_use] extern crate serde_derive; @@ -29,7 +27,6 @@ use std::u32; pub mod capi; pub mod geometry; -pub mod legalizer; pub mod partitioner; #[repr(C)]