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

Unified Diff: src/effects/gradients/SkGradientShader.cpp

Issue 492963002: extend SkShader to report a luminance-color to be used for gamma correction (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 4 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
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)

Powered by Google App Engine
This is Rietveld 408576698