Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: src/effects/gradients/SkGradientShader.cpp

Issue 227623004: Add flipped gradient branch to two point conical gradient (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 if (fColorCount > 2) { 196 if (fColorCount > 2) {
197 Rec* recs = fRecs; 197 Rec* recs = fRecs;
198 for (int i = 1; i < fColorCount; i++) { 198 for (int i = 1; i < fColorCount; i++) {
199 buffer.writeInt(recs[i].fPos); 199 buffer.writeInt(recs[i].fPos);
200 buffer.writeUInt(recs[i].fScale); 200 buffer.writeUInt(recs[i].fScale);
201 } 201 }
202 } 202 }
203 buffer.writeMatrix(fPtsToUnit); 203 buffer.writeMatrix(fPtsToUnit);
204 } 204 }
205 205
206 void SkGradientShaderBase::flipGradientColors() {
207 SkColor colorsTemp[fColorCount];
208 Rec recsTemp[fColorCount];
209 for (int i = 0; i < fColorCount; ++i) {
210 int offset = fColorCount - i - 1;
211 colorsTemp[i] = fOrigColors[offset];
212 recsTemp[i].fPos = 1 - fRecs[offset].fPos;
213 recsTemp[i].fScale = fRecs[offset].fScale;
214 }
215 memcpy(fOrigColors, colorsTemp, fColorCount * sizeof(SkColor));
216 memcpy(fRecs, recsTemp, fColorCount * sizeof(Rec));
217 }
218
206 bool SkGradientShaderBase::isOpaque() const { 219 bool SkGradientShaderBase::isOpaque() const {
207 return fColorsAreOpaque; 220 return fColorsAreOpaque;
208 } 221 }
209 222
210 SkGradientShaderBase::GradientShaderBaseContext::GradientShaderBaseContext( 223 SkGradientShaderBase::GradientShaderBaseContext::GradientShaderBaseContext(
211 const SkGradientShaderBase& shader, const SkBitmap& device, 224 const SkGradientShaderBase& shader, const SkBitmap& device,
212 const SkPaint& paint, const SkMatrix& matrix) 225 const SkPaint& paint, const SkMatrix& matrix)
213 : INHERITED(shader, device, paint, matrix) 226 : INHERITED(shader, device, paint, matrix)
214 , fCache(shader.getCache(getPaintAlpha())) 227 , fCache(shader.getCache(getPaintAlpha()))
215 { 228 {
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 int colorCount, 799 int colorCount,
787 SkShader::TileMode mode, 800 SkShader::TileMode mode,
788 SkUnitMapper* mapper, 801 SkUnitMapper* mapper,
789 uint32_t flags) { 802 uint32_t flags) {
790 if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) { 803 if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) {
791 return NULL; 804 return NULL;
792 } 805 }
793 if (start == end && startRadius == endRadius) { 806 if (start == end && startRadius == endRadius) {
794 return SkNEW(SkEmptyShader); 807 return SkNEW(SkEmptyShader);
795 } 808 }
809
796 EXPAND_1_COLOR(colorCount); 810 EXPAND_1_COLOR(colorCount);
797 811
812 bool flipGradient = startRadius > endRadius;
813
798 SkGradientShaderBase::Descriptor desc; 814 SkGradientShaderBase::Descriptor desc;
799 desc_init(&desc, colors, pos, colorCount, mode, mapper, flags); 815
800 return SkNEW_ARGS(SkTwoPointConicalGradient, 816 if (!flipGradient) {
801 (start, startRadius, end, endRadius, desc)); 817 desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
818 return SkNEW_ARGS(SkTwoPointConicalGradient,
819 (start, startRadius, end, endRadius, flipGradient, des c));
820 } else {
821 SkColor colorsNew[colorCount];
822 SkScalar posNew[colorCount];
823 for (int i = 0; i < colorCount; ++i) {
824 colorsNew[i] = colors[colorCount - i - 1];
825 }
826
827 if (pos) {
828 for (int i = 0; i < colorCount; ++i) {
829 posNew[i] = 1 - pos[colorCount - i - 1];
830 }
831 desc_init(&desc, colorsNew, posNew, colorCount, mode, mapper, flags) ;
832 } else {
833 desc_init(&desc, colorsNew, NULL, colorCount, mode, mapper, flags);
834 }
835
836 return SkNEW_ARGS(SkTwoPointConicalGradient,
837 (end, endRadius, start, startRadius, flipGradient, des c));
838 }
802 } 839 }
803 840
804 SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy, 841 SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy,
805 const SkColor colors[], 842 const SkColor colors[],
806 const SkScalar pos[], 843 const SkScalar pos[],
807 int colorCount, SkUnitMapper* mapper, 844 int colorCount, SkUnitMapper* mapper,
808 uint32_t flags) { 845 uint32_t flags) {
809 if (NULL == colors || colorCount < 1) { 846 if (NULL == colors || colorCount < 1) {
810 return NULL; 847 return NULL;
811 } 848 }
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 (*stops)[i] = stop; 1179 (*stops)[i] = stop;
1143 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f; 1180 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f;
1144 } 1181 }
1145 } 1182 }
1146 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount)); 1183 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount));
1147 1184
1148 return outColors; 1185 return outColors;
1149 } 1186 }
1150 1187
1151 #endif 1188 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698