Remove path rect clipping, since it's no longer required
This commit is contained in:
parent
37c993eee6
commit
6ed3237b10
|
@ -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 {
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue