1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci* Copyright 2019 Google LLC 3cb93a386Sopenharmony_ci* 4cb93a386Sopenharmony_ci* Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci* found in the LICENSE file. 6cb93a386Sopenharmony_ci*/ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef SkSLSlide_DEFINED 9cb93a386Sopenharmony_ci#define SkSLSlide_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkM44.h" 12cb93a386Sopenharmony_ci#include "include/effects/SkRuntimeEffect.h" 13cb93a386Sopenharmony_ci#include "tools/viewer/Slide.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciclass SkSLSlide : public Slide { 16cb93a386Sopenharmony_cipublic: 17cb93a386Sopenharmony_ci SkSLSlide(); 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ci // TODO: We need a way for primarily interactive slides to always be as large as the window 20cb93a386Sopenharmony_ci SkISize getDimensions() const override { return SkISize::MakeEmpty(); } 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci void draw(SkCanvas* canvas) override; 23cb93a386Sopenharmony_ci bool animate(double nanos) override; 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci void resize(SkScalar winWidth, SkScalar winHeight) override { 26cb93a386Sopenharmony_ci fResolution = { winWidth, winHeight, 1.0f }; 27cb93a386Sopenharmony_ci } 28cb93a386Sopenharmony_ci void load(SkScalar winWidth, SkScalar winHeight) override; 29cb93a386Sopenharmony_ci void unload() override; 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ci bool onMouse(SkScalar x, SkScalar y, skui::InputState state, 32cb93a386Sopenharmony_ci skui::ModifierKey modifiers) override { return true; } 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ciprivate: 35cb93a386Sopenharmony_ci bool rebuild(); 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ci SkString fSkSL; 38cb93a386Sopenharmony_ci bool fCodeIsDirty; 39cb93a386Sopenharmony_ci sk_sp<SkRuntimeEffect> fEffect; 40cb93a386Sopenharmony_ci SkAutoTMalloc<char> fInputs; 41cb93a386Sopenharmony_ci SkTArray<sk_sp<SkShader>> fChildren; 42cb93a386Sopenharmony_ci float fSeconds = 0.0f; 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci enum Geometry { 45cb93a386Sopenharmony_ci kFill, 46cb93a386Sopenharmony_ci kCircle, 47cb93a386Sopenharmony_ci kRoundRect, 48cb93a386Sopenharmony_ci kCapsule, 49cb93a386Sopenharmony_ci kText, 50cb93a386Sopenharmony_ci }; 51cb93a386Sopenharmony_ci int fGeometry = kFill; 52cb93a386Sopenharmony_ci SkV3 fResolution = { 1, 1, 1 }; 53cb93a386Sopenharmony_ci SkV4 fMousePos; 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci // Named shaders that can be selected as inputs 56cb93a386Sopenharmony_ci SkTArray<std::pair<const char*, sk_sp<SkShader>>> fShaders; 57cb93a386Sopenharmony_ci}; 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci#endif 60