1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2020 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#include <emscripten.h> 9cb93a386Sopenharmony_ci#include <emscripten/bind.h> 10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 11cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 12cb93a386Sopenharmony_ci#include "tools/skui/InputState.h" 13cb93a386Sopenharmony_ci#include "tools/skui/ModifierKey.h" 14cb93a386Sopenharmony_ci#include "tools/viewer/SKPSlide.h" 15cb93a386Sopenharmony_ci#include "tools/viewer/SampleSlide.h" 16cb93a386Sopenharmony_ci#include "tools/viewer/SvgSlide.h" 17cb93a386Sopenharmony_ci#include <GLES3/gl3.h> 18cb93a386Sopenharmony_ci#include <string> 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ciusing namespace emscripten; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_cistatic sk_sp<Slide> MakeSlide(std::string name) { 23cb93a386Sopenharmony_ci if (name == "PathText") { 24cb93a386Sopenharmony_ci extern Sample* MakePathTextSample(); 25cb93a386Sopenharmony_ci return sk_make_sp<SampleSlide>(MakePathTextSample); 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci if (name == "TessellatedWedge") { 28cb93a386Sopenharmony_ci extern Sample* MakeTessellatedWedgeSample(); 29cb93a386Sopenharmony_ci return sk_make_sp<SampleSlide>(MakeTessellatedWedgeSample); 30cb93a386Sopenharmony_ci } 31cb93a386Sopenharmony_ci return nullptr; 32cb93a386Sopenharmony_ci} 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_cistatic sk_sp<Slide> MakeSkpSlide(std::string name, std::string skpData) { 35cb93a386Sopenharmony_ci auto stream = std::make_unique<SkMemoryStream>(skpData.data(), skpData.size(), 36cb93a386Sopenharmony_ci /*copyData=*/true); 37cb93a386Sopenharmony_ci return sk_make_sp<SKPSlide>(SkString(name.c_str()), std::move(stream)); 38cb93a386Sopenharmony_ci} 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_cistatic sk_sp<Slide> MakeSvgSlide(std::string name, std::string svgText) { 41cb93a386Sopenharmony_ci auto stream = std::make_unique<SkMemoryStream>(svgText.data(), svgText.size(), 42cb93a386Sopenharmony_ci /*copyData=*/true); 43cb93a386Sopenharmony_ci return sk_make_sp<SvgSlide>(SkString(name.c_str()), std::move(stream)); 44cb93a386Sopenharmony_ci} 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ciEMSCRIPTEN_BINDINGS(Viewer) { 47cb93a386Sopenharmony_ci function("MakeSlide", &MakeSlide); 48cb93a386Sopenharmony_ci function("MakeSkpSlide", &MakeSkpSlide); 49cb93a386Sopenharmony_ci function("MakeSvgSlide", &MakeSvgSlide); 50cb93a386Sopenharmony_ci class_<Slide>("Slide") 51cb93a386Sopenharmony_ci .smart_ptr<sk_sp<Slide>>("sk_sp<Slide>") 52cb93a386Sopenharmony_ci .function("load", &Slide::load) 53cb93a386Sopenharmony_ci .function("animate", &Slide::animate) 54cb93a386Sopenharmony_ci .function("draw", optional_override([](Slide& self, SkCanvas& canvas) { 55cb93a386Sopenharmony_ci self.draw(&canvas); 56cb93a386Sopenharmony_ci })) 57cb93a386Sopenharmony_ci .function("onChar", &Slide::onChar) 58cb93a386Sopenharmony_ci .function("onMouse", &Slide::onMouse); 59cb93a386Sopenharmony_ci enum_<skui::InputState>("InputState") 60cb93a386Sopenharmony_ci .value("Down", skui::InputState::kDown) 61cb93a386Sopenharmony_ci .value("Up", skui::InputState::kUp) 62cb93a386Sopenharmony_ci .value("Move", skui::InputState::kMove) 63cb93a386Sopenharmony_ci .value("Right", skui::InputState::kRight) 64cb93a386Sopenharmony_ci .value("Left", skui::InputState::kLeft); 65cb93a386Sopenharmony_ci enum_<skui::ModifierKey>("ModifierKey") 66cb93a386Sopenharmony_ci .value("None", skui::ModifierKey::kNone) 67cb93a386Sopenharmony_ci .value("Shift", skui::ModifierKey::kShift) 68cb93a386Sopenharmony_ci .value("Control", skui::ModifierKey::kControl) 69cb93a386Sopenharmony_ci .value("Option", skui::ModifierKey::kOption) 70cb93a386Sopenharmony_ci .value("Command", skui::ModifierKey::kCommand) 71cb93a386Sopenharmony_ci .value("FirstPress", skui::ModifierKey::kFirstPress); 72cb93a386Sopenharmony_ci} 73