Fix alpha contribution to tonal color.

Also adds a tonal color GM, a grayscale mode to shadowutils GM,
and animated alpha to SampleAndroidShadows.

Bug: skia:
Change-Id: I1dcb5cab7e53ffa7a3bf1a07b6ebfed38df1a9ed
Reviewed-on: https://skia-review.googlesource.com/85002
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
diff --git a/samplecode/SampleAndroidShadows.cpp b/samplecode/SampleAndroidShadows.cpp
index 3db994a..2621cec 100644
--- a/samplecode/SampleAndroidShadows.cpp
+++ b/samplecode/SampleAndroidShadows.cpp
@@ -35,23 +35,27 @@
     SkScalar  fZDelta;
     SkScalar  fAnimTranslate;
     SkScalar  fAnimAngle;
+    SkScalar  fAnimAlpha;
 
     bool      fShowAmbient;
     bool      fShowSpot;
     bool      fUseAlt;
     bool      fShowObject;
     bool      fIgnoreShadowAlpha;
+    bool      fDoAlphaAnimation;
 
 public:
     ShadowsView()
         : fZDelta(0)
         , fAnimTranslate(0)
         , fAnimAngle(0)
+        , fAnimAlpha(1)
         , fShowAmbient(true)
         , fShowSpot(true)
         , fUseAlt(false)
         , fShowObject(true)
-        , fIgnoreShadowAlpha(false) {}
+        , fIgnoreShadowAlpha(false)
+        , fDoAlphaAnimation(false) {}
 
 protected:
     void onOnceBeforeDraw() override {
@@ -99,6 +103,13 @@
                     fShowObject = !fShowObject;
                     handled = true;
                     break;
+                case 'N':
+                    fDoAlphaAnimation = !fDoAlphaAnimation;
+                    if (!fDoAlphaAnimation) {
+                        fAnimAlpha = 1;
+                    }
+                    handled = true;
+                    break;
                 case '>':
                     fZDelta += 0.5f;
                     handled = true;
@@ -175,38 +186,38 @@
         paint.setColor(SK_ColorWHITE);
         canvas->translate(200, 90);
         zPlaneParams.fZ = SkTMax(1.0f, 2 + fZDelta);
-        this->drawShadowedPath(canvas, fRRPath, zPlaneParams, paint, kAmbientAlpha,
-                               lightPos, kLightWidth, kSpotAlpha);
+        this->drawShadowedPath(canvas, fRRPath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
+                               lightPos, kLightWidth, fAnimAlpha*kSpotAlpha);
 
         paint.setColor(SK_ColorRED);
         canvas->translate(250, 0);
         zPlaneParams.fZ = SkTMax(1.0f, 8 + fZDelta);
-        this->drawShadowedPath(canvas, fRectPath, zPlaneParams, paint, kAmbientAlpha,
-                               lightPos, kLightWidth, kSpotAlpha);
+        this->drawShadowedPath(canvas, fRectPath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
+                               lightPos, kLightWidth, fAnimAlpha*kSpotAlpha);
 
         paint.setColor(SK_ColorBLUE);
         canvas->translate(-250, 110);
         zPlaneParams.fZ = SkTMax(1.0f, 12 + fZDelta);
-        this->drawShadowedPath(canvas, fCirclePath, zPlaneParams, paint, kAmbientAlpha,
-                               lightPos, kLightWidth, 0.5f);
+        this->drawShadowedPath(canvas, fCirclePath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
+                               lightPos, kLightWidth, fAnimAlpha*0.5f);
 
         paint.setColor(SK_ColorGREEN);
         canvas->translate(250, 0);
         zPlaneParams.fZ = SkTMax(1.0f, 64 + fZDelta);
-        this->drawShadowedPath(canvas, fRRPath, zPlaneParams, paint, kAmbientAlpha,
-                               lightPos, kLightWidth, kSpotAlpha);
+        this->drawShadowedPath(canvas, fRRPath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
+                               lightPos, kLightWidth, fAnimAlpha*kSpotAlpha);
 
         paint.setColor(SK_ColorYELLOW);
         canvas->translate(-250, 110);
         zPlaneParams.fZ = SkTMax(1.0f, 8 + fZDelta);
-        this->drawShadowedPath(canvas, fFunkyRRPath, zPlaneParams, paint, kAmbientAlpha,
-                               lightPos, kLightWidth, kSpotAlpha);
+        this->drawShadowedPath(canvas, fFunkyRRPath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
+                               lightPos, kLightWidth, fAnimAlpha*kSpotAlpha);
 
         paint.setColor(SK_ColorCYAN);
         canvas->translate(250, 0);
         zPlaneParams.fZ = SkTMax(1.0f, 16 + fZDelta);
-        this->drawShadowedPath(canvas, fCubicPath, zPlaneParams, paint,
-                               kAmbientAlpha, lightPos, kLightWidth, kSpotAlpha);
+        this->drawShadowedPath(canvas, fCubicPath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
+                               lightPos, kLightWidth, fAnimAlpha*kSpotAlpha);
 
         // circular reveal
         SkPath tmpPath;
@@ -259,7 +270,9 @@
     bool onAnimate(const SkAnimTimer& timer) override {
         fAnimTranslate = timer.pingPong(30, 0, 200, -200);
         fAnimAngle = timer.pingPong(15, 0, 0, 20);
-
+        if (fDoAlphaAnimation) {
+            fAnimAlpha = timer.pingPong(5, 0, 1, 0);
+        }
         return true;
     }