| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrOvalRenderer.h" | 8 #include "GrOvalRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatch.h" | 10 #include "GrBatch.h" |
| (...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 | 1246 |
| 1247 for (int i = 0; i < instanceCount; i++) { | 1247 for (int i = 0; i < instanceCount; i++) { |
| 1248 Geometry& geom = fGeoData[i]; | 1248 Geometry& geom = fGeoData[i]; |
| 1249 | 1249 |
| 1250 SkScalar xRadius = geom.fXRadius; | 1250 SkScalar xRadius = geom.fXRadius; |
| 1251 SkScalar yRadius = geom.fYRadius; | 1251 SkScalar yRadius = geom.fYRadius; |
| 1252 | 1252 |
| 1253 const SkRect& bounds = geom.fBounds; | 1253 const SkRect& bounds = geom.fBounds; |
| 1254 | 1254 |
| 1255 // This adjusts the "radius" to include the half-pixel border | 1255 // This adjusts the "radius" to include the half-pixel border |
| 1256 SkScalar offsetDx = geom.fGeoDx / xRadius; | 1256 SkScalar offsetDx = SkScalarDiv(geom.fGeoDx, xRadius); |
| 1257 SkScalar offsetDy = geom.fGeoDy / yRadius; | 1257 SkScalar offsetDy = SkScalarDiv(geom.fGeoDy, yRadius); |
| 1258 | 1258 |
| 1259 SkScalar innerRatioX = xRadius / geom.fInnerXRadius; | 1259 SkScalar innerRatioX = SkScalarDiv(xRadius, geom.fInnerXRadius); |
| 1260 SkScalar innerRatioY = yRadius / geom.fInnerYRadius; | 1260 SkScalar innerRatioY = SkScalarDiv(yRadius, geom.fInnerYRadius); |
| 1261 | 1261 |
| 1262 verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop); | 1262 verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop); |
| 1263 verts[0].fOuterOffset = SkPoint::Make(-1.0f - offsetDx, -1.0f - offs
etDy); | 1263 verts[0].fOuterOffset = SkPoint::Make(-1.0f - offsetDx, -1.0f - offs
etDy); |
| 1264 verts[0].fInnerOffset = SkPoint::Make(-innerRatioX - offsetDx, -inne
rRatioY - offsetDy); | 1264 verts[0].fInnerOffset = SkPoint::Make(-innerRatioX - offsetDx, -inne
rRatioY - offsetDy); |
| 1265 | 1265 |
| 1266 verts[1].fPos = SkPoint::Make(bounds.fLeft, bounds.fBottom); | 1266 verts[1].fPos = SkPoint::Make(bounds.fLeft, bounds.fBottom); |
| 1267 verts[1].fOuterOffset = SkPoint::Make(-1.0f - offsetDx, 1.0f + offse
tDy); | 1267 verts[1].fOuterOffset = SkPoint::Make(-1.0f - offsetDx, 1.0f + offse
tDy); |
| 1268 verts[1].fInnerOffset = SkPoint::Make(-innerRatioX - offsetDx, inner
RatioY + offsetDy); | 1268 verts[1].fInnerOffset = SkPoint::Make(-innerRatioX - offsetDx, inner
RatioY + offsetDy); |
| 1269 | 1269 |
| 1270 verts[2].fPos = SkPoint::Make(bounds.fRight, bounds.fBottom); | 1270 verts[2].fPos = SkPoint::Make(bounds.fRight, bounds.fBottom); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1379 if (DIEllipseEdgeEffect::kStroke == mode) { | 1379 if (DIEllipseEdgeEffect::kStroke == mode) { |
| 1380 mode = (innerXRadius > 0 && innerYRadius > 0) ? DIEllipseEdgeEffect::kSt
roke : | 1380 mode = (innerXRadius > 0 && innerYRadius > 0) ? DIEllipseEdgeEffect::kSt
roke : |
| 1381 DIEllipseEdgeEffect::kFi
ll; | 1381 DIEllipseEdgeEffect::kFi
ll; |
| 1382 } | 1382 } |
| 1383 | 1383 |
| 1384 // This expands the outer rect so that after CTM we end up with a half-pixel
border | 1384 // This expands the outer rect so that after CTM we end up with a half-pixel
border |
| 1385 SkScalar a = viewMatrix[SkMatrix::kMScaleX]; | 1385 SkScalar a = viewMatrix[SkMatrix::kMScaleX]; |
| 1386 SkScalar b = viewMatrix[SkMatrix::kMSkewX]; | 1386 SkScalar b = viewMatrix[SkMatrix::kMSkewX]; |
| 1387 SkScalar c = viewMatrix[SkMatrix::kMSkewY]; | 1387 SkScalar c = viewMatrix[SkMatrix::kMSkewY]; |
| 1388 SkScalar d = viewMatrix[SkMatrix::kMScaleY]; | 1388 SkScalar d = viewMatrix[SkMatrix::kMScaleY]; |
| 1389 SkScalar geoDx = SK_ScalarHalf / SkScalarSqrt(a*a + c*c); | 1389 SkScalar geoDx = SkScalarDiv(SK_ScalarHalf, SkScalarSqrt(a*a + c*c)); |
| 1390 SkScalar geoDy = SK_ScalarHalf / SkScalarSqrt(b*b + d*d); | 1390 SkScalar geoDy = SkScalarDiv(SK_ScalarHalf, SkScalarSqrt(b*b + d*d)); |
| 1391 | 1391 |
| 1392 DIEllipseBatch::Geometry geometry; | 1392 DIEllipseBatch::Geometry geometry; |
| 1393 geometry.fViewMatrix = viewMatrix; | 1393 geometry.fViewMatrix = viewMatrix; |
| 1394 geometry.fColor = color; | 1394 geometry.fColor = color; |
| 1395 geometry.fXRadius = xRadius; | 1395 geometry.fXRadius = xRadius; |
| 1396 geometry.fYRadius = yRadius; | 1396 geometry.fYRadius = yRadius; |
| 1397 geometry.fInnerXRadius = innerXRadius; | 1397 geometry.fInnerXRadius = innerXRadius; |
| 1398 geometry.fInnerYRadius = innerYRadius; | 1398 geometry.fInnerYRadius = innerYRadius; |
| 1399 geometry.fGeoDx = geoDx; | 1399 geometry.fGeoDx = geoDx; |
| 1400 geometry.fGeoDy = geoDy; | 1400 geometry.fGeoDy = geoDy; |
| (...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2118 } | 2118 } |
| 2119 | 2119 |
| 2120 BATCH_TEST_DEFINE(RRectBatch) { | 2120 BATCH_TEST_DEFINE(RRectBatch) { |
| 2121 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); | 2121 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); |
| 2122 GrColor color = GrRandomColor(random); | 2122 GrColor color = GrRandomColor(random); |
| 2123 const SkRRect& rrect = GrTest::TestRRectSimple(random); | 2123 const SkRRect& rrect = GrTest::TestRRectSimple(random); |
| 2124 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); | 2124 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); |
| 2125 } | 2125 } |
| 2126 | 2126 |
| 2127 #endif | 2127 #endif |
| OLD | NEW |