Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Unified Diff: src/core/SkGeometry.cpp

Issue 1016263002: remove unused SkXRay functions (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkGeometry.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkGeometry.cpp
diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp
index 5331bb7e5a2c2469c62ca9cc570f43d3b3914bda..b4d12dbfa42e902eb18179da19b9c7717d5c28b3 100644
--- a/src/core/SkGeometry.cpp
+++ b/src/core/SkGeometry.cpp
@@ -8,61 +8,6 @@
#include "SkGeometry.h"
#include "SkMatrix.h"
-bool SkXRayCrossesLine(const SkXRay& pt,
- const SkPoint pts[2],
- bool* ambiguous) {
- if (ambiguous) {
- *ambiguous = false;
- }
- // Determine quick discards.
- // Consider query line going exactly through point 0 to not
- // intersect, for symmetry with SkXRayCrossesMonotonicCubic.
- if (pt.fY == pts[0].fY) {
- if (ambiguous) {
- *ambiguous = true;
- }
- return false;
- }
- if (pt.fY < pts[0].fY && pt.fY < pts[1].fY)
- return false;
- if (pt.fY > pts[0].fY && pt.fY > pts[1].fY)
- return false;
- if (pt.fX > pts[0].fX && pt.fX > pts[1].fX)
- return false;
- // Determine degenerate cases
- if (SkScalarNearlyZero(pts[0].fY - pts[1].fY))
- return false;
- if (SkScalarNearlyZero(pts[0].fX - pts[1].fX)) {
- // We've already determined the query point lies within the
- // vertical range of the line segment.
- if (pt.fX <= pts[0].fX) {
- if (ambiguous) {
- *ambiguous = (pt.fY == pts[1].fY);
- }
- return true;
- }
- return false;
- }
- // Ambiguity check
- if (pt.fY == pts[1].fY) {
- if (pt.fX <= pts[1].fX) {
- if (ambiguous) {
- *ambiguous = true;
- }
- return true;
- }
- return false;
- }
- // Full line segment evaluation
- SkScalar delta_y = pts[1].fY - pts[0].fY;
- SkScalar delta_x = pts[1].fX - pts[0].fX;
- SkScalar slope = SkScalarDiv(delta_y, delta_x);
- SkScalar b = pts[0].fY - SkScalarMul(slope, pts[0].fX);
- // Solve for x coordinate at y = pt.fY
- SkScalar x = SkScalarDiv(pt.fY - b, slope);
- return pt.fX <= x;
-}
-
/** If defined, this makes eval_quad and eval_cubic do more setup (sometimes
involving integer multiplies by 2 or 3, but fewer calls to SkScalarMul.
May also introduce overflow of fixed when we compute our setup.
@@ -949,130 +894,6 @@ int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13],
return count + 1;
}
-bool SkXRayCrossesMonotonicCubic(const SkXRay& pt, const SkPoint cubic[4],
- bool* ambiguous) {
- if (ambiguous) {
- *ambiguous = false;
- }
-
- // Find the minimum and maximum y of the extrema, which are the
- // first and last points since this cubic is monotonic
- SkScalar min_y = SkMinScalar(cubic[0].fY, cubic[3].fY);
- SkScalar max_y = SkMaxScalar(cubic[0].fY, cubic[3].fY);
-
- if (pt.fY == cubic[0].fY
- || pt.fY < min_y
- || pt.fY > max_y) {
- // The query line definitely does not cross the curve
- if (ambiguous) {
- *ambiguous = (pt.fY == cubic[0].fY);
- }
- return false;
- }
-
- bool pt_at_extremum = (pt.fY == cubic[3].fY);
-
- SkScalar min_x =
- SkMinScalar(
- SkMinScalar(
- SkMinScalar(cubic[0].fX, cubic[1].fX),
- cubic[2].fX),
- cubic[3].fX);
- if (pt.fX < min_x) {
- // The query line definitely crosses the curve
- if (ambiguous) {
- *ambiguous = pt_at_extremum;
- }
- return true;
- }
-
- SkScalar max_x =
- SkMaxScalar(
- SkMaxScalar(
- SkMaxScalar(cubic[0].fX, cubic[1].fX),
- cubic[2].fX),
- cubic[3].fX);
- if (pt.fX > max_x) {
- // The query line definitely does not cross the curve
- return false;
- }
-
- // Do a binary search to find the parameter value which makes y as
- // close as possible to the query point. See whether the query
- // line's origin is to the left of the associated x coordinate.
-
- // kMaxIter is chosen as the number of mantissa bits for a float,
- // since there's no way we are going to get more precision by
- // iterating more times than that.
- const int kMaxIter = 23;
- SkPoint eval;
- int iter = 0;
- SkScalar upper_t;
- SkScalar lower_t;
- // Need to invert direction of t parameter if cubic goes up
- // instead of down
- if (cubic[3].fY > cubic[0].fY) {
- upper_t = SK_Scalar1;
- lower_t = 0;
- } else {
- upper_t = 0;
- lower_t = SK_Scalar1;
- }
- do {
- SkScalar t = SkScalarAve(upper_t, lower_t);
- SkEvalCubicAt(cubic, t, &eval, NULL, NULL);
- if (pt.fY > eval.fY) {
- lower_t = t;
- } else {
- upper_t = t;
- }
- } while (++iter < kMaxIter
- && !SkScalarNearlyZero(eval.fY - pt.fY));
- if (pt.fX <= eval.fX) {
- if (ambiguous) {
- *ambiguous = pt_at_extremum;
- }
- return true;
- }
- return false;
-}
-
-int SkNumXRayCrossingsForCubic(const SkXRay& pt,
- const SkPoint cubic[4],
- bool* ambiguous) {
- int num_crossings = 0;
- SkPoint monotonic_cubics[10];
- int num_monotonic_cubics = SkChopCubicAtYExtrema(cubic, monotonic_cubics);
- if (ambiguous) {
- *ambiguous = false;
- }
- bool locally_ambiguous;
- if (SkXRayCrossesMonotonicCubic(pt,
- &monotonic_cubics[0],
- &locally_ambiguous))
- ++num_crossings;
- if (ambiguous) {
- *ambiguous |= locally_ambiguous;
- }
- if (num_monotonic_cubics > 0)
- if (SkXRayCrossesMonotonicCubic(pt,
- &monotonic_cubics[3],
- &locally_ambiguous))
- ++num_crossings;
- if (ambiguous) {
- *ambiguous |= locally_ambiguous;
- }
- if (num_monotonic_cubics > 1)
- if (SkXRayCrossesMonotonicCubic(pt,
- &monotonic_cubics[6],
- &locally_ambiguous))
- ++num_crossings;
- if (ambiguous) {
- *ambiguous |= locally_ambiguous;
- }
- return num_crossings;
-}
-
///////////////////////////////////////////////////////////////////////////////
/* Find t value for quadratic [a, b, c] = d.
« no previous file with comments | « src/core/SkGeometry.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698