Chromium Code Reviews| 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" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 57 const SkDPoint& operator[](int n) const { | 57 const SkDPoint& operator[](int n) const { |
| 58 SkASSERT(n >= 0 && n <= SkPathOpsVerbToPoints(fVerb)); | 58 SkASSERT(n >= 0 && n <= SkPathOpsVerbToPoints(fVerb)); |
| 59 return fCubic[n]; | 59 return fCubic[n]; |
| 60 } | 60 } |
| 61 | 61 |
| 62 SkDPoint& operator[](int n) { | 62 SkDPoint& operator[](int n) { |
| 63 SkASSERT(n >= 0 && n <= SkPathOpsVerbToPoints(fVerb)); | 63 SkASSERT(n >= 0 && n <= SkPathOpsVerbToPoints(fVerb)); |
| 64 return fCubic[n]; | 64 return fCubic[n]; |
| 65 } | 65 } |
| 66 | 66 |
| 67 SkDPoint conicTop(const SkPoint curve[3], SkScalar curveWeight, | 67 SkDPoint conicTop(const SkPoint curve[3], SkScalar curveWeight, |
| 68 double s, double e, double* topT); | 68 double s, double e, double* topT); |
| 69 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); |
| 70 void dump() const; | |
| 70 void dumpID(int ) const; | 71 void dumpID(int ) const; |
| 71 SkDPoint lineTop(const SkPoint[2], SkScalar , double , double , double* topT ); | 72 SkDPoint lineTop(const SkPoint[2], SkScalar , double , double , double* topT ); |
| 73 double nearPoint(SkPath::Verb verb, const SkDPoint& xy, const SkDPoint& opp) const; | |
| 74 void offset(SkPath::Verb verb, const SkDVector& ); | |
| 72 SkDPoint quadTop(const SkPoint curve[3], SkScalar , double s, double e, doub le* topT); | 75 SkDPoint quadTop(const SkPoint curve[3], SkScalar , double s, double e, doub le* topT); |
| 73 | 76 |
| 74 void setConicBounds(const SkPoint curve[3], SkScalar curveWeight, | 77 void setConicBounds(const SkPoint curve[3], SkScalar curveWeight, |
| 75 double s, double e, SkPathOpsBounds* ); | 78 double s, double e, SkPathOpsBounds* ); |
| 76 void setCubicBounds(const SkPoint curve[4], SkScalar , | 79 void setCubicBounds(const SkPoint curve[4], SkScalar , |
| 77 double s, double e, SkPathOpsBounds* ); | 80 double s, double e, SkPathOpsBounds* ); |
| 78 void setQuadBounds(const SkPoint curve[3], SkScalar , | 81 void setQuadBounds(const SkPoint curve[3], SkScalar , |
| 79 double s, double e, SkPathOpsBounds*); | 82 double s, double e, SkPathOpsBounds*); |
| 80 }; | 83 }; |
| 81 | 84 |
| 82 | 85 |
| 83 extern SkDPoint (SkDCurve::* const Top[])(const SkPoint curve[], SkScalar cWeigh t, | 86 extern SkDPoint (SkDCurve::* const Top[])(const SkPoint curve[], SkScalar cWeigh t, |
| 84 double tStart, double tEnd, double* topT); | 87 double tStart, double tEnd, double* topT); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 108 } | 111 } |
| 109 | 112 |
| 110 static SkDPoint (* const CurveDPointAtT[])(const SkPoint[], SkScalar , double ) = { | 113 static SkDPoint (* const CurveDPointAtT[])(const SkPoint[], SkScalar , double ) = { |
| 111 nullptr, | 114 nullptr, |
| 112 dline_xy_at_t, | 115 dline_xy_at_t, |
| 113 dquad_xy_at_t, | 116 dquad_xy_at_t, |
| 114 dconic_xy_at_t, | 117 dconic_xy_at_t, |
| 115 dcubic_xy_at_t | 118 dcubic_xy_at_t |
| 116 }; | 119 }; |
| 117 | 120 |
| 121 static SkDPoint ddline_xy_at_t(const SkDCurve& c, double t) { | |
| 122 return c.fLine.ptAtT(t); | |
| 123 } | |
| 124 | |
| 125 static SkDPoint ddquad_xy_at_t(const SkDCurve& c, double t) { | |
| 126 return c.fQuad.ptAtT(t); | |
| 127 } | |
| 128 | |
| 129 static SkDPoint ddconic_xy_at_t(const SkDCurve& c, double t) { | |
| 130 return c.fConic.ptAtT(t); | |
| 131 } | |
| 132 | |
| 133 static SkDPoint ddcubic_xy_at_t(const SkDCurve& c, double t) { | |
| 134 return c.fCubic.ptAtT(t); | |
| 135 } | |
| 136 | |
| 137 static SkDPoint (* const CurveDDPointAtT[])(const SkDCurve& , double ) = { | |
|
herb_g
2016/07/18 15:13:39
Space before ","
caryclark
2016/07/18 15:55:49
The Skia style guide https://skia.org/dev/contrib/
| |
| 138 nullptr, | |
| 139 ddline_xy_at_t, | |
| 140 ddquad_xy_at_t, | |
| 141 ddconic_xy_at_t, | |
| 142 ddcubic_xy_at_t | |
| 143 }; | |
| 144 | |
| 118 static SkPoint fline_xy_at_t(const SkPoint a[2], SkScalar weight, double t) { | 145 static SkPoint fline_xy_at_t(const SkPoint a[2], SkScalar weight, double t) { |
| 119 return dline_xy_at_t(a, weight, t).asSkPoint(); | 146 return dline_xy_at_t(a, weight, t).asSkPoint(); |
| 120 } | 147 } |
| 121 | 148 |
| 122 static SkPoint fquad_xy_at_t(const SkPoint a[3], SkScalar weight, double t) { | 149 static SkPoint fquad_xy_at_t(const SkPoint a[3], SkScalar weight, double t) { |
| 123 return dquad_xy_at_t(a, weight, t).asSkPoint(); | 150 return dquad_xy_at_t(a, weight, t).asSkPoint(); |
| 124 } | 151 } |
| 125 | 152 |
| 126 static SkPoint fconic_xy_at_t(const SkPoint a[3], SkScalar weight, double t) { | 153 static SkPoint fconic_xy_at_t(const SkPoint a[3], SkScalar weight, double t) { |
| 127 return dconic_xy_at_t(a, weight, t).asSkPoint(); | 154 return dconic_xy_at_t(a, weight, t).asSkPoint(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 } | 191 } |
| 165 | 192 |
| 166 static SkDVector (* const CurveDSlopeAtT[])(const SkPoint[], SkScalar , double ) = { | 193 static SkDVector (* const CurveDSlopeAtT[])(const SkPoint[], SkScalar , double ) = { |
| 167 nullptr, | 194 nullptr, |
| 168 dline_dxdy_at_t, | 195 dline_dxdy_at_t, |
| 169 dquad_dxdy_at_t, | 196 dquad_dxdy_at_t, |
| 170 dconic_dxdy_at_t, | 197 dconic_dxdy_at_t, |
| 171 dcubic_dxdy_at_t | 198 dcubic_dxdy_at_t |
| 172 }; | 199 }; |
| 173 | 200 |
| 201 static SkDVector ddline_dxdy_at_t(const SkDCurve& c, double ) { | |
| 202 return c.fLine.fPts[1] - c.fLine.fPts[0]; | |
| 203 } | |
| 204 | |
| 205 static SkDVector ddquad_dxdy_at_t(const SkDCurve& c, double t) { | |
| 206 return c.fQuad.dxdyAtT(t); | |
| 207 } | |
| 208 | |
| 209 static SkDVector ddconic_dxdy_at_t(const SkDCurve& c, double t) { | |
| 210 return c.fConic.dxdyAtT(t); | |
| 211 } | |
| 212 | |
| 213 static SkDVector ddcubic_dxdy_at_t(const SkDCurve& c, double t) { | |
| 214 return c.fCubic.dxdyAtT(t); | |
| 215 } | |
| 216 | |
| 217 static SkDVector (* const CurveDDSlopeAtT[])(const SkDCurve& , double ) = { | |
| 218 nullptr, | |
| 219 ddline_dxdy_at_t, | |
| 220 ddquad_dxdy_at_t, | |
| 221 ddconic_dxdy_at_t, | |
| 222 ddcubic_dxdy_at_t | |
| 223 }; | |
| 224 | |
| 174 static SkVector fline_dxdy_at_t(const SkPoint a[2], SkScalar , double ) { | 225 static SkVector fline_dxdy_at_t(const SkPoint a[2], SkScalar , double ) { |
| 175 return a[1] - a[0]; | 226 return a[1] - a[0]; |
| 176 } | 227 } |
| 177 | 228 |
| 178 static SkVector fquad_dxdy_at_t(const SkPoint a[3], SkScalar weight, double t) { | 229 static SkVector fquad_dxdy_at_t(const SkPoint a[3], SkScalar weight, double t) { |
| 179 return dquad_dxdy_at_t(a, weight, t).asSkVector(); | 230 return dquad_dxdy_at_t(a, weight, t).asSkVector(); |
| 180 } | 231 } |
| 181 | 232 |
| 182 static SkVector fconic_dxdy_at_t(const SkPoint a[3], SkScalar weight, double t) { | 233 static SkVector fconic_dxdy_at_t(const SkPoint a[3], SkScalar weight, double t) { |
| 183 return dconic_dxdy_at_t(a, weight, t).asSkVector(); | 234 return dconic_dxdy_at_t(a, weight, t).asSkVector(); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 | 313 |
| 263 static void (* const CurveIntersectRay[])(const SkPoint[] , SkScalar , const SkD Line& , | 314 static void (* const CurveIntersectRay[])(const SkPoint[] , SkScalar , const SkD Line& , |
| 264 SkIntersections* ) = { | 315 SkIntersections* ) = { |
| 265 nullptr, | 316 nullptr, |
| 266 line_intersect_ray, | 317 line_intersect_ray, |
| 267 quad_intersect_ray, | 318 quad_intersect_ray, |
| 268 conic_intersect_ray, | 319 conic_intersect_ray, |
| 269 cubic_intersect_ray | 320 cubic_intersect_ray |
| 270 }; | 321 }; |
| 271 | 322 |
| 323 static void dline_intersect_ray(const SkDCurve& c, const SkDLine& ray, SkInters ections* i) { | |
| 324 i->intersectRay(c.fLine, ray); | |
| 325 } | |
| 326 | |
| 327 static void dquad_intersect_ray(const SkDCurve& c, const SkDLine& ray, SkInterse ctions* i) { | |
| 328 i->intersectRay(c.fQuad, ray); | |
| 329 } | |
| 330 | |
| 331 static void dconic_intersect_ray(const SkDCurve& c, const SkDLine& ray, SkInters ections* i) { | |
| 332 i->intersectRay(c.fConic, ray); | |
| 333 } | |
| 334 | |
| 335 static void dcubic_intersect_ray(const SkDCurve& c, const SkDLine& ray, SkInters ections* i) { | |
| 336 i->intersectRay(c.fCubic, ray); | |
| 337 } | |
| 338 | |
| 339 static void (* const CurveDIntersectRay[])(const SkDCurve& , const SkDLine& , Sk Intersections* ) = { | |
| 340 nullptr, | |
| 341 dline_intersect_ray, | |
| 342 dquad_intersect_ray, | |
| 343 dconic_intersect_ray, | |
| 344 dcubic_intersect_ray | |
| 345 }; | |
| 346 | |
| 272 static int line_intercept_h(const SkPoint a[2], SkScalar , SkScalar y, double* r oots) { | 347 static int line_intercept_h(const SkPoint a[2], SkScalar , SkScalar y, double* r oots) { |
| 273 SkDLine line; | 348 SkDLine line; |
| 274 roots[0] = SkIntersections::HorizontalIntercept(line.set(a), y); | 349 roots[0] = SkIntersections::HorizontalIntercept(line.set(a), y); |
| 275 return between(0, roots[0], 1); | 350 return between(0, roots[0], 1); |
| 276 } | 351 } |
| 277 | 352 |
| 278 static int line_intercept_v(const SkPoint a[2], SkScalar , SkScalar x, double* r oots) { | 353 static int line_intercept_v(const SkPoint a[2], SkScalar , SkScalar x, double* r oots) { |
| 279 SkDLine line; | 354 SkDLine line; |
| 280 roots[0] = SkIntersections::VerticalIntercept(line.set(a), x); | 355 roots[0] = SkIntersections::VerticalIntercept(line.set(a), x); |
| 281 return between(0, roots[0], 1); | 356 return between(0, roots[0], 1); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 318 line_intercept_v, | 393 line_intercept_v, |
| 319 quad_intercept_h, | 394 quad_intercept_h, |
| 320 quad_intercept_v, | 395 quad_intercept_v, |
| 321 conic_intercept_h, | 396 conic_intercept_h, |
| 322 conic_intercept_v, | 397 conic_intercept_v, |
| 323 cubic_intercept_h, | 398 cubic_intercept_h, |
| 324 cubic_intercept_v, | 399 cubic_intercept_v, |
| 325 }; | 400 }; |
| 326 | 401 |
| 327 #endif | 402 #endif |
| OLD | NEW |