Index: src/effects/gradients/SkGradientShader.cpp |
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp |
index 21bf8858b54d7fb0b3f4edf8fe4d8504be3c2963..24dd8ab57298a4622b266e879110a2b4149486f0 100644 |
--- a/src/effects/gradients/SkGradientShader.cpp |
+++ b/src/effects/gradients/SkGradientShader.cpp |
@@ -251,6 +251,28 @@ bool SkGradientShaderBase::isOpaque() const { |
return fColorsAreOpaque; |
} |
+static unsigned rndivbyte(unsigned numer, unsigned denom) { |
bungeman-skia
2014/08/21 14:15:43
rounded_divide?
It isn't totally clear that the '
reed1
2014/08/21 20:07:39
Done.
|
+ unsigned result = (numer + (denom >> 1)) / denom; |
+ SkASSERT(SkToU8(result) == result); |
+ return result; |
+} |
+ |
+bool SkGradientShaderBase::onAsLuminanceColor(SkColor* lum) const { |
+ // we just compute an average color |
+ int r = 0; |
+ int g = 0; |
+ int b = 0; |
+ const int n = fColorCount; |
+ for (int i = 0; i < n; ++i) { |
+ SkColor c = fOrigColors[i]; |
+ r += SkColorGetR(c); |
+ g += SkColorGetG(c); |
+ b += SkColorGetB(c); |
+ } |
+ *lum = SkColorSetRGB(rndivbyte(r, n),rndivbyte(g, n), rndivbyte(b, n)); |
+ return true; |
+} |
+ |
SkGradientShaderBase::GradientShaderBaseContext::GradientShaderBaseContext( |
const SkGradientShaderBase& shader, const ContextRec& rec) |
: INHERITED(shader, rec) |