| 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 | 7 |
| 8 #include "GrStrokePathRenderer.h" | 8 #include "GrStrokePathRenderer.h" |
| 9 | 9 |
| 10 #include "GrDrawTarget.h" | 10 #include "GrDrawTarget.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 SkScalar d = SkScalarMul(x1 - x2, y3 - y4) - SkScalarMul(y1 - y2, x3 - x4); | 32 SkScalar d = SkScalarMul(x1 - x2, y3 - y4) - SkScalarMul(y1 - y2, x3 - x4); |
| 33 // If d is zero, there is no intersection | 33 // If d is zero, there is no intersection |
| 34 if (SkScalarNearlyZero(d)) { | 34 if (SkScalarNearlyZero(d)) { |
| 35 return kNone_IntersectionType; | 35 return kNone_IntersectionType; |
| 36 } | 36 } |
| 37 | 37 |
| 38 // Get the x and y | 38 // Get the x and y |
| 39 SkScalar pre = SkScalarMul(x1, y2) - SkScalarMul(y1, x2), | 39 SkScalar pre = SkScalarMul(x1, y2) - SkScalarMul(y1, x2), |
| 40 post = SkScalarMul(x3, y4) - SkScalarMul(y3, x4); | 40 post = SkScalarMul(x3, y4) - SkScalarMul(y3, x4); |
| 41 // Compute the point of intersection | 41 // Compute the point of intersection |
| 42 res.set(SkScalarDiv(SkScalarMul(pre, x3 - x4) - SkScalarMul(x1 - x2, post),
d), | 42 res.set((SkScalarMul(pre, x3 - x4) - SkScalarMul(x1 - x2, post) / d, |
| 43 SkScalarDiv(SkScalarMul(pre, y3 - y4) - SkScalarMul(y1 - y2, post),
d)); | 43 (SkScalarMul(pre, y3 - y4) - SkScalarMul(y1 - y2, post) / d); |
| 44 | 44 |
| 45 // Check if the x and y coordinates are within both lines | 45 // Check if the x and y coordinates are within both lines |
| 46 return (res.x() < GrMin(x1, x2) || res.x() > GrMax(x1, x2) || | 46 return (res.x() < GrMin(x1, x2) || res.x() > GrMax(x1, x2) || |
| 47 res.x() < GrMin(x3, x4) || res.x() > GrMax(x3, x4) || | 47 res.x() < GrMin(x3, x4) || res.x() > GrMax(x3, x4) || |
| 48 res.y() < GrMin(y1, y2) || res.y() > GrMax(y1, y2) || | 48 res.y() < GrMin(y1, y2) || res.y() > GrMax(y1, y2) || |
| 49 res.y() < GrMin(y3, y4) || res.y() > GrMax(y3, y4)) ? | 49 res.y() < GrMin(y3, y4) || res.y() > GrMax(y3, y4)) ? |
| 50 kOut_IntersectionType : kIn_IntersectionType; | 50 kOut_IntersectionType : kIn_IntersectionType; |
| 51 } | 51 } |
| 52 | 52 |
| 53 GrStrokePathRenderer::GrStrokePathRenderer() { | 53 GrStrokePathRenderer::GrStrokePathRenderer() { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 if (sinHalfAngleSq >= invMiterLimitSq) { | 177 if (sinHalfAngleSq >= invMiterLimitSq) { |
| 178 // Find the miter point (or points i
f it is further | 178 // Find the miter point (or points i
f it is further |
| 179 // than the miter limit) | 179 // than the miter limit) |
| 180 const SkPoint pt2 = *pt0+v0, pt3 = *
pt1+v1; | 180 const SkPoint pt2 = *pt0+v0, pt3 = *
pt1+v1; |
| 181 if (intersection(*pt0, pt2, *pt1, pt
3, miterPt[0]) != | 181 if (intersection(*pt0, pt2, *pt1, pt
3, miterPt[0]) != |
| 182 kNone_IntersectionType) { | 182 kNone_IntersectionType) { |
| 183 SkPoint miterPt0 = miterPt[0] -
*pt0; | 183 SkPoint miterPt0 = miterPt[0] -
*pt0; |
| 184 SkPoint miterPt1 = miterPt[0] -
*pt1; | 184 SkPoint miterPt1 = miterPt[0] -
*pt1; |
| 185 SkScalar sqDist0 = miterPt0.dot(
miterPt0); | 185 SkScalar sqDist0 = miterPt0.dot(
miterPt0); |
| 186 SkScalar sqDist1 = miterPt1.dot(
miterPt1); | 186 SkScalar sqDist1 = miterPt1.dot(
miterPt1); |
| 187 const SkScalar rSq = | 187 const SkScalar rSq = radius*radi
us / sinHalfAngleSq; |
| 188 SkScalarDiv(SkScalarMul(
radius, radius), | |
| 189 sinHalfAngle
Sq); | |
| 190 const SkScalar sqRLimit = | 188 const SkScalar sqRLimit = |
| 191 SkScalarMul(sqMiterLimit
, rSq); | 189 SkScalarMul(sqMiterLimit
, rSq); |
| 192 if (sqDist0 > sqRLimit || sqDist
1 > sqRLimit) { | 190 if (sqDist0 > sqRLimit || sqDist
1 > sqRLimit) { |
| 193 if (sqDist1 > sqRLimit) { | 191 if (sqDist1 > sqRLimit) { |
| 194 v1.setLength(SkScalarSqr
t(sqRLimit)); | 192 v1.setLength(SkScalarSqr
t(sqRLimit)); |
| 195 miterPt[1] = *pt1+v1; | 193 miterPt[1] = *pt1+v1; |
| 196 } else { | 194 } else { |
| 197 miterPt[1] = miterPt[0]; | 195 miterPt[1] = miterPt[0]; |
| 198 } | 196 } |
| 199 if (sqDist0 > sqRLimit) { | 197 if (sqDist0 > sqRLimit) { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 if (vCount > 0) { | 289 if (vCount > 0) { |
| 292 target->drawIndexed(kTriangles_GrPrimitiveType, | 290 target->drawIndexed(kTriangles_GrPrimitiveType, |
| 293 0, // start vertex | 291 0, // start vertex |
| 294 0, // start index | 292 0, // start index |
| 295 vCount, | 293 vCount, |
| 296 iCount); | 294 iCount); |
| 297 } | 295 } |
| 298 | 296 |
| 299 return true; | 297 return true; |
| 300 } | 298 } |
| OLD | NEW |