// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:sky';

void beginFrame(double timeStamp) {
  double size = 100.0;
  PictureRecorder recorder = new PictureRecorder();
  final double devicePixelRatio = view.devicePixelRatio;
  Canvas canvas = new Canvas(recorder, new Rect.fromLTWH(0.0, 0.0, view.width * devicePixelRatio, view.height * devicePixelRatio));
  canvas.scale(devicePixelRatio, devicePixelRatio);
  canvas.translate(size + 10.0, size + 10.0);

  Paint paint = new Paint();
  paint.color = const Color.fromARGB(255, 0, 255, 0);
  var builder = new LayerDrawLooperBuilder()
    // Shadow layer.
    ..addLayerOnTop(
        new DrawLooperLayerInfo()
          ..setPaintBits(PaintBits.all)
          ..setOffset(const Offset(5.0, 5.0))
          ..setColorMode(TransferMode.src),
        new Paint()
          ..color = const Color.fromARGB(128, 55, 55, 55)
          ..setMaskFilter(
            new MaskFilter.blur(BlurStyle.normal, 5.0, highQuality: true))
    )
    // Main layer.
    ..addLayerOnTop(new DrawLooperLayerInfo(), new Paint());
  paint.setDrawLooper(builder.build());

  canvas.drawPaint(
      new Paint()..color = const Color.fromARGB(255, 255, 255, 255));
  canvas.drawRect(new Rect.fromLTRB(-size, -size, size, size), paint);
  view.picture = recorder.endRecording();
}

void main() {
  view.setFrameCallback(beginFrame);
  view.scheduleFrame();
}
