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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/core/SkPicture.h ('k') | src/effects/gradients/SkGradientShaderPriv.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/gradients/SkGradientShader.cpp
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 3547fbec94f4e372c5ee3dc70e7c0bd4a03effdd..b54971954e11a6ce97083878a49e46f613c9997f 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -203,6 +203,20 @@ void SkGradientShaderBase::flatten(SkWriteBuffer& buffer) const {
buffer.writeMatrix(fPtsToUnit);
}
+// V23_COMPATIBILITY_CODE
+void SkGradientShaderBase::flipGradientColors() {
+ SkColor colorsTemp[fColorCount];
+ Rec recsTemp[fColorCount];
+ for (int i = 0; i < fColorCount; ++i) {
+ int offset = fColorCount - i - 1;
+ colorsTemp[i] = fOrigColors[offset];
+ recsTemp[i].fPos = 1 - fRecs[offset].fPos;
+ recsTemp[i].fScale = fRecs[offset].fScale;
+ }
+ memcpy(fOrigColors, colorsTemp, fColorCount * sizeof(SkColor));
+ memcpy(fRecs, recsTemp, fColorCount * sizeof(Rec));
+}
+
bool SkGradientShaderBase::isOpaque() const {
return fColorsAreOpaque;
}
@@ -793,12 +807,36 @@ SkShader* SkGradientShader::CreateTwoPointConical(const SkPoint& start,
if (start == end && startRadius == endRadius) {
return SkNEW(SkEmptyShader);
}
+
EXPAND_1_COLOR(colorCount);
+ bool flipGradient = startRadius > endRadius;
+
SkGradientShaderBase::Descriptor desc;
- desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
- return SkNEW_ARGS(SkTwoPointConicalGradient,
- (start, startRadius, end, endRadius, desc));
+
+ if (!flipGradient) {
+ desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
+ return SkNEW_ARGS(SkTwoPointConicalGradient,
+ (start, startRadius, end, endRadius, flipGradient, desc));
+ } else {
+ 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
+ SkScalar posNew[colorCount];
+ for (int i = 0; i < colorCount; ++i) {
+ colorsNew[i] = colors[colorCount - i - 1];
+ }
+
+ if (pos) {
+ for (int i = 0; i < colorCount; ++i) {
+ posNew[i] = 1 - pos[colorCount - i - 1];
+ }
+ desc_init(&desc, colorsNew, posNew, colorCount, mode, mapper, flags);
+ } else {
+ desc_init(&desc, colorsNew, NULL, colorCount, mode, mapper, flags);
+ }
+
+ return SkNEW_ARGS(SkTwoPointConicalGradient,
+ (end, endRadius, start, startRadius, flipGradient, desc));
+ }
}
SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy,
« 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