/* * Copyright 2019 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef ParticlesSlide_DEFINED #define ParticlesSlide_DEFINED #include "tools/viewer/Slide.h" #include "include/core/SkPath.h" #include "include/private/SkTArray.h" #include "include/utils/SkRandom.h" class SkParticleEffect; class SkParticleEffectParams; namespace skresources { class ResourceProvider; } class ParticlesSlide : public Slide { public: ParticlesSlide(); // TODO: We need a way for primarily interactive slides to always be as large as the window SkISize getDimensions() const override { return SkISize::MakeEmpty(); } void load(SkScalar winWidth, SkScalar winHeight) override; void draw(SkCanvas* canvas) override; bool animate(double) override; bool onMouse(SkScalar x, SkScalar y, skui::InputState state, skui::ModifierKey modifiers) override; private: void loadEffects(const char* dirname); SkRandom fRandom; bool fAnimated = false; double fAnimationTime = 0; SkPoint fMousePos = { 0, 0 }; struct LoadedEffect { SkString fName; sk_sp fParams; }; SkTArray fLoaded; struct RunningEffect { SkString fName; sk_sp fEffect; bool fTrackMouse; }; SkTArray fRunning; sk_sp fResourceProvider; }; #endif