From 2fe4b05e6dcd75ab4728c3cedc7b3c55e4f578cf Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 1 Jun 2015 16:21:21 -0700 Subject: [PATCH] Refactor image handling in Sky to expose the loader and image as separate classes to Dart code. This makes it possible to avoid unnecessary paints, by only painting once when the image has loaded. Now that we've separated the loader and image classes, we can implement an image cache in Dart. R=abarth@chromium.org, abarth Review URL: https://codereview.chromium.org/1156003007 --- examples/raw/spinning_image.dart | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/raw/spinning_image.dart b/examples/raw/spinning_image.dart index 53fe140460f..cd5339fbf01 100644 --- a/examples/raw/spinning_image.dart +++ b/examples/raw/spinning_image.dart @@ -6,7 +6,7 @@ import 'dart:sky'; double timeBase = null; -Image image; +Image image = null; void beginFrame(double timeStamp) { if (timeBase == null) timeBase = timeStamp; @@ -16,14 +16,21 @@ void beginFrame(double timeStamp) { canvas.rotateDegrees(delta / 10); canvas.scale(0.2, 0.2); Paint paint = new Paint()..setARGB(255, 0, 255, 0); - canvas.drawImage(image, -image.width / 2.0, -image.height / 2.0, paint); + if (image != null) + canvas.drawImage(image, -image.width / 2.0, -image.height / 2.0, paint); view.picture = canvas.endRecording(); view.scheduleFrame(); } void main() { - image = new Image(); - image.src = "https://www.dartlang.org/logos/dart-logo.png"; + new ImageLoader("https://www.dartlang.org/logos/dart-logo.png", (result) { + if (result != null) { + print("${result.width}x${result.width} image loaded!"); + image = result; + view.scheduleFrame(); + } else { + print("Image failed to load"); + } + }).load(); view.setBeginFrameCallback(beginFrame); - view.scheduleFrame(); }