diff options
author | benjaminwagner <benjaminwagner@google.com> | 2016-02-16 10:09:40 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-16 10:09:40 -0800 |
commit | 8e17556349132a46c02fbabcaf74b63f521528e0 (patch) | |
tree | bafcbb7188ab624191337a4f636eb55f1d80aa68 /src | |
parent | e71dc3fd0d7e8a9ff8ffbb56c5c2a9daeed9df49 (diff) |
Change SkMatrix::fixedStepInX to return SkVector (of SkScalar) rather than SkFixed.
All users were immediately converting to SkScalar or SkFixed3232.
This method is not used in Chromium, Android, or Google3.
BUG=skia:4632
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1692013002
Review URL: https://codereview.chromium.org/1692013002
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkMatrix.cpp | 36 | ||||
-rw-r--r-- | src/core/SkShader.cpp | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkLinearGradient.cpp | 6 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.cpp | 8 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 8 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.cpp | 7 |
6 files changed, 24 insertions, 43 deletions
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp index 7ae4ed21eb..f60ce85a6c 100644 --- a/src/core/SkMatrix.cpp +++ b/src/core/SkMatrix.cpp @@ -1150,30 +1150,19 @@ const SkMatrix::MapXYProc SkMatrix::gMapXYProcs[] = { // if its nearly zero (just made up 26, perhaps it should be bigger or smaller) #define PerspNearlyZero(x) SkScalarNearlyZero(x, (1.0f / (1 << 26))) -bool SkMatrix::fixedStepInX(SkScalar y, SkFixed* stepX, SkFixed* stepY) const { - if (PerspNearlyZero(fMat[kMPersp0])) { - if (stepX || stepY) { - if (PerspNearlyZero(fMat[kMPersp1]) && - PerspNearlyZero(fMat[kMPersp2] - 1)) { - if (stepX) { - *stepX = SkScalarToFixed(fMat[kMScaleX]); - } - if (stepY) { - *stepY = SkScalarToFixed(fMat[kMSkewY]); - } - } else { - SkScalar z = y * fMat[kMPersp1] + fMat[kMPersp2]; - if (stepX) { - *stepX = SkScalarToFixed(fMat[kMScaleX] / z); - } - if (stepY) { - *stepY = SkScalarToFixed(fMat[kMSkewY] / z); - } - } - } - return true; +bool SkMatrix::isFixedStepInX() const { + return PerspNearlyZero(fMat[kMPersp0]); +} + +SkVector SkMatrix::fixedStepInX(SkScalar y) const { + SkASSERT(PerspNearlyZero(fMat[kMPersp0])); + if (PerspNearlyZero(fMat[kMPersp1]) && + PerspNearlyZero(fMat[kMPersp2] - 1)) { + return SkVector::Make(fMat[kMScaleX], fMat[kMSkewY]); + } else { + SkScalar z = y * fMat[kMPersp1] + fMat[kMPersp2]; + return SkVector::Make(fMat[kMScaleX] / z, fMat[kMSkewY] / z); } - return false; } /////////////////////////////////////////////////////////////////////////////// @@ -1800,4 +1789,3 @@ void SkRSXform::toQuad(SkScalar width, SkScalar height, SkPoint quad[4]) const { quad[3].set(m01 * height + m02, m11 * height + m12); #endif } - diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp index 4b5dc5dc06..20402a973d 100644 --- a/src/core/SkShader.cpp +++ b/src/core/SkShader.cpp @@ -201,7 +201,7 @@ SkShader::Context::MatrixClass SkShader::Context::ComputeMatrixClass(const SkMat MatrixClass mc = kLinear_MatrixClass; if (mat.hasPerspective()) { - if (mat.fixedStepInX(0, nullptr, nullptr)) { + if (mat.isFixedStepInX()) { mc = kFixedStepInX_MatrixClass; } else { mc = kPerspective_MatrixClass; diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index 4a27a35de4..a1abe543c6 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -287,10 +287,9 @@ void SkLinearGradient::LinearGradientContext::shadeSpan(int x, int y, SkPMColor* SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); if (fDstToIndexClass == kFixedStepInX_MatrixClass) { - SkFixed dxStorage[1]; - (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, nullptr); + const auto step = fDstToIndex.fixedStepInX(SkIntToScalar(y)); // todo: do we need a real/high-precision value for dx here? - dx = SkFixedToGradFixed(dxStorage[0]); + dx = SkScalarToGradFixed(step.fX); } else { SkASSERT(fDstToIndexClass == kLinear_MatrixClass); dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); @@ -747,4 +746,3 @@ void SkLinearGradient::LinearGradientContext::shade4_clamp(int x, int y, SkPMCol } } } - diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index 7e7ac7a406..020c25ec46 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -206,11 +206,9 @@ void SkRadialGradient::RadialGradientContext::shadeSpan(int x, int y, SkScalar sdy = fDstToIndex.getSkewY(); if (fDstToIndexClass == kFixedStepInX_MatrixClass) { - SkFixed storage[2]; - (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), - &storage[0], &storage[1]); - sdx = SkFixedToScalar(storage[0]); - sdy = SkFixedToScalar(storage[1]); + const auto step = fDstToIndex.fixedStepInX(SkIntToScalar(y)); + sdx = step.fX; + sdy = step.fY; } else { SkASSERT(fDstToIndexClass == kLinear_MatrixClass); } diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index ddff882e38..94686524ed 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -92,11 +92,9 @@ void SkSweepGradient::SweepGradientContext::shadeSpan(int x, int y, SkPMColor* S SkScalar dy, fy = srcPt.fY; if (fDstToIndexClass == kFixedStepInX_MatrixClass) { - SkFixed storage[2]; - (void)matrix.fixedStepInX(SkIntToScalar(y) + SK_ScalarHalf, - &storage[0], &storage[1]); - dx = SkFixedToScalar(storage[0]); - dy = SkFixedToScalar(storage[1]); + const auto step = matrix.fixedStepInX(SkIntToScalar(y) + SK_ScalarHalf); + dx = step.fX; + dy = step.fY; } else { SkASSERT(fDstToIndexClass == kLinear_MatrixClass); dx = matrix.getScaleX(); diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index 918f2e06dd..b7c95bc809 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -261,10 +261,9 @@ void SkTwoPointConicalGradient::TwoPointConicalGradientContext::shadeSpan( SkScalar dy, fy = srcPt.fY; if (fDstToIndexClass == kFixedStepInX_MatrixClass) { - SkFixed fixedX, fixedY; - (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), &fixedX, &fixedY); - dx = SkFixedToScalar(fixedX); - dy = SkFixedToScalar(fixedY); + const auto step = fDstToIndex.fixedStepInX(SkIntToScalar(y)); + dx = step.fX; + dy = step.fY; } else { SkASSERT(fDstToIndexClass == kLinear_MatrixClass); dx = fDstToIndex.getScaleX(); |