| 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 "Sk4fLinearGradient.h" | 8 #include "Sk4fLinearGradient.h" |
| 9 #include "SkGradientShaderPriv.h" | 9 #include "SkGradientShaderPriv.h" |
| 10 #include "SkLinearGradient.h" | 10 #include "SkLinearGradient.h" |
| (...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 779 const SkColor colors[], const SkScalar pos[], int colorCou
nt, | 779 const SkColor colors[], const SkScalar pos[], int colorCou
nt, |
| 780 SkShader::TileMode mode, uint32_t flags, const SkMatrix* l
ocalMatrix) { | 780 SkShader::TileMode mode, uint32_t flags, const SkMatrix* l
ocalMatrix) { |
| 781 desc->fColors = colors; | 781 desc->fColors = colors; |
| 782 desc->fPos = pos; | 782 desc->fPos = pos; |
| 783 desc->fCount = colorCount; | 783 desc->fCount = colorCount; |
| 784 desc->fTileMode = mode; | 784 desc->fTileMode = mode; |
| 785 desc->fGradFlags = flags; | 785 desc->fGradFlags = flags; |
| 786 desc->fLocalMatrix = localMatrix; | 786 desc->fLocalMatrix = localMatrix; |
| 787 } | 787 } |
| 788 | 788 |
| 789 SkShader* SkGradientShader::CreateLinear(const SkPoint pts[2], | 789 sk_sp<SkShader> SkGradientShader::MakeLinear(const SkPoint pts[2], |
| 790 const SkColor colors[], | 790 const SkColor colors[], |
| 791 const SkScalar pos[], int colorCount, | 791 const SkScalar pos[], int colorCount, |
| 792 SkShader::TileMode mode, | 792 SkShader::TileMode mode, |
| 793 uint32_t flags, | 793 uint32_t flags, |
| 794 const SkMatrix* localMatrix) { | 794 const SkMatrix* localMatrix) { |
| 795 if (!pts) { | 795 if (!pts) { |
| 796 return nullptr; | 796 return nullptr; |
| 797 } | 797 } |
| 798 if (!valid_grad(colors, pos, colorCount, mode)) { | 798 if (!valid_grad(colors, pos, colorCount, mode)) { |
| 799 return nullptr; | 799 return nullptr; |
| 800 } | 800 } |
| 801 EXPAND_1_COLOR(colorCount); | 801 EXPAND_1_COLOR(colorCount); |
| 802 | 802 |
| 803 SkGradientShaderBase::Descriptor desc; | 803 SkGradientShaderBase::Descriptor desc; |
| 804 desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix); | 804 desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix); |
| 805 return new SkLinearGradient(pts, desc); | 805 return sk_make_sp<SkLinearGradient>(pts, desc); |
| 806 } | 806 } |
| 807 | 807 |
| 808 SkShader* SkGradientShader::CreateRadial(const SkPoint& center, SkScalar radius, | 808 sk_sp<SkShader> SkGradientShader::MakeRadial(const SkPoint& center, SkScalar rad
ius, |
| 809 const SkColor colors[], | 809 const SkColor colors[], |
| 810 const SkScalar pos[], int colorCount, | 810 const SkScalar pos[], int colorCount, |
| 811 SkShader::TileMode mode, | 811 SkShader::TileMode mode, |
| 812 uint32_t flags, | 812 uint32_t flags, |
| 813 const SkMatrix* localMatrix) { | 813 const SkMatrix* localMatrix) { |
| 814 if (radius <= 0) { | 814 if (radius <= 0) { |
| 815 return nullptr; | 815 return nullptr; |
| 816 } | 816 } |
| 817 if (!valid_grad(colors, pos, colorCount, mode)) { | 817 if (!valid_grad(colors, pos, colorCount, mode)) { |
| 818 return nullptr; | 818 return nullptr; |
| 819 } | 819 } |
| 820 EXPAND_1_COLOR(colorCount); | 820 EXPAND_1_COLOR(colorCount); |
| 821 | 821 |
| 822 SkGradientShaderBase::Descriptor desc; | 822 SkGradientShaderBase::Descriptor desc; |
| 823 desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix); | 823 desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix); |
| 824 return new SkRadialGradient(center, radius, desc); | 824 return sk_make_sp<SkRadialGradient>(center, radius, desc); |
| 825 } | 825 } |
| 826 | 826 |
| 827 SkShader* SkGradientShader::CreateTwoPointConical(const SkPoint& start, | 827 sk_sp<SkShader> SkGradientShader::MakeTwoPointConical(const SkPoint& start, |
| 828 SkScalar startRadius, | 828 SkScalar startRadius, |
| 829 const SkPoint& end, | 829 const SkPoint& end, |
| 830 SkScalar endRadius, | 830 SkScalar endRadius, |
| 831 const SkColor colors[], | 831 const SkColor colors[], |
| 832 const SkScalar pos[], | 832 const SkScalar pos[], |
| 833 int colorCount, | 833 int colorCount, |
| 834 SkShader::TileMode mode, | 834 SkShader::TileMode mode, |
| 835 uint32_t flags, | 835 uint32_t flags, |
| 836 const SkMatrix* localMatrix) { | 836 const SkMatrix* localMatrix) { |
| 837 if (startRadius < 0 || endRadius < 0) { | 837 if (startRadius < 0 || endRadius < 0) { |
| 838 return nullptr; | 838 return nullptr; |
| 839 } | 839 } |
| 840 if (!valid_grad(colors, pos, colorCount, mode)) { | 840 if (!valid_grad(colors, pos, colorCount, mode)) { |
| 841 return nullptr; | 841 return nullptr; |
| 842 } | 842 } |
| 843 if (startRadius == endRadius) { | 843 if (startRadius == endRadius) { |
| 844 if (start == end || startRadius == 0) { | 844 if (start == end || startRadius == 0) { |
| 845 return SkShader::CreateEmptyShader(); | 845 return SkShader::MakeEmptyShader(); |
| 846 } | 846 } |
| 847 } | 847 } |
| 848 | 848 |
| 849 EXPAND_1_COLOR(colorCount); | 849 EXPAND_1_COLOR(colorCount); |
| 850 | 850 |
| 851 bool flipGradient = startRadius > endRadius; | 851 bool flipGradient = startRadius > endRadius; |
| 852 | 852 |
| 853 SkGradientShaderBase::Descriptor desc; | 853 SkGradientShaderBase::Descriptor desc; |
| 854 | 854 |
| 855 if (!flipGradient) { | 855 if (!flipGradient) { |
| 856 desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix); | 856 desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix); |
| 857 return new SkTwoPointConicalGradient(start, startRadius, end, endRadius,
flipGradient, | 857 return sk_make_sp<SkTwoPointConicalGradient>(start, startRadius, end, en
dRadius, |
| 858 desc); | 858 flipGradient, desc); |
| 859 } else { | 859 } else { |
| 860 SkAutoSTArray<8, SkColor> colorsNew(colorCount); | 860 SkAutoSTArray<8, SkColor> colorsNew(colorCount); |
| 861 SkAutoSTArray<8, SkScalar> posNew(colorCount); | 861 SkAutoSTArray<8, SkScalar> posNew(colorCount); |
| 862 for (int i = 0; i < colorCount; ++i) { | 862 for (int i = 0; i < colorCount; ++i) { |
| 863 colorsNew[i] = colors[colorCount - i - 1]; | 863 colorsNew[i] = colors[colorCount - i - 1]; |
| 864 } | 864 } |
| 865 | 865 |
| 866 if (pos) { | 866 if (pos) { |
| 867 for (int i = 0; i < colorCount; ++i) { | 867 for (int i = 0; i < colorCount; ++i) { |
| 868 posNew[i] = 1 - pos[colorCount - i - 1]; | 868 posNew[i] = 1 - pos[colorCount - i - 1]; |
| 869 } | 869 } |
| 870 desc_init(&desc, colorsNew.get(), posNew.get(), colorCount, mode, fl
ags, localMatrix); | 870 desc_init(&desc, colorsNew.get(), posNew.get(), colorCount, mode, fl
ags, localMatrix); |
| 871 } else { | 871 } else { |
| 872 desc_init(&desc, colorsNew.get(), nullptr, colorCount, mode, flags,
localMatrix); | 872 desc_init(&desc, colorsNew.get(), nullptr, colorCount, mode, flags,
localMatrix); |
| 873 } | 873 } |
| 874 | 874 |
| 875 return new SkTwoPointConicalGradient(end, endRadius, start, startRadius,
flipGradient, | 875 return sk_make_sp<SkTwoPointConicalGradient>(end, endRadius, start, star
tRadius, |
| 876 desc); | 876 flipGradient, desc); |
| 877 } | 877 } |
| 878 } | 878 } |
| 879 | 879 |
| 880 SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy, | 880 sk_sp<SkShader> SkGradientShader::MakeSweep(SkScalar cx, SkScalar cy, |
| 881 const SkColor colors[], | 881 const SkColor colors[], |
| 882 const SkScalar pos[], | 882 const SkScalar pos[], |
| 883 int colorCount, | 883 int colorCount, |
| 884 uint32_t flags, | 884 uint32_t flags, |
| 885 const SkMatrix* localMatrix) { | 885 const SkMatrix* localMatrix) { |
| 886 if (!valid_grad(colors, pos, colorCount, SkShader::kClamp_TileMode)) { | 886 if (!valid_grad(colors, pos, colorCount, SkShader::kClamp_TileMode)) { |
| 887 return nullptr; | 887 return nullptr; |
| 888 } | 888 } |
| 889 EXPAND_1_COLOR(colorCount); | 889 EXPAND_1_COLOR(colorCount); |
| 890 | 890 |
| 891 SkGradientShaderBase::Descriptor desc; | 891 SkGradientShaderBase::Descriptor desc; |
| 892 desc_init(&desc, colors, pos, colorCount, SkShader::kClamp_TileMode, flags,
localMatrix); | 892 desc_init(&desc, colors, pos, colorCount, SkShader::kClamp_TileMode, flags,
localMatrix); |
| 893 return new SkSweepGradient(cx, cy, desc); | 893 return sk_make_sp<SkSweepGradient>(cx, cy, desc); |
| 894 } | 894 } |
| 895 | 895 |
| 896 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkGradientShader) | 896 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkGradientShader) |
| 897 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLinearGradient) | 897 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLinearGradient) |
| 898 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkRadialGradient) | 898 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkRadialGradient) |
| 899 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSweepGradient) | 899 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSweepGradient) |
| 900 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTwoPointConicalGradient) | 900 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTwoPointConicalGradient) |
| 901 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 901 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| 902 | 902 |
| 903 /////////////////////////////////////////////////////////////////////////////// | 903 /////////////////////////////////////////////////////////////////////////////// |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 (*stops)[i] = stop; | 1206 (*stops)[i] = stop; |
| 1207 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st
op) : 1.f; | 1207 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st
op) : 1.f; |
| 1208 } | 1208 } |
| 1209 } | 1209 } |
| 1210 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM
odeCount)); | 1210 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM
odeCount)); |
| 1211 | 1211 |
| 1212 return outColors; | 1212 return outColors; |
| 1213 } | 1213 } |
| 1214 | 1214 |
| 1215 #endif | 1215 #endif |
| OLD | NEW |