Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
MaterialShadowsSlide.cpp
Go to the documentation of this file.
1
2/*
3 * Copyright 2020 Google LLC
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
10#include "include/core/SkPath.h"
16#include "src/base/SkUTF.h"
17#include "src/core/SkBlurMask.h"
18#include "tools/ToolUtils.h"
20#include "tools/viewer/Slide.h"
21
22////////////////////////////////////////////////////////////////////////////
23
25 SkPath fCirclePath;
26 SkPath fCapsulePath;
27 SkPath fLargeRRPath;
28 SkPath fSmallRRPath;
29
30 SkPoint3 fLightPos;
31
32public:
33 MaterialShadowsSlide() { fName = "MaterialShadows"; }
34
35 void load(SkScalar w, SkScalar h) override {
36 fCirclePath.addCircle(0, 0, 56/2);
37 fCapsulePath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(-64, -24, 128, 48), 24, 24));
38 fLargeRRPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(-64, -64, 128, 128), 4, 4));
39 fSmallRRPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(-40, -40, 80, 80), 4, 4));
40
41 fLightPos = SkPoint3::Make(0, -700, 700);
42 }
43
44 void drawShadowedPath(SkCanvas* canvas, const SkPath& path,
45 const SkPoint3& zPlaneParams,
46 const SkPaint& paint, SkScalar ambientAlpha,
47 const SkPoint3& lightPos, SkScalar lightRadius, SkScalar spotAlpha) {
48 uint32_t flags = 0;
50
51 SkColor ambientColor = SkColorSetARGB(ambientAlpha * 255, 0, 0, 0);
52 SkColor spotColor = SkColorSetARGB(spotAlpha * 255, 0, 0, 0);
53 SkShadowUtils::DrawShadow(canvas, path, zPlaneParams, lightPos, lightRadius,
54 ambientColor, spotColor, flags);
55
56 canvas->drawPath(path, paint);
57 }
58
59 void draw(SkCanvas* canvas) override {
60 canvas->drawColor(0xFFFFFFFF);
61
62 const SkScalar kLightRadius = 1.1f;
63 const SkScalar kAmbientAlpha = 0.05f;
64 const SkScalar kSpotAlpha = 0.35f;
65
66 const SkScalar elevations[] = { 1, 3, 6, 8, 12, 24 };
67
69 paint.setAntiAlias(true);
70
71 SkPoint3 lightPos = fLightPos;
72 SkPoint3 zPlaneParams = SkPoint3::Make(0, 0, 0);
73
74 paint.setColor(SK_ColorWHITE);
75 canvas->save();
76 canvas->translate(80, 80);
77 for (unsigned int i = 0; i < std::size(elevations); ++i) {
78 zPlaneParams.fZ = elevations[i];
79 this->drawShadowedPath(canvas, fCirclePath, zPlaneParams, paint, kAmbientAlpha,
80 lightPos, kLightRadius, kSpotAlpha);
81 canvas->translate(80, 0);
82 }
83 canvas->restore();
84
85 canvas->save();
86 canvas->translate(120, 175);
87 for (unsigned int i = 0; i < std::size(elevations); ++i) {
88 zPlaneParams.fZ = elevations[i];
89 this->drawShadowedPath(canvas, fCapsulePath, zPlaneParams, paint, kAmbientAlpha,
90 lightPos, kLightRadius, kSpotAlpha);
91 canvas->translate(160, 0);
92 }
93 canvas->restore();
94
95 canvas->save();
96 canvas->translate(120, 320);
97 for (unsigned int i = 0; i < std::size(elevations); ++i) {
98 zPlaneParams.fZ = elevations[i];
99 this->drawShadowedPath(canvas, fLargeRRPath, zPlaneParams, paint, kAmbientAlpha,
100 lightPos, kLightRadius, kSpotAlpha);
101 canvas->translate(160, 0);
102 }
103 canvas->restore();
104
105 canvas->save();
106 canvas->translate(100, 475);
107 for (unsigned int i = 0; i < std::size(elevations); ++i) {
108 zPlaneParams.fZ = elevations[i];
109 this->drawShadowedPath(canvas, fSmallRRPath, zPlaneParams, paint, kAmbientAlpha,
110 lightPos, kLightRadius, kSpotAlpha);
111 canvas->translate(160, 0);
112 }
113 canvas->restore();
114
115 canvas->save();
116 canvas->translate(100, 600);
117 for (unsigned int i = 0; i < std::size(elevations); ++i) {
118 canvas->save();
119 zPlaneParams.fZ = elevations[i];
120 canvas->rotate(10);
121 this->drawShadowedPath(canvas, fSmallRRPath, zPlaneParams, paint, kAmbientAlpha,
122 lightPos, kLightRadius, kSpotAlpha);
123 canvas->restore();
124 canvas->translate(160, 0);
125 }
126 canvas->restore();
127
128 canvas->save();
129 canvas->translate(100, 725);
130 for (unsigned int i = 0; i < std::size(elevations); ++i) {
131 canvas->save();
132 zPlaneParams.fZ = elevations[i];
133 canvas->rotate(45);
134 this->drawShadowedPath(canvas, fSmallRRPath, zPlaneParams, paint, kAmbientAlpha,
135 lightPos, kLightRadius, kSpotAlpha);
136 canvas->restore();
137 canvas->translate(160, 0);
138 }
139 canvas->restore();
140
141 }
142};
143
144//////////////////////////////////////////////////////////////////////////////
145
146DEF_SLIDE( return new MaterialShadowsSlide(); )
uint32_t SkColor
Definition SkColor.h:37
static constexpr SkColor SkColorSetARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
Definition SkColor.h:49
constexpr SkColor SK_ColorWHITE
Definition SkColor.h:122
@ kDirectionalLight_ShadowFlag
#define DEF_SLIDE(code)
Definition Slide.h:25
void load(SkScalar w, SkScalar h) override
void drawShadowedPath(SkCanvas *canvas, const SkPath &path, const SkPoint3 &zPlaneParams, const SkPaint &paint, SkScalar ambientAlpha, const SkPoint3 &lightPos, SkScalar lightRadius, SkScalar spotAlpha)
void draw(SkCanvas *canvas) override
void restore()
Definition SkCanvas.cpp:465
void translate(SkScalar dx, SkScalar dy)
void drawColor(SkColor color, SkBlendMode mode=SkBlendMode::kSrcOver)
Definition SkCanvas.h:1182
void rotate(SkScalar degrees)
int save()
Definition SkCanvas.cpp:451
void drawPath(const SkPath &path, const SkPaint &paint)
SkPath & addCircle(SkScalar x, SkScalar y, SkScalar radius, SkPathDirection dir=SkPathDirection::kCW)
Definition SkPath.cpp:1149
SkPath & addRRect(const SkRRect &rrect, SkPathDirection dir=SkPathDirection::kCW)
Definition SkPath.cpp:990
static SkRRect MakeRectXY(const SkRect &rect, SkScalar xRad, SkScalar yRad)
Definition SkRRect.h:180
static void DrawShadow(SkCanvas *canvas, const SkPath &path, const SkPoint3 &zPlaneParams, const SkPoint3 &lightPos, SkScalar lightRadius, SkColor ambientColor, SkColor spotColor, uint32_t flags=SkShadowFlags::kNone_ShadowFlag)
Definition Slide.h:29
SkString fName
Definition Slide.h:54
const Paint & paint
float SkScalar
Definition extension.cpp:12
FlutterSemanticsFlag flags
SkScalar w
SkScalar h
static SkPoint3 Make(SkScalar x, SkScalar y, SkScalar z)
Definition SkPoint3.h:18
SkScalar fZ
Definition SkPoint3.h:16
static constexpr SkRect MakeXYWH(float x, float y, float w, float h)
Definition SkRect.h:659