| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 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 "SkGradientShaderPriv.h" | 8 #include "SkGradientShaderPriv.h" |
| 9 #include "SkLinearGradient.h" | 9 #include "SkLinearGradient.h" |
| 10 #include "SkRadialGradient.h" | 10 #include "SkRadialGradient.h" |
| 11 #include "SkTwoPointRadialGradient.h" | 11 #include "SkTwoPointRadialGradient.h" |
| 12 #include "SkTwoPointConicalGradient.h" | 12 #include "SkTwoPointConicalGradient.h" |
| 13 #include "SkSweepGradient.h" | 13 #include "SkSweepGradient.h" |
| 14 | 14 |
| 15 SkGradientShaderBase::SkGradientShaderBase(const Descriptor& desc) { | 15 SkGradientShaderBase::SkGradientShaderBase(const Descriptor& desc) { |
| 16 SkASSERT(desc.fCount > 1); | 16 SkASSERT(desc.fCount > 1); |
| 17 | 17 |
| 18 fCacheAlpha = 256; // init to a value that paint.getAlpha() can't return | 18 fCacheAlpha = 256; // init to a value that paint.getAlpha() can't return |
| 19 | 19 |
| 20 fMapper = desc.fMapper; | 20 fMapper = desc.fMapper; |
| 21 SkSafeRef(fMapper); | 21 SkSafeRef(fMapper); |
| 22 fGradFlags = SkToU8(desc.fFlags); | 22 fGradFlags = SkToU8(desc.fGradFlags); |
| 23 | 23 |
| 24 SkASSERT((unsigned)desc.fTileMode < SkShader::kTileModeCount); | 24 SkASSERT((unsigned)desc.fTileMode < SkShader::kTileModeCount); |
| 25 SkASSERT(SkShader::kTileModeCount == SK_ARRAY_COUNT(gTileProcs)); | 25 SkASSERT(SkShader::kTileModeCount == SK_ARRAY_COUNT(gTileProcs)); |
| 26 fTileMode = desc.fTileMode; | 26 fTileMode = desc.fTileMode; |
| 27 fTileProc = gTileProcs[desc.fTileMode]; | 27 fTileProc = gTileProcs[desc.fTileMode]; |
| 28 | 28 |
| 29 fCache16 = fCache16Storage = NULL; | 29 fCache16 = fCache16Storage = NULL; |
| 30 fCache32 = NULL; | 30 fCache32 = NULL; |
| 31 fCache32PixelRef = NULL; | 31 fCache32PixelRef = NULL; |
| 32 | 32 |
| (...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 pos = NULL; \ | 755 pos = NULL; \ |
| 756 count = 2; \ | 756 count = 2; \ |
| 757 } \ | 757 } \ |
| 758 } while (0) | 758 } while (0) |
| 759 | 759 |
| 760 static void desc_init(SkGradientShaderBase::Descriptor* desc, | 760 static void desc_init(SkGradientShaderBase::Descriptor* desc, |
| 761 const SkColor colors[], | 761 const SkColor colors[], |
| 762 const SkScalar pos[], int colorCount, | 762 const SkScalar pos[], int colorCount, |
| 763 SkShader::TileMode mode, | 763 SkShader::TileMode mode, |
| 764 SkUnitMapper* mapper, uint32_t flags) { | 764 SkUnitMapper* mapper, uint32_t flags) { |
| 765 desc->fColors = colors; | 765 desc->fColors = colors; |
| 766 desc->fPos = pos; | 766 desc->fPos = pos; |
| 767 desc->fCount = colorCount; | 767 desc->fCount = colorCount; |
| 768 desc->fTileMode = mode; | 768 desc->fTileMode = mode; |
| 769 desc->fMapper = mapper; | 769 desc->fMapper = mapper; |
| 770 desc->fFlags = flags; | 770 desc->fGradFlags = flags; |
| 771 } | 771 } |
| 772 | 772 |
| 773 SkShader* SkGradientShader::CreateLinear(const SkPoint pts[2], | 773 SkShader* SkGradientShader::CreateLinear(const SkPoint pts[2], |
| 774 const SkColor colors[], | 774 const SkColor colors[], |
| 775 const SkScalar pos[], int colorCount, | 775 const SkScalar pos[], int colorCount, |
| 776 SkShader::TileMode mode, | 776 SkShader::TileMode mode, |
| 777 SkUnitMapper* mapper, | 777 SkUnitMapper* mapper, |
| 778 uint32_t flags) { | 778 uint32_t flags) { |
| 779 if (NULL == pts || NULL == colors || colorCount < 1) { | 779 if (NULL == pts || NULL == colors || colorCount < 1) { |
| 780 return NULL; | 780 return NULL; |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 | 1076 |
| 1077 fIsOpaque = shader.isOpaque(); | 1077 fIsOpaque = shader.isOpaque(); |
| 1078 | 1078 |
| 1079 fColorType = shader.getGpuColorType(&fColors[0]); | 1079 fColorType = shader.getGpuColorType(&fColors[0]); |
| 1080 | 1080 |
| 1081 // The two and three color specializations do not currently support tiling. | 1081 // The two and three color specializations do not currently support tiling. |
| 1082 if (SkGradientShaderBase::kTwo_GpuColorType == fColorType || | 1082 if (SkGradientShaderBase::kTwo_GpuColorType == fColorType || |
| 1083 SkGradientShaderBase::kThree_GpuColorType == fColorType) { | 1083 SkGradientShaderBase::kThree_GpuColorType == fColorType) { |
| 1084 fRow = -1; | 1084 fRow = -1; |
| 1085 | 1085 |
| 1086 if (SkGradientShader::kInterpolateColorsInPremul_Flag & shader.getFlags(
)) { | 1086 if (SkGradientShader::kInterpolateColorsInPremul_Flag & shader.getGradFl
ags()) { |
| 1087 fPremulType = kBeforeInterp_PremulType; | 1087 fPremulType = kBeforeInterp_PremulType; |
| 1088 } else { | 1088 } else { |
| 1089 fPremulType = kAfterInterp_PremulType; | 1089 fPremulType = kAfterInterp_PremulType; |
| 1090 } | 1090 } |
| 1091 fCoordTransform.reset(kCoordSet, matrix); | 1091 fCoordTransform.reset(kCoordSet, matrix); |
| 1092 } else { | 1092 } else { |
| 1093 // doesn't matter how this is set, just be consistent because it is part
of the effect key. | 1093 // doesn't matter how this is set, just be consistent because it is part
of the effect key. |
| 1094 fPremulType = kBeforeInterp_PremulType; | 1094 fPremulType = kBeforeInterp_PremulType; |
| 1095 SkBitmap bitmap; | 1095 SkBitmap bitmap; |
| 1096 shader.getGradientTableBitmap(&bitmap); | 1096 shader.getGradientTableBitmap(&bitmap); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 (*stops)[i] = stop; | 1195 (*stops)[i] = stop; |
| 1196 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st
op) : 1.f; | 1196 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st
op) : 1.f; |
| 1197 } | 1197 } |
| 1198 } | 1198 } |
| 1199 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM
odeCount)); | 1199 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM
odeCount)); |
| 1200 | 1200 |
| 1201 return outColors; | 1201 return outColors; |
| 1202 } | 1202 } |
| 1203 | 1203 |
| 1204 #endif | 1204 #endif |
| OLD | NEW |