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

Side by Side Diff: experimental/Intersection/CubicBounds.cpp

Issue 867213004: remove prototype pathops code (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7 #include "CurveIntersection.h"
8 #include "CurveUtilities.h"
9 #include "Extrema.h"
10
11 static int isBoundedByEndPoints(double a, double b, double c, double d)
12 {
13 return between(a, b, d) && between(a, c, d);
14 }
15
16 double leftMostT(const Cubic& cubic, double startT, double endT) {
17 double leftTs[2];
18 _Point pt[2];
19 int results = findExtrema(cubic[0].x, cubic[1].x, cubic[2].x, cubic[3].x, le ftTs);
20 int best = -1;
21 for (int index = 0; index < results; ++index) {
22 if (startT > leftTs[index] || leftTs[index] > endT) {
23 continue;
24 }
25 if (best < 0) {
26 best = index;
27 continue;
28 }
29 xy_at_t(cubic, leftTs[0], pt[0].x, pt[0].y);
30 xy_at_t(cubic, leftTs[1], pt[1].x, pt[1].y);
31 if (pt[0].x > pt[1].x) {
32 best = 1;
33 }
34 }
35 if (best >= 0) {
36 return leftTs[best];
37 }
38 xy_at_t(cubic, startT, pt[0].x, pt[0].y);
39 xy_at_t(cubic, endT, pt[1].x, pt[1].y);
40 return pt[0].x <= pt[1].x ? startT : endT;
41 }
42
43 void _Rect::setBounds(const Cubic& cubic) {
44 set(cubic[0]);
45 add(cubic[3]);
46 double tValues[4];
47 int roots = 0;
48 if (!isBoundedByEndPoints(cubic[0].x, cubic[1].x, cubic[2].x, cubic[3].x)) {
49 roots = findExtrema(cubic[0].x, cubic[1].x, cubic[2].x, cubic[3].x, tVal ues);
50 }
51 if (!isBoundedByEndPoints(cubic[0].y, cubic[1].y, cubic[2].y, cubic[3].y)) {
52 roots += findExtrema(cubic[0].y, cubic[1].y, cubic[2].y, cubic[3].y, &tV alues[roots]);
53 }
54 for (int x = 0; x < roots; ++x) {
55 _Point result;
56 xy_at_t(cubic, tValues[x], result.x, result.y);
57 add(result);
58 }
59 }
60
61 void _Rect::setRawBounds(const Cubic& cubic) {
62 set(cubic[0]);
63 for (int x = 1; x < 4; ++x) {
64 add(cubic[x]);
65 }
66 }
OLDNEW
« no previous file with comments | « experimental/Intersection/CubicBezierClip_Test.cpp ('k') | experimental/Intersection/CubicConvexHull.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698