Fix shadow_utils light position for SampleApp tiling

Change-Id: Icddc82a095aa698bdba9004641acdc411392632f
Reviewed-on: https://skia-review.googlesource.com/17044
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/samplecode/SampleShadowUtils.cpp b/samplecode/SampleShadowUtils.cpp
index e383811..e592f97 100755
--- a/samplecode/SampleShadowUtils.cpp
+++ b/samplecode/SampleShadowUtils.cpp
@@ -150,12 +150,15 @@
 
         static constexpr int kW = 800;
         static constexpr SkScalar kPad = 15.f;
-        static constexpr SkPoint3 kLightPos = { 250, 400, 500 };
         static constexpr SkScalar kLightR = 100.f;
         static constexpr SkScalar kHeight = 50.f;
         static constexpr SkScalar kAmbientAlpha = 0.5f;
         static constexpr SkScalar kSpotAlpha = 0.5f;
 
+        // transform light position relative to canvas to handle tiling
+        SkPoint lightXY = canvas->getTotalMatrix().mapXY(250, 400);
+        SkPoint3 lightPos = { lightXY.fX, lightXY.fY, 500 };
+
         canvas->translate(3 * kPad, 3 * kPad);
         canvas->save();
         SkScalar x = 0;
@@ -186,7 +189,7 @@
 
                     canvas->save();
                     canvas->concat(m);
-                    drawShadowedPath(canvas, path, zPlaneParams, paint, kAmbientAlpha, kLightPos,
+                    drawShadowedPath(canvas, path, zPlaneParams, paint, kAmbientAlpha, lightPos,
                                      kLightR, kSpotAlpha, flags);
                     canvas->restore();
 
@@ -204,7 +207,7 @@
             SkPaint paint;
             paint.setColor(SK_ColorBLACK);
             paint.setAntiAlias(true);
-            canvas->drawCircle(kLightPos.fX, kLightPos.fY, kLightR / 10.f, paint);
+            canvas->drawCircle(lightPos.fX, lightPos.fY, kLightR / 10.f, paint);
             canvas->restore();
         }
     }