aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2018-04-10 11:24:11 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-10 16:31:32 +0000
commit872da6b5713b966f628c54fcc2ad115054da4212 (patch)
treeae466ee7c23eb0571a65a07f25baf048bd22a0eb /samplecode
parent3cdd7e22dd540fe472f40b50f99ecd82679d4dec (diff)
Add initial support for simple concave shadows.
Adds support for spot shadow outlines. Since filling the penumbra still needs to be done, this code is disabled for now. Bug: skia: Change-Id: I3369eb13832b47ad16dd29ce7c7d6a1a10b39aeb Reviewed-on: https://skia-review.googlesource.com/22363 Commit-Queue: Jim Van Verth <jvanverth@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'samplecode')
-rw-r--r--samplecode/SampleAndroidShadows.cpp55
1 files changed, 52 insertions, 3 deletions
diff --git a/samplecode/SampleAndroidShadows.cpp b/samplecode/SampleAndroidShadows.cpp
index 8f076f4c66..5d4cd26956 100644
--- a/samplecode/SampleAndroidShadows.cpp
+++ b/samplecode/SampleAndroidShadows.cpp
@@ -28,9 +28,13 @@ class ShadowsView : public SampleView {
SkPath fCirclePath;
SkPath fFunkyRRPath;
SkPath fCubicPath;
+ SkPath fStarPath;
SkPath fSquareRRectPath;
SkPath fWideRectPath;
SkPath fWideOvalPath;
+ SkPath fNotchPath;
+ SkPath fTabPath;
+
SkPoint3 fLightPos;
SkScalar fZDelta;
SkScalar fAnimTranslate;
@@ -68,11 +72,38 @@ protected:
fCubicPath.cubicTo(100 * SK_Scalar1, 50 * SK_Scalar1,
20 * SK_Scalar1, 100 * SK_Scalar1,
0 * SK_Scalar1, 0 * SK_Scalar1);
+ fStarPath.moveTo(0.0f, -50.0f);
+ fStarPath.lineTo(14.43f, -25.0f);
+ fStarPath.lineTo(43.30f, -25.0f);
+ fStarPath.lineTo(28.86f, 0.0f);
+ fStarPath.lineTo(43.30f, 25.0f);
+ fStarPath.lineTo(14.43f, 25.0f);
+ fStarPath.lineTo(0.0f, 50.0f);
+ fStarPath.lineTo(-14.43f, 25.0f);
+ fStarPath.lineTo(-43.30f, 25.0f);
+ fStarPath.lineTo(-28.86f, 0.0f);
+ fStarPath.lineTo(-43.30f, -25.0f);
+ fStarPath.lineTo(-14.43f, -25.0f);
fSquareRRectPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(-50, -50, 100, 100),
10, 10));
fWideRectPath.addRect(SkRect::MakeXYWH(0, 0, 630, 70));
fWideOvalPath.addOval(SkRect::MakeXYWH(0, 0, 630, 70));
+ fNotchPath.moveTo(0, 80);
+ fNotchPath.arcTo(SkRect::MakeLTRB(-20, 80, 20, 120), -90, -90, false);
+ fNotchPath.lineTo(-75, 100);
+ fNotchPath.lineTo(-75, -100);
+ fNotchPath.lineTo(75, -100);
+ fNotchPath.lineTo(75, 100);
+ fNotchPath.arcTo(SkRect::MakeLTRB(-20, 80, 20, 120), 0, -90, false);
+
+ fTabPath.moveTo(-75, -100);
+ fTabPath.lineTo(75, -100);
+ fTabPath.lineTo(75, 100);
+ fTabPath.arcTo(SkRect::MakeLTRB(-20, 80, 20, 120), 0, 90, false);
+ fTabPath.arcTo(SkRect::MakeLTRB(-20, 80, 20, 120), 90, 90, false);
+ fTabPath.lineTo(-75, 100);
+
fLightPos = SkPoint3::Make(350, 0, 600);
}
@@ -141,8 +172,8 @@ protected:
const SkPaint& paint, SkScalar ambientAlpha,
const SkPoint3& lightPos, SkScalar lightWidth, SkScalar spotAlpha) {
if (fIgnoreShadowAlpha) {
- ambientAlpha = 255;
- spotAlpha = 255;
+ ambientAlpha = 1;
+ spotAlpha = 1;
}
if (!fShowAmbient) {
ambientAlpha = 0;
@@ -220,6 +251,24 @@ protected:
this->drawShadowedPath(canvas, fCubicPath, zPlaneParams, paint, fAnimAlpha*kAmbientAlpha,
lightPos, kLightWidth, fAnimAlpha*kSpotAlpha);
+ paint.setColor(SK_ColorWHITE);
+ canvas->translate(250, -180);
+ zPlaneParams.fZ = SkTMax(1.0f, 8 + fZDelta);
+ this->drawShadowedPath(canvas, fStarPath, zPlaneParams, paint,
+ kAmbientAlpha, lightPos, kLightWidth, kSpotAlpha);
+
+ paint.setColor(SK_ColorWHITE);
+ canvas->translate(150, 0);
+ zPlaneParams.fZ = SkTMax(1.0f, 2 + fZDelta);
+ this->drawShadowedPath(canvas, fNotchPath, zPlaneParams, paint,
+ kAmbientAlpha, lightPos, kLightWidth, kSpotAlpha);
+
+ paint.setColor(SK_ColorWHITE);
+ canvas->translate(200, 0);
+ zPlaneParams.fZ = SkTMax(1.0f, 16 + fZDelta);
+ this->drawShadowedPath(canvas, fTabPath, zPlaneParams, paint,
+ kAmbientAlpha, lightPos, kLightWidth, kSpotAlpha);
+
// circular reveal
SkPath tmpPath;
SkPath tmpClipPath;
@@ -227,7 +276,7 @@ protected:
Op(fSquareRRectPath, tmpClipPath, kIntersect_SkPathOp, &tmpPath);
paint.setColor(SK_ColorMAGENTA);
- canvas->translate(-125, 60);
+ canvas->translate(-725, 240);
zPlaneParams.fZ = SkTMax(1.0f, 32 + fZDelta);
this->drawShadowedPath(canvas, tmpPath, zPlaneParams, paint, .1f,
lightPos, kLightWidth, .5f);