Remove path rect clipping, since it's no longer required

This commit is contained in:
Patrick Walton 2020-05-15 19:13:18 -07:00
parent 37c993eee6
commit 6ed3237b10
3 changed files with 1 additions and 82 deletions

View File

@ -41,38 +41,6 @@ impl TEdge for Edge {
} }
} }
#[derive(Clone, Copy, Debug)]
enum AxisAlignedEdge {
Left(f32),
Top(f32),
Right(f32),
Bottom(f32),
}
impl TEdge for AxisAlignedEdge {
#[inline]
fn point_is_inside(&self, point: Vector2F) -> bool {
match *self {
AxisAlignedEdge::Left(x) => point.x() >= x,
AxisAlignedEdge::Top(y) => point.y() >= y,
AxisAlignedEdge::Right(x) => point.x() <= x,
AxisAlignedEdge::Bottom(y) => point.y() <= y,
}
}
fn intersect_line_segment(&self, segment: LineSegment2F) -> ArrayVec<[f32; 3]> {
let mut results = ArrayVec::new();
let t = match *self {
AxisAlignedEdge::Left(x) | AxisAlignedEdge::Right(x) => segment.solve_t_for_x(x),
AxisAlignedEdge::Top(y) | AxisAlignedEdge::Bottom(y) => segment.solve_t_for_y(y),
};
if t >= 0.0 && t <= 1.0 {
results.push(t);
}
results
}
}
trait TEdge: Debug { trait TEdge: Debug {
fn point_is_inside(&self, point: Vector2F) -> bool; fn point_is_inside(&self, point: Vector2F) -> bool;
fn intersect_line_segment(&self, segment: LineSegment2F) -> ArrayVec<[f32; 3]>; fn intersect_line_segment(&self, segment: LineSegment2F) -> ArrayVec<[f32; 3]>;
@ -340,42 +308,6 @@ enum EdgeRelativeLocation {
Outside, Outside,
} }
// Fast axis-aligned box 2D clipping
pub(crate) struct ContourRectClipper {
clip_rect: RectF,
contour: Contour,
}
impl ContourClipper for ContourRectClipper {
type Edge = AxisAlignedEdge;
#[inline]
fn contour_mut(&mut self) -> &mut Contour {
&mut self.contour
}
}
impl ContourRectClipper {
#[inline]
pub(crate) fn new(clip_rect: RectF, contour: Contour) -> ContourRectClipper {
ContourRectClipper { clip_rect, contour }
}
pub(crate) fn clip(mut self) -> Contour {
if self.clip_rect.contains_rect(self.contour.bounds()) {
return self.contour;
}
self.clip_against(AxisAlignedEdge::Left(self.clip_rect.min_x()));
self.clip_against(AxisAlignedEdge::Top(self.clip_rect.min_y()));
self.clip_against(AxisAlignedEdge::Right(self.clip_rect.max_x()));
self.clip_against(AxisAlignedEdge::Bottom(self.clip_rect.max_y()));
self.contour
}
}
// 3D quad clipping // 3D quad clipping
pub struct PolygonClipper3D { pub struct PolygonClipper3D {

View File

@ -10,7 +10,7 @@
//! A compressed in-memory representation of paths. //! A compressed in-memory representation of paths.
use crate::clip::{self, ContourPolygonClipper, ContourRectClipper}; use crate::clip::{self, ContourPolygonClipper};
use crate::dilation::ContourDilator; use crate::dilation::ContourDilator;
use crate::orientation::Orientation; use crate::orientation::Orientation;
use crate::segment::{Segment, SegmentFlags, SegmentKind}; use crate::segment::{Segment, SegmentFlags, SegmentKind};
@ -214,16 +214,6 @@ impl Outline {
} }
} }
pub fn clip_against_rect(&mut self, clip_rect: RectF) {
if clip_rect.contains_rect(self.bounds) {
return;
}
for contour in mem::replace(&mut self.contours, vec![]) {
self.push_contour(ContourRectClipper::new(clip_rect, contour).clip());
}
}
#[inline] #[inline]
pub fn close_all_contours(&mut self) { pub fn close_all_contours(&mut self) {
self.contours.iter_mut().for_each(|contour| contour.close()); self.contours.iter_mut().for_each(|contour| contour.close());

View File

@ -185,8 +185,6 @@ impl Scene {
original_outline: &Outline, original_outline: &Outline,
options: &PreparedBuildOptions, options: &PreparedBuildOptions,
) -> Outline { ) -> Outline {
let effective_view_box = self.effective_view_box(options);
let mut outline; let mut outline;
match options.transform { match options.transform {
PreparedRenderTransform::Perspective { PreparedRenderTransform::Perspective {
@ -220,7 +218,6 @@ impl Scene {
} }
outline.transform(&transform); outline.transform(&transform);
} }
outline.clip_against_rect(effective_view_box);
} }
} }