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 |