Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
ShadowUtilsSlide Class Reference
Inheritance diagram for ShadowUtilsSlide:
Slide SkRefCnt SkRefCntBase

Public Member Functions

 ShadowUtilsSlide ()
 
void load (SkScalar w, SkScalar h) override
 
bool onChar (SkUnichar uni) override
 
void draw (SkCanvas *canvas) override
 
- Public Member Functions inherited from Slide
virtual SkISize getDimensions () const
 
virtual void gpuTeardown ()
 
virtual bool animate (double nanos)
 
virtual void resize (SkScalar winWidth, SkScalar winHeight)
 
virtual void unload ()
 
virtual bool onMouse (SkScalar x, SkScalar y, skui::InputState state, skui::ModifierKey modifiers)
 
virtual bool onGetControls (SkMetaData *)
 
virtual void onSetControls (const SkMetaData &)
 
const SkStringgetName ()
 
- Public Member Functions inherited from SkRefCntBase
 SkRefCntBase ()
 
virtual ~SkRefCntBase ()
 
bool unique () const
 
void ref () const
 
void unref () const
 

Additional Inherited Members

- Protected Attributes inherited from Slide
SkString fName
 

Detailed Description

Definition at line 25 of file ShadowUtilsSlide.cpp.

Constructor & Destructor Documentation

◆ ShadowUtilsSlide()

ShadowUtilsSlide::ShadowUtilsSlide ( )
inline

Definition at line 37 of file ShadowUtilsSlide.cpp.

38 : fZDelta(0)
39 , fShowAmbient(true)
40 , fShowSpot(true)
41 , fUseAlt(false)
42 , fShowObject(false)
43 , fIgnoreShadowAlpha(false) {
44 fName = "ShadowUtils";
45 }
SkString fName
Definition Slide.h:54

Member Function Documentation

◆ draw()

void ShadowUtilsSlide::draw ( SkCanvas canvas)
inlineoverridevirtual

Implements Slide.

Definition at line 118 of file ShadowUtilsSlide.cpp.

118 {
119 this->drawBG(canvas);
120
121 static constexpr int kW = 800;
122 static constexpr SkScalar kPad = 15.f;
123 static constexpr SkScalar kLightR = 100.f;
124 static constexpr SkScalar kHeight = 50.f;
125 static constexpr SkScalar kAmbientAlpha = 0.5f;
126 static constexpr SkScalar kSpotAlpha = 0.5f;
127 static constexpr SkPoint3 lightPos = { 250, 400, 500 };
128
129 canvas->translate(3 * kPad, 3 * kPad);
130 canvas->save();
131 SkScalar x = 0;
132 SkScalar dy = 0;
133 SkTDArray<SkMatrix> matrices;
134 matrices.append()->reset();
135 matrices.append()->setRotate(33.f, 25.f, 25.f).postScale(1.2f, 0.8f, 25.f, 25.f);
136 SkPaint greenPaint;
137 greenPaint.setColor(SK_ColorGREEN);
138 greenPaint.setAntiAlias(true);
139 SkPoint3 zPlaneParams = SkPoint3::Make(0, 0, std::max(1.0f, kHeight + fZDelta));
140
141 // convex paths
142 for (auto& m : matrices) {
144 for (const auto& path : fConvexPaths) {
145 SkRect postMBounds = path.getBounds();
146 m.mapRect(&postMBounds);
147 SkScalar w = postMBounds.width() + kHeight;
148 SkScalar dx = w + kPad;
149 if (x + dx > kW - 3 * kPad) {
150 canvas->restore();
151 canvas->translate(0, dy);
152 canvas->save();
153 x = 0;
154 dy = 0;
155 }
156
157 canvas->save();
158 canvas->concat(m);
159 this->drawShadowedPath(canvas, path, zPlaneParams, greenPaint, kAmbientAlpha,
160 lightPos, kLightR, kSpotAlpha, flags);
161 canvas->restore();
162
163 canvas->translate(dx, 0);
164 x += dx;
165 dy = std::max(dy, postMBounds.height() + kPad + kHeight);
166 }
167 }
168 }
169
170 // concave paths
171 canvas->restore();
172 canvas->translate(kPad, dy);
173 canvas->save();
174 x = kPad;
175 dy = 0;
176 for (auto& m : matrices) {
177 for (const auto& path : fConcavePaths) {
178 SkRect postMBounds = path.getBounds();
179 m.mapRect(&postMBounds);
180 SkScalar w = postMBounds.width();
181 SkScalar dx = w + kPad;
182
183 canvas->save();
184 canvas->concat(m);
185 this->drawShadowedPath(canvas, path, zPlaneParams, greenPaint, kAmbientAlpha,
186 lightPos, kLightR, kSpotAlpha, kNone_ShadowFlag);
187 canvas->restore();
188
189 canvas->translate(dx, 0);
190 x += dx;
191 dy = std::max(dy, postMBounds.height() + kPad + kHeight);
192 }
193 }
194
195 // Show where the light is in x,y as a circle (specified in device space).
196 SkMatrix invCanvasM = canvas->getTotalMatrix();
197 if (invCanvasM.invert(&invCanvasM)) {
198 canvas->save();
199 canvas->concat(invCanvasM);
200 SkPaint blackPaint;
201 blackPaint.setColor(SK_ColorBLACK);
202 blackPaint.setAntiAlias(true);
203 canvas->drawCircle(lightPos.fX, lightPos.fY, kLightR / 10.f, blackPaint);
204 canvas->restore();
205 }
206 }
constexpr SkColor SK_ColorBLACK
Definition SkColor.h:103
constexpr SkColor SK_ColorGREEN
Definition SkColor.h:131
@ kTransparentOccluder_ShadowFlag
@ kNone_ShadowFlag
constexpr int kPad
constexpr int kW
void restore()
Definition SkCanvas.cpp:465
void translate(SkScalar dx, SkScalar dy)
SkMatrix getTotalMatrix() const
int save()
Definition SkCanvas.cpp:451
void concat(const SkMatrix &matrix)
void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius, const SkPaint &paint)
bool invert(SkMatrix *inverse) const
Definition SkMatrix.h:1206
void setColor(SkColor color)
Definition SkPaint.cpp:119
void setAntiAlias(bool aa)
Definition SkPaint.h:170
T * append()
Definition SkTDArray.h:191
float SkScalar
Definition extension.cpp:12
FlutterSemanticsFlag flags
double x
skia_private::AutoTArray< sk_sp< SkImageFilter > > filters TypedMatrix matrix TypedMatrix matrix SkScalar dx
Definition SkRecords.h:208
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switches.h:57
SkScalar w
SkScalar fX
Definition SkPoint3.h:16
static SkPoint3 Make(SkScalar x, SkScalar y, SkScalar z)
Definition SkPoint3.h:18
SkScalar fY
Definition SkPoint3.h:16
constexpr float height() const
Definition SkRect.h:769
constexpr float width() const
Definition SkRect.h:762
constexpr size_t kHeight

◆ load()

void ShadowUtilsSlide::load ( SkScalar  w,
SkScalar  h 
)
inlineoverridevirtual

Reimplemented from Slide.

Definition at line 47 of file ShadowUtilsSlide.cpp.

47 {
48 fConvexPaths.push_back().addRoundRect(SkRect::MakeWH(50, 50), 10, 10);
49 SkRRect oddRRect;
50 oddRRect.setNinePatch(SkRect::MakeWH(50, 50), 9, 13, 6, 16);
51 fConvexPaths.push_back().addRRect(oddRRect);
52 fConvexPaths.push_back().addRect(SkRect::MakeWH(50, 50));
53 fConvexPaths.push_back().addCircle(25, 25, 25);
54 fConvexPaths.push_back().cubicTo(100, 50, 20, 100, 0, 0);
55 fConvexPaths.push_back().addOval(SkRect::MakeWH(20, 60));
56
57 // star
58 fConcavePaths.push_back().moveTo(0.0f, -33.3333f);
59 fConcavePaths.back().lineTo(9.62f, -16.6667f);
60 fConcavePaths.back().lineTo(28.867f, -16.6667f);
61 fConcavePaths.back().lineTo(19.24f, 0.0f);
62 fConcavePaths.back().lineTo(28.867f, 16.6667f);
63 fConcavePaths.back().lineTo(9.62f, 16.6667f);
64 fConcavePaths.back().lineTo(0.0f, 33.3333f);
65 fConcavePaths.back().lineTo(-9.62f, 16.6667f);
66 fConcavePaths.back().lineTo(-28.867f, 16.6667f);
67 fConcavePaths.back().lineTo(-19.24f, 0.0f);
68 fConcavePaths.back().lineTo(-28.867f, -16.6667f);
69 fConcavePaths.back().lineTo(-9.62f, -16.6667f);
70 fConcavePaths.back().close();
71
72 // dumbbell
73 fConcavePaths.push_back().moveTo(50, 0);
74 fConcavePaths.back().cubicTo(100, 25, 60, 50, 50, 0);
75 fConcavePaths.back().cubicTo(0, -25, 40, -50, 50, 0);
76 }
SkPath & addCircle(SkScalar x, SkScalar y, SkScalar radius, SkPathDirection dir=SkPathDirection::kCW)
Definition SkPath.cpp:1149
SkPath & moveTo(SkScalar x, SkScalar y)
Definition SkPath.cpp:678
SkPath & lineTo(SkScalar x, SkScalar y)
Definition SkPath.cpp:718
SkPath & addRRect(const SkRRect &rrect, SkPathDirection dir=SkPathDirection::kCW)
Definition SkPath.cpp:990
SkPath & addRoundRect(const SkRect &rect, SkScalar rx, SkScalar ry, SkPathDirection dir=SkPathDirection::kCW)
Definition SkPath.cpp:1088
SkPath & addOval(const SkRect &oval, SkPathDirection dir=SkPathDirection::kCW)
Definition SkPath.cpp:1101
SkPath & cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3)
Definition SkPath.cpp:789
SkPath & close()
Definition SkPath.cpp:813
SkPath & addRect(const SkRect &rect, SkPathDirection dir, unsigned start)
Definition SkPath.cpp:854
void setNinePatch(const SkRect &rect, SkScalar leftRad, SkScalar topRad, SkScalar rightRad, SkScalar bottomRad)
Definition SkRRect.cpp:115
static constexpr SkRect MakeWH(float w, float h)
Definition SkRect.h:609

◆ onChar()

bool ShadowUtilsSlide::onChar ( SkUnichar  uni)
inlineoverridevirtual

Reimplemented from Slide.

Definition at line 78 of file ShadowUtilsSlide.cpp.

78 {
79 bool handled = false;
80 switch (uni) {
81 case 'W':
82 fShowAmbient = !fShowAmbient;
83 handled = true;
84 break;
85 case 'S':
86 fShowSpot = !fShowSpot;
87 handled = true;
88 break;
89 case 'T':
90 fUseAlt = !fUseAlt;
91 handled = true;
92 break;
93 case 'O':
94 fShowObject = !fShowObject;
95 handled = true;
96 break;
97 case '>':
98 fZDelta += 0.5f;
99 handled = true;
100 break;
101 case '<':
102 fZDelta -= 0.5f;
103 handled = true;
104 break;
105 case '?':
106 fIgnoreShadowAlpha = !fIgnoreShadowAlpha;
107 handled = true;
108 break;
109 default:
110 break;
111 }
112 if (handled) {
113 return true;
114 }
115 return false;
116 }

The documentation for this class was generated from the following file: