blob: 39c9775d9e0757ef93e03a1c23a1d823b88e44f3 [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 ParticlesSlide_DEFINED
9#define ParticlesSlide_DEFINED
10
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "tools/viewer/Slide.h"
Brian Osman7c979f52019-02-12 13:27:51 -050012
Mike Kleinc0bd9f92019-04-23 12:05:21 -050013#include "include/core/SkPath.h"
14#include "include/private/SkTArray.h"
15#include "include/utils/SkRandom.h"
Brian Osman7c979f52019-02-12 13:27:51 -050016
17class SkParticleEffect;
Brian Osmanb77d5022019-03-06 11:08:48 -050018class SkParticleEffectParams;
Brian Osman7c979f52019-02-12 13:27:51 -050019
Brian Osmand12f2782019-11-27 10:34:18 -050020namespace skresources { class ResourceProvider; }
21
Brian Osman7c979f52019-02-12 13:27:51 -050022class ParticlesSlide : public Slide {
23public:
24 ParticlesSlide();
25
26 // TODO: We need a way for primarily interactive slides to always be as large as the window
27 SkISize getDimensions() const override { return SkISize::MakeEmpty(); }
28
Ben Wagnera57d8682019-02-14 13:22:43 -050029 void load(SkScalar winWidth, SkScalar winHeight) override;
Brian Osman7c979f52019-02-12 13:27:51 -050030 void draw(SkCanvas* canvas) override;
Hal Canary41248072019-07-11 16:32:53 -040031 bool animate(double) override;
Brian Osman7c979f52019-02-12 13:27:51 -050032
Hal Canaryb1f411a2019-08-29 10:39:22 -040033 bool onMouse(SkScalar x, SkScalar y, skui::InputState state,
34 skui::ModifierKey modifiers) override;
Brian Osman7c979f52019-02-12 13:27:51 -050035
36private:
Brian Osmanb77d5022019-03-06 11:08:48 -050037 void loadEffects(const char* dirname);
38
Brian Osman7c979f52019-02-12 13:27:51 -050039 SkRandom fRandom;
Hal Canary41248072019-07-11 16:32:53 -040040 bool fAnimated = false;
41 double fAnimationTime = 0;
Brian Osmanffbfd1b2019-12-05 14:38:14 -050042 SkPoint fMousePos = { 0, 0 };
Brian Osmanb77d5022019-03-06 11:08:48 -050043
44 struct LoadedEffect {
45 SkString fName;
46 sk_sp<SkParticleEffectParams> fParams;
47 };
48 SkTArray<LoadedEffect> fLoaded;
49
50 struct RunningEffect {
Brian Osmanb77d5022019-03-06 11:08:48 -050051 SkString fName;
52 sk_sp<SkParticleEffect> fEffect;
Brian Osmandf182962019-10-15 10:27:59 -040053 bool fTrackMouse;
Brian Osmanb77d5022019-03-06 11:08:48 -050054 };
55 SkTArray<RunningEffect> fRunning;
Brian Osmand12f2782019-11-27 10:34:18 -050056
57 sk_sp<skresources::ResourceProvider> fResourceProvider;
Brian Osman7c979f52019-02-12 13:27:51 -050058};
59
60#endif