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

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: Cpu flip fix 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
« no previous file with comments | « include/core/SkPicture.h ('k') | src/effects/gradients/SkGradientShaderPriv.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // V23_COMPATIBILITY_CODE
207 void SkGradientShaderBase::flipGradientColors() {
208 SkColor colorsTemp[fColorCount];
209 Rec recsTemp[fColorCount];
210 for (int i = 0; i < fColorCount; ++i) {
211 int offset = fColorCount - i - 1;
212 colorsTemp[i] = fOrigColors[offset];
213 recsTemp[i].fPos = 1 - fRecs[offset].fPos;
214 recsTemp[i].fScale = fRecs[offset].fScale;
215 }
216 memcpy(fOrigColors, colorsTemp, fColorCount * sizeof(SkColor));
217 memcpy(fRecs, recsTemp, fColorCount * sizeof(Rec));
218 }
219
206 bool SkGradientShaderBase::isOpaque() const { 220 bool SkGradientShaderBase::isOpaque() const {
207 return fColorsAreOpaque; 221 return fColorsAreOpaque;
208 } 222 }
209 223
210 SkGradientShaderBase::GradientShaderBaseContext::GradientShaderBaseContext( 224 SkGradientShaderBase::GradientShaderBaseContext::GradientShaderBaseContext(
211 const SkGradientShaderBase& shader, const SkBitmap& device, 225 const SkGradientShaderBase& shader, const SkBitmap& device,
212 const SkPaint& paint, const SkMatrix& matrix) 226 const SkPaint& paint, const SkMatrix& matrix)
213 : INHERITED(shader, device, paint, matrix) 227 : INHERITED(shader, device, paint, matrix)
214 , fCache(shader.refCache(getPaintAlpha())) 228 , fCache(shader.refCache(getPaintAlpha()))
215 { 229 {
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 int colorCount, 800 int colorCount,
787 SkShader::TileMode mode, 801 SkShader::TileMode mode,
788 SkUnitMapper* mapper, 802 SkUnitMapper* mapper,
789 uint32_t flags) { 803 uint32_t flags) {
790 if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) { 804 if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) {
791 return NULL; 805 return NULL;
792 } 806 }
793 if (start == end && startRadius == endRadius) { 807 if (start == end && startRadius == endRadius) {
794 return SkNEW(SkEmptyShader); 808 return SkNEW(SkEmptyShader);
795 } 809 }
810
796 EXPAND_1_COLOR(colorCount); 811 EXPAND_1_COLOR(colorCount);
797 812
813 bool flipGradient = startRadius > endRadius;
814
798 SkGradientShaderBase::Descriptor desc; 815 SkGradientShaderBase::Descriptor desc;
799 desc_init(&desc, colors, pos, colorCount, mode, mapper, flags); 816
800 return SkNEW_ARGS(SkTwoPointConicalGradient, 817 if (!flipGradient) {
801 (start, startRadius, end, endRadius, desc)); 818 desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
819 return SkNEW_ARGS(SkTwoPointConicalGradient,
820 (start, startRadius, end, endRadius, flipGradient, des c));
821 } else {
822 SkColor colorsNew[colorCount];
bsalomon 2014/04/16 19:12:56 woah.. this looks like a compiler extension. color
mtklein 2014/04/16 19:20:50 Yeah, this will be more or less supported dependin
823 SkScalar posNew[colorCount];
824 for (int i = 0; i < colorCount; ++i) {
825 colorsNew[i] = colors[colorCount - i - 1];
826 }
827
828 if (pos) {
829 for (int i = 0; i < colorCount; ++i) {
830 posNew[i] = 1 - pos[colorCount - i - 1];
831 }
832 desc_init(&desc, colorsNew, posNew, colorCount, mode, mapper, flags) ;
833 } else {
834 desc_init(&desc, colorsNew, NULL, colorCount, mode, mapper, flags);
835 }
836
837 return SkNEW_ARGS(SkTwoPointConicalGradient,
838 (end, endRadius, start, startRadius, flipGradient, des c));
839 }
802 } 840 }
803 841
804 SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy, 842 SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy,
805 const SkColor colors[], 843 const SkColor colors[],
806 const SkScalar pos[], 844 const SkScalar pos[],
807 int colorCount, SkUnitMapper* mapper, 845 int colorCount, SkUnitMapper* mapper,
808 uint32_t flags) { 846 uint32_t flags) {
809 if (NULL == colors || colorCount < 1) { 847 if (NULL == colors || colorCount < 1) {
810 return NULL; 848 return NULL;
811 } 849 }
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 (*stops)[i] = stop; 1180 (*stops)[i] = stop;
1143 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f; 1181 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f;
1144 } 1182 }
1145 } 1183 }
1146 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount)); 1184 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount));
1147 1185
1148 return outColors; 1186 return outColors;
1149 } 1187 }
1150 1188
1151 #endif 1189 #endif
OLDNEW
« no previous file with comments | « include/core/SkPicture.h ('k') | src/effects/gradients/SkGradientShaderPriv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698