blob: 97a5b0f8e9a8ebb4fe721dd6b2244112d7566318 [file] [log] [blame]
Brian Osman7c979f52019-02-12 13:27:51 -05001/*
2* Copyright 2019 Google LLC
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
8#ifndef SkParticleAffector_DEFINED
9#define SkParticleAffector_DEFINED
10
11#include "SkReflected.h"
12
13#include "SkPoint.h"
14
Brian Osman125daa42019-02-20 12:25:20 -050015struct SkColorCurve;
Brian Osman8b6283f2019-02-14 16:55:21 -050016struct SkCurve;
Brian Osman125daa42019-02-20 12:25:20 -050017struct SkParticleState;
Brian Osman7c979f52019-02-12 13:27:51 -050018struct SkParticleUpdateParams;
19
20class SkParticleAffector : public SkReflected {
21public:
22 REFLECTED_ABSTRACT(SkParticleAffector, SkReflected)
23
Brian Osman125daa42019-02-20 12:25:20 -050024 virtual void apply(SkParticleUpdateParams& params, SkParticleState& ps) = 0;
Brian Osman7c979f52019-02-12 13:27:51 -050025
26 static void RegisterAffectorTypes();
27
Brian Osman8b6283f2019-02-14 16:55:21 -050028 static sk_sp<SkParticleAffector> MakeLinearVelocity(const SkCurve& angle,
29 const SkCurve& strength,
Brian Osmand5c57fe2019-02-22 11:48:18 -050030 bool force,
31 bool local);
Brian Osman7c979f52019-02-12 13:27:51 -050032 static sk_sp<SkParticleAffector> MakePointForce(SkPoint point, SkScalar constant,
33 SkScalar invSquare);
34 static sk_sp<SkParticleAffector> MakeOrientAlongVelocity();
Brian Osman8b6283f2019-02-14 16:55:21 -050035
Brian Osman125daa42019-02-20 12:25:20 -050036 static sk_sp<SkParticleAffector> MakeSize(const SkCurve& curve);
37 static sk_sp<SkParticleAffector> MakeFrame(const SkCurve& curve);
38 static sk_sp<SkParticleAffector> MakeColor(const SkColorCurve& curve);
Brian Osman7c979f52019-02-12 13:27:51 -050039};
40
41#endif // SkParticleAffector_DEFINED