diff options
Diffstat (limited to 'chromium/third_party/skia/experimental/Intersection/QuadraticBounds.cpp')
-rw-r--r-- | chromium/third_party/skia/experimental/Intersection/QuadraticBounds.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/chromium/third_party/skia/experimental/Intersection/QuadraticBounds.cpp b/chromium/third_party/skia/experimental/Intersection/QuadraticBounds.cpp new file mode 100644 index 00000000000..193743b04ac --- /dev/null +++ b/chromium/third_party/skia/experimental/Intersection/QuadraticBounds.cpp @@ -0,0 +1,47 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "CurveIntersection.h" +#include "CurveUtilities.h" +#include "Extrema.h" + +double leftMostT(const Quadratic& quad, double startT, double endT) { + double leftT; + if (findExtrema(quad[0].x, quad[1].x, quad[2].x, &leftT) + && startT <= leftT && leftT <= endT) { + return leftT; + } + _Point startPt; + xy_at_t(quad, startT, startPt.x, startPt.y); + _Point endPt; + xy_at_t(quad, endT, endPt.x, endPt.y); + return startPt.x <= endPt.x ? startT : endT; +} + +void _Rect::setBounds(const Quadratic& quad) { + set(quad[0]); + add(quad[2]); + double tValues[2]; + int roots = 0; + if (!between(quad[0].x, quad[1].x, quad[2].x)) { + roots = findExtrema(quad[0].x, quad[1].x, quad[2].x, tValues); + } + if (!between(quad[0].y, quad[1].y, quad[2].y)) { + roots += findExtrema(quad[0].y, quad[1].y, quad[2].y, &tValues[roots]); + } + for (int x = 0; x < roots; ++x) { + _Point result; + xy_at_t(quad, tValues[x], result.x, result.y); + add(result); + } +} + +void _Rect::setRawBounds(const Quadratic& quad) { + set(quad[0]); + for (int x = 1; x < 3; ++x) { + add(quad[x]); + } +} |