OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #ifndef SkPathOpsCurve_DEFINE | 7 #ifndef SkPathOpsCurve_DEFINE |
8 #define SkPathOpsCurve_DEFINE | 8 #define SkPathOpsCurve_DEFINE |
9 | 9 |
10 #include "SkIntersections.h" | 10 #include "SkIntersections.h" |
11 #include "SkPathOpsCubic.h" | |
12 #include "SkPathOpsLine.h" | |
13 #include "SkPathOpsQuad.h" | |
14 | 11 |
15 #ifndef SK_RELEASE | 12 #ifndef SK_RELEASE |
16 #include "SkPath.h" | 13 #include "SkPath.h" |
17 #endif | 14 #endif |
18 | 15 |
19 struct SkPathOpsBounds; | 16 struct SkPathOpsBounds; |
20 | 17 |
21 struct SkOpCurve { | 18 struct SkOpCurve { |
22 SkPoint fPts[4]; | 19 SkPoint fPts[4]; |
23 SkScalar fWeight; | 20 SkScalar fWeight; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 double s, double e, double* topT); | 68 double s, double e, double* topT); |
72 SkDPoint cubicTop(const SkPoint curve[4], SkScalar , double s, double e, dou
ble* topT); | 69 SkDPoint cubicTop(const SkPoint curve[4], SkScalar , double s, double e, dou
ble* topT); |
73 void dumpID(int ) const; | 70 void dumpID(int ) const; |
74 SkDPoint lineTop(const SkPoint[2], SkScalar , double , double , double* topT
); | 71 SkDPoint lineTop(const SkPoint[2], SkScalar , double , double , double* topT
); |
75 SkDPoint quadTop(const SkPoint curve[3], SkScalar , double s, double e, doub
le* topT); | 72 SkDPoint quadTop(const SkPoint curve[3], SkScalar , double s, double e, doub
le* topT); |
76 | 73 |
77 void setConicBounds(const SkPoint curve[3], SkScalar curveWeight, | 74 void setConicBounds(const SkPoint curve[3], SkScalar curveWeight, |
78 double s, double e, SkPathOpsBounds* ); | 75 double s, double e, SkPathOpsBounds* ); |
79 void setCubicBounds(const SkPoint curve[4], SkScalar , | 76 void setCubicBounds(const SkPoint curve[4], SkScalar , |
80 double s, double e, SkPathOpsBounds* ); | 77 double s, double e, SkPathOpsBounds* ); |
81 void setLineBounds(const SkPoint[2], SkScalar , double , double , SkPathOpsB
ounds* ); | |
82 void setQuadBounds(const SkPoint curve[3], SkScalar , | 78 void setQuadBounds(const SkPoint curve[3], SkScalar , |
83 double s, double e, SkPathOpsBounds*); | 79 double s, double e, SkPathOpsBounds*); |
84 }; | 80 }; |
85 | 81 |
86 | 82 |
87 extern void (SkDCurve::* const SetBounds[])(const SkPoint curve[], SkScalar cWei
ght, | |
88 double tStart, double tEnd, SkPathOpsBounds* ); | |
89 | |
90 extern SkDPoint (SkDCurve::* const Top[])(const SkPoint curve[], SkScalar cWeigh
t, | 83 extern SkDPoint (SkDCurve::* const Top[])(const SkPoint curve[], SkScalar cWeigh
t, |
91 double tStart, double tEnd, double* topT); | 84 double tStart, double tEnd, double* topT); |
92 | 85 |
93 static SkDPoint dline_xy_at_t(const SkPoint a[2], SkScalar , double t) { | 86 static SkDPoint dline_xy_at_t(const SkPoint a[2], SkScalar , double t) { |
94 SkDLine line; | 87 SkDLine line; |
95 line.set(a); | 88 line.set(a); |
96 return line.ptAtT(t); | 89 return line.ptAtT(t); |
97 } | 90 } |
98 | 91 |
99 static SkDPoint dquad_xy_at_t(const SkPoint a[3], SkScalar , double t) { | 92 static SkDPoint dquad_xy_at_t(const SkPoint a[3], SkScalar , double t) { |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 | 262 |
270 static void (* const CurveIntersectRay[])(const SkPoint[] , SkScalar , const SkD
Line& , | 263 static void (* const CurveIntersectRay[])(const SkPoint[] , SkScalar , const SkD
Line& , |
271 SkIntersections* ) = { | 264 SkIntersections* ) = { |
272 NULL, | 265 NULL, |
273 line_intersect_ray, | 266 line_intersect_ray, |
274 quad_intersect_ray, | 267 quad_intersect_ray, |
275 conic_intersect_ray, | 268 conic_intersect_ray, |
276 cubic_intersect_ray | 269 cubic_intersect_ray |
277 }; | 270 }; |
278 | 271 |
| 272 static int line_intercept_h(const SkPoint a[2], SkScalar , SkScalar y, double* r
oots) { |
| 273 SkDLine line; |
| 274 roots[0] = SkIntersections::HorizontalIntercept(line.set(a), y); |
| 275 return between(0, roots[0], 1); |
| 276 } |
| 277 |
| 278 static int line_intercept_v(const SkPoint a[2], SkScalar , SkScalar x, double* r
oots) { |
| 279 SkDLine line; |
| 280 roots[0] = SkIntersections::VerticalIntercept(line.set(a), x); |
| 281 return between(0, roots[0], 1); |
| 282 } |
| 283 |
| 284 static int quad_intercept_h(const SkPoint a[2], SkScalar , SkScalar y, double* r
oots) { |
| 285 SkDQuad quad; |
| 286 return SkIntersections::HorizontalIntercept(quad.set(a), y, roots); |
| 287 } |
| 288 |
| 289 static int quad_intercept_v(const SkPoint a[2], SkScalar , SkScalar x, double* r
oots) { |
| 290 SkDQuad quad; |
| 291 return SkIntersections::VerticalIntercept(quad.set(a), x, roots); |
| 292 } |
| 293 |
| 294 static int conic_intercept_h(const SkPoint a[2], SkScalar w, SkScalar y, double*
roots) { |
| 295 SkDConic conic; |
| 296 return SkIntersections::HorizontalIntercept(conic.set(a, w), y, roots); |
| 297 } |
| 298 |
| 299 static int conic_intercept_v(const SkPoint a[2], SkScalar w, SkScalar x, double*
roots) { |
| 300 SkDConic conic; |
| 301 return SkIntersections::VerticalIntercept(conic.set(a, w), x, roots); |
| 302 } |
| 303 |
| 304 static int cubic_intercept_h(const SkPoint a[3], SkScalar , SkScalar y, double*
roots) { |
| 305 SkDCubic cubic; |
| 306 return cubic.set(a).horizontalIntersect(y, roots); |
| 307 } |
| 308 |
| 309 static int cubic_intercept_v(const SkPoint a[3], SkScalar , SkScalar x, double*
roots) { |
| 310 SkDCubic cubic; |
| 311 return cubic.set(a).verticalIntersect(x, roots); |
| 312 } |
| 313 |
| 314 static int (* const CurveIntercept[])(const SkPoint[] , SkScalar , SkScalar , do
uble* ) = { |
| 315 NULL, |
| 316 NULL, |
| 317 line_intercept_h, |
| 318 line_intercept_v, |
| 319 quad_intercept_h, |
| 320 quad_intercept_v, |
| 321 conic_intercept_h, |
| 322 conic_intercept_v, |
| 323 cubic_intercept_h, |
| 324 cubic_intercept_v, |
| 325 }; |
| 326 |
279 #endif | 327 #endif |
OLD | NEW |