• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 ParticlesSlide_DEFINED
9 #define ParticlesSlide_DEFINED
10 
11 #include "tools/viewer/Slide.h"
12 
13 #include "include/core/SkPath.h"
14 #include "include/private/SkTArray.h"
15 #include "include/utils/SkRandom.h"
16 
17 class SkParticleEffect;
18 class SkParticleEffectParams;
19 
20 namespace skresources { class ResourceProvider; }
21 
22 class ParticlesSlide : public Slide {
23 public:
24     ParticlesSlide();
25 
26     // TODO: We need a way for primarily interactive slides to always be as large as the window
getDimensions()27     SkISize getDimensions() const override { return SkISize::MakeEmpty(); }
28 
29     void load(SkScalar winWidth, SkScalar winHeight) override;
30     void draw(SkCanvas* canvas) override;
31     bool animate(double) override;
32 
33     bool onMouse(SkScalar x, SkScalar y, skui::InputState state,
34                  skui::ModifierKey modifiers) override;
35 
36 private:
37     void loadEffects(const char* dirname);
38 
39     SkRandom fRandom;
40     bool fAnimated = false;
41     double fAnimationTime = 0;
42     SkPoint fMousePos = { 0, 0 };
43 
44     struct LoadedEffect {
45         SkString fName;
46         sk_sp<SkParticleEffectParams> fParams;
47     };
48     SkTArray<LoadedEffect> fLoaded;
49 
50     struct RunningEffect {
51         SkString fName;
52         sk_sp<SkParticleEffect> fEffect;
53         bool fTrackMouse;
54     };
55     SkTArray<RunningEffect> fRunning;
56 
57     sk_sp<skresources::ResourceProvider> fResourceProvider;
58 };
59 
60 #endif
61