Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
CanvasLineSegmentStage Class Reference
Inheritance diagram for CanvasLineSegmentStage:
Stage

Public Member Functions

 CanvasLineSegmentStage (SkSize size)
 
 ~CanvasLineSegmentStage () override=default
 
void draw (SkCanvas *canvas) override
 
bool animate (double nanos) override
 
std::unique_ptr< MMObjectcreateObject () override
 
- Public Member Functions inherited from Stage
 Stage (SkSize size, int startingObjectCount, int objectIncrement)
 
virtual ~Stage ()=default
 
virtual bool onChar (SkUnichar uni)
 

Additional Inherited Members

- Protected Member Functions inherited from Stage
void initializeObjects ()
 
- Protected Attributes inherited from Stage
SkSize fSize
 
int fStartingObjectCount
 
int fObjectIncrement
 
std::vector< std::unique_ptr< MMObject > > fObjects
 
SkRandom fRandom
 

Detailed Description

Definition at line 220 of file MotionMarkSlide.cpp.

Constructor & Destructor Documentation

◆ CanvasLineSegmentStage()

CanvasLineSegmentStage::CanvasLineSegmentStage ( SkSize  size)
inline

Definition at line 222 of file MotionMarkSlide.cpp.

223 : Stage(size, /*startingObjectCount=*/5000, /*objectIncrement*/1000) {
224 fParams.fLineMinimum = 20;
225 fParams.fLineLengthMaximum = 40;
226 fParams.fCircleRadius = fSize.fWidth/8 - .4 * (fParams.fLineMinimum +
227 fParams.fLineLengthMaximum);
228 fParams.fCircleCenters[0] = SkPoint::Make(5.5 / 32 * fSize.fWidth, 2.1 / 3*fSize.fHeight);
229 fParams.fCircleCenters[1] = SkPoint::Make(12.5 / 32 * fSize.fWidth, .9 / 3*fSize.fHeight);
230 fParams.fCircleCenters[2] = SkPoint::Make(19.5 / 32 * fSize.fWidth, 2.1 / 3*fSize.fHeight);
231 fParams.fCircleCenters[3] = SkPoint::Make(26.5 / 32 * fSize.fWidth, .9 / 3*fSize.fHeight);
232 fHalfSize = SkSize::Make(fSize.fWidth * 0.5f, fSize.fHeight * 0.5f);
233 fTwoFifthsSizeX = fSize.fWidth * .4;
234
235 this->initializeObjects();
236 }
SkSize fSize
void initializeObjects()
static constexpr SkPoint Make(float x, float y)
static constexpr SkSize Make(SkScalar w, SkScalar h)
Definition SkSize.h:56
SkScalar fHeight
Definition SkSize.h:54
SkScalar fWidth
Definition SkSize.h:53

◆ ~CanvasLineSegmentStage()

CanvasLineSegmentStage::~CanvasLineSegmentStage ( )
overridedefault

Member Function Documentation

◆ animate()

bool CanvasLineSegmentStage::animate ( double  nanos)
inlineoverridevirtual

Reimplemented from Stage.

Definition at line 304 of file MotionMarkSlide.cpp.

304 {
305 fCurrentAngle = time_fractional_value(nanos, 3000) * SK_ScalarPI * 2;
306 fCurrentGradientStep = 0.5f + 0.5f * std::sin(
307 time_fractional_value(nanos, 5000) * SK_ScalarPI * 2);
308
309 this->Stage::animate(nanos);
310 return true;
311 }
#define SK_ScalarPI
Definition SkScalar.h:21
virtual bool animate(double nanos)

◆ createObject()

std::unique_ptr< MMObject > CanvasLineSegmentStage::createObject ( )
inlineoverridevirtual

Implements Stage.

Definition at line 313 of file MotionMarkSlide.cpp.

313 {
314 return std::make_unique<CanvasLineSegment>(&fRandom,fParams);
315 }
SkRandom fRandom

◆ draw()

void CanvasLineSegmentStage::draw ( SkCanvas canvas)
inlineoverridevirtual

Reimplemented from Stage.

Definition at line 240 of file MotionMarkSlide.cpp.

240 {
241 canvas->clear(SK_ColorWHITE);
242
243 float dx = fTwoFifthsSizeX * std::cos(fCurrentAngle);
244 float dy = fTwoFifthsSizeX * std::sin(fCurrentAngle);
245
246 float colorStopStep = SkScalarInterp(-.1f, .1f, fCurrentGradientStep);
247 int brightnessStep = SkScalarRoundToInt(SkScalarInterp(32, 64, fCurrentGradientStep));
248
249 SkColor color1Step = SkColorSetARGB(brightnessStep,
250 brightnessStep,
251 (brightnessStep << 1),
252 102);
253 SkColor color2Step = SkColorSetARGB((brightnessStep << 1),
254 (brightnessStep << 1),
255 brightnessStep,
256 102);
257 SkPoint pts[2] = {
258 {fHalfSize.fWidth + dx, fHalfSize.fHeight + dy},
259 {fHalfSize.fWidth - dx, fHalfSize.fHeight - dy}
260 };
261 SkColor colors[] = {
262 color1Step,
263 color1Step,
264 color2Step,
265 color2Step
266 };
267 float pos[] = {
268 0,
269 0.2f + colorStopStep,
270 0.8f - colorStopStep,
271 1
272 };
273 sk_sp<SkShader> gradientShader = SkGradientShader::MakeLinear(pts, colors, pos, 4,
275
277 paint.setAntiAlias(true);
278 paint.setStrokeWidth(15);
279 for (int i = 0; i < 4; i++) {
280 const SkColor strokeColors[] = {
281 0xffe01040, 0xff10c030, 0xff744cba, 0xffe05010
282 };
283 const SkColor fillColors[] = {
284 0xff70051d, 0xff016112, 0xff2F0C6E, 0xff702701
285 };
286 paint.setColor(strokeColors[i]);
288 SkRect arcRect = SkRect::MakeXYWH(fParams.fCircleCenters[i].fX - fParams.fCircleRadius,
289 fParams.fCircleCenters[i].fY- fParams.fCircleRadius,
290 2*fParams.fCircleRadius,
291 2*fParams.fCircleRadius);
292 canvas->drawArc(arcRect, 0, 360, false, paint);
293 paint.setColor(fillColors[i]);
294 paint.setStyle(SkPaint::kFill_Style);
295 canvas->drawArc(arcRect, 0, 360, false, paint);
296 paint.setShader(gradientShader);
297 canvas->drawArc(arcRect, 0, 360, false, paint);
298 paint.setShader(nullptr);
299 }
300
301 this->Stage::draw(canvas);
302 }
SkPoint pos
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
#define SkScalarRoundToInt(x)
Definition SkScalar.h:37
static SkScalar SkScalarInterp(SkScalar A, SkScalar B, SkScalar t)
Definition SkScalar.h:131
void clear(SkColor color)
Definition SkCanvas.h:1199
void drawArc(const SkRect &oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter, const SkPaint &paint)
static sk_sp< SkShader > MakeLinear(const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
@ kStroke_Style
set to stroke geometry
Definition SkPaint.h:194
@ kFill_Style
set to fill geometry
Definition SkPaint.h:193
virtual void draw(SkCanvas *canvas)
const Paint & paint
PODArray< SkColor > colors
Definition SkRecords.h:276
skia_private::AutoTArray< sk_sp< SkImageFilter > > filters TypedMatrix matrix TypedMatrix matrix SkScalar dx
Definition SkRecords.h:208
float fX
x-axis value
float fY
y-axis value
static constexpr SkRect MakeXYWH(float x, float y, float w, float h)
Definition SkRect.h:659

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