| // 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' as sky; |
| import 'dart:math' as math; |
| import 'dart:typed_data'; |
| |
| void beginFrame(double timeStamp) { |
| sky.Size size = new sky.Size(sky.view.width, sky.view.height); |
| sky.PictureRecorder recorder = new sky.PictureRecorder(); |
| final double devicePixelRatio = sky.view.devicePixelRatio; |
| sky.Canvas canvas = new sky.Canvas(recorder, sky.Point.origin & (size * devicePixelRatio)); |
| canvas.scale(devicePixelRatio, devicePixelRatio); |
| |
| sky.Paint paint = new sky.Paint(); |
| sky.Point mid = size.center(sky.Point.origin); |
| double radius = size.shortestSide / 2.0; |
| |
| canvas.drawPaint(new sky.Paint()..color = const sky.Color(0xFFFFFFFF)); |
| |
| canvas.save(); |
| |
| canvas.translate(-mid.x/2.0, sky.view.height*2.0); |
| canvas.clipRect( |
| new sky.Rect.fromLTRB(0.0, -sky.view.height, sky.view.width, radius)); |
| |
| canvas.translate(mid.x, mid.y); |
| paint.color = const sky.Color.fromARGB(128, 255, 0, 255); |
| canvas.rotate(math.PI/4.0); |
| |
| sky.Gradient yellowBlue = new sky.Gradient.linear( |
| [new sky.Point(-radius, -radius), new sky.Point(0.0, 0.0)], |
| [const sky.Color(0xFFFFFF00), const sky.Color(0xFF0000FF)]); |
| canvas.drawRect(new sky.Rect.fromLTRB(-radius, -radius, radius, radius), |
| new sky.Paint()..setShader(yellowBlue)); |
| |
| // Scale x and y by 0.5. |
| var scaleMatrix = new Float32List.fromList([ |
| 0.5, 0.0, 0.0, 0.0, |
| 0.0, 0.5, 0.0, 0.0, |
| 0.0, 0.0, 0.0, 0.0, |
| 0.0, 0.0, 0.0, 1.0, |
| ]); |
| canvas.concat(scaleMatrix); |
| paint.color = const sky.Color.fromARGB(128, 0, 255, 0); |
| canvas.drawCircle(sky.Point.origin, radius, paint); |
| |
| canvas.restore(); |
| |
| canvas.translate(0.0, 50.0); |
| var builder = new sky.LayerDrawLooperBuilder() |
| ..addLayerOnTop( |
| new sky.DrawLooperLayerInfo() |
| ..setOffset(const sky.Offset(150.0, 0.0)) |
| ..setColorMode(sky.TransferMode.src) |
| ..setPaintBits(sky.PaintBits.all), |
| new sky.Paint() |
| ..color = const sky.Color.fromARGB(128, 255, 255, 0) |
| ..setColorFilter(new sky.ColorFilter.mode( |
| const sky.Color.fromARGB(128, 0, 0, 255), sky.TransferMode.srcIn)) |
| ..setMaskFilter(new sky.MaskFilter.blur( |
| sky.BlurStyle.normal, 3.0, highQuality: true))) |
| ..addLayerOnTop( |
| new sky.DrawLooperLayerInfo() |
| ..setOffset(const sky.Offset(75.0, 75.0)) |
| ..setColorMode(sky.TransferMode.src) |
| ..setPaintBits(sky.PaintBits.shader), |
| new sky.Paint() |
| ..setShader(new sky.Gradient.radial( |
| new sky.Point(0.0, 0.0), radius/3.0, |
| [const sky.Color(0xFFFFFF00), const sky.Color(0xFFFF0000)], |
| null, sky.TileMode.mirror)) |
| // Since we're don't set sky.PaintBits.maskFilter, this has no effect. |
| ..setMaskFilter(new sky.MaskFilter.blur( |
| sky.BlurStyle.normal, 50.0, highQuality: true))) |
| ..addLayerOnTop( |
| new sky.DrawLooperLayerInfo()..setOffset(const sky.Offset(225.0, 75.0)), |
| // Since this layer uses a DST color mode, this has no effect. |
| new sky.Paint()..color = const sky.Color.fromARGB(128, 255, 0, 0)); |
| paint.setDrawLooper(builder.build()); |
| canvas.drawCircle(sky.Point.origin, radius, paint); |
| |
| sky.view.picture = recorder.endRecording(); |
| } |
| |
| void main() { |
| sky.view.setFrameCallback(beginFrame); |
| sky.view.scheduleFrame(); |
| } |