<!DOCTYPE html>
<title>CanvasKit Viewer (Skia via Web Assembly)</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  html, body {
    margin: 0;
    padding: 0;
  }
</style>

<canvas id=viewer_canvas></canvas>

<script type="text/javascript" src="/node_modules/canvaskit/bin/canvaskit.js"></script>

<script type="text/javascript" charset="utf-8">
  var CanvasKit = null;
  CanvasKitInit({
    locateFile: (file) => '/node_modules/canvaskit/bin/'+file,
  }).ready().then((CK) => {
    CanvasKit = CK;
    ViewerMain(CanvasKit);
  });

  function ViewerMain(CanvasKit) {
    if (!CanvasKit) {
      console.error('CanvasKit not available.');
      return;
    }
    if (!CanvasKit.MakeSlide) {
      console.error('Not compiled with Viewer.');
      return;
    }

    const htmlCanvas = document.getElementById('viewer_canvas');
    htmlCanvas.width = window.innerWidth;
    htmlCanvas.height = window.innerHeight;

    const surface = CanvasKit.MakeCanvasSurface(htmlCanvas);
    if (!surface) {
      console.error('Could not make surface');
      return;
    }

    const slideName = 'WavyPathText';
    const slide = CanvasKit.MakeSlide(slideName);
    if (!slide) {
      console.error('Could not make slide ' + slideName);
      return;
    }

    slide.load(htmlCanvas.width, htmlCanvas.height);

    const fps = {
      frames: 0,
      startMs: window.performance.now()
    };

    surface.requestAnimationFrame(function(canvas) {
      slide.draw(canvas);
      ++fps.frames;

      const ms = window.performance.now();
      const sec = (ms - fps.startMs) / 1000;
      if (sec > 2) {
        console.log(Math.round(fps.frames / sec) + ' fps');
        fps.frames = 0;
        fps.startMs = ms;
      }

      if (slide.animate(ms * 1e6)) {
        surface.requestAnimationFrame(arguments.callee);
      }
    });
  }
</script>
