| 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 "SkLinearGradient.h" | 8 #include "SkLinearGradient.h" |
| 9 | 9 |
| 10 static const float kInv255Float = 1.0f / 255; | 10 static const float kInv255Float = 1.0f / 255; |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 TileProc proc = linearGradient.fTileProc; | 280 TileProc proc = linearGradient.fTileProc; |
| 281 const SkPMColor* SK_RESTRICT cache = fCache->getCache32(); | 281 const SkPMColor* SK_RESTRICT cache = fCache->getCache32(); |
| 282 int toggle = init_dither_toggle(x, y); | 282 int toggle = init_dither_toggle(x, y); |
| 283 | 283 |
| 284 if (fDstToIndexClass != kPerspective_MatrixClass) { | 284 if (fDstToIndexClass != kPerspective_MatrixClass) { |
| 285 dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf, | 285 dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf, |
| 286 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 286 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
| 287 SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); | 287 SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); |
| 288 | 288 |
| 289 if (fDstToIndexClass == kFixedStepInX_MatrixClass) { | 289 if (fDstToIndexClass == kFixedStepInX_MatrixClass) { |
| 290 SkFixed dxStorage[1]; | 290 const auto step = fDstToIndex.fixedStepInX(SkIntToScalar(y)); |
| 291 (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, nullptr)
; | |
| 292 // todo: do we need a real/high-precision value for dx here? | 291 // todo: do we need a real/high-precision value for dx here? |
| 293 dx = SkFixedToGradFixed(dxStorage[0]); | 292 dx = SkScalarToGradFixed(step.fX); |
| 294 } else { | 293 } else { |
| 295 SkASSERT(fDstToIndexClass == kLinear_MatrixClass); | 294 SkASSERT(fDstToIndexClass == kLinear_MatrixClass); |
| 296 dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); | 295 dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); |
| 297 } | 296 } |
| 298 | 297 |
| 299 LinearShadeProc shadeProc = shadeSpan_linear_repeat; | 298 LinearShadeProc shadeProc = shadeSpan_linear_repeat; |
| 300 if (0 == dx) { | 299 if (0 == dx) { |
| 301 shadeProc = shadeSpan_linear_vertical_lerp; | 300 shadeProc = shadeSpan_linear_vertical_lerp; |
| 302 } else if (SkShader::kClamp_TileMode == linearGradient.fTileMode) { | 301 } else if (SkShader::kClamp_TileMode == linearGradient.fTileMode) { |
| 303 shadeProc = shadeSpan_linear_clamp; | 302 shadeProc = shadeSpan_linear_clamp; |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 this->shade4_dx_clamp<false, true>(dstC, count, fx, dx, invDx, dithe
r); | 739 this->shade4_dx_clamp<false, true>(dstC, count, fx, dx, invDx, dithe
r); |
| 741 } | 740 } |
| 742 } else { | 741 } else { |
| 743 if (fApplyAlphaAfterInterp) { | 742 if (fApplyAlphaAfterInterp) { |
| 744 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe
r); | 743 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe
r); |
| 745 } else { | 744 } else { |
| 746 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith
er); | 745 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith
er); |
| 747 } | 746 } |
| 748 } | 747 } |
| 749 } | 748 } |
| 750 | |
| OLD | NEW |