From c63c396da87071f45bb93eb20f01efe5a124cbeb Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Thu, 21 May 2015 11:22:17 -0700 Subject: [PATCH] Make hit testing work in layout2.dart This CL makes simple_render_tree.dart interactive by making the hit testing system work. I've also added a mechanism for requesting an animation frame. R=eseidel@chromium.org, ianh@google.com Review URL: https://codereview.chromium.org/1153543002 --- examples/raw/hello_world.dart | 6 ++-- examples/raw/simple_render_tree.dart | 41 ++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/examples/raw/hello_world.dart b/examples/raw/hello_world.dart index b27b29da7a0..61079b5927d 100644 --- a/examples/raw/hello_world.dart +++ b/examples/raw/hello_world.dart @@ -20,13 +20,13 @@ Picture draw(int a, int r, int g, int b) { bool handleEvent(Event event) { if (event.type == "pointerdown") { view.picture = draw(255, 0, 0, 255); - view.schedulePaint(); + view.scheduleFrame(); return true; } if (event.type == "pointerup") { view.picture = draw(255, 0, 255, 0); - view.schedulePaint(); + view.scheduleFrame(); return true; } @@ -36,7 +36,7 @@ bool handleEvent(Event event) { void main() { print("Hello, world"); view.picture = draw(255, 0, 255, 0); - view.schedulePaint(); + view.scheduleFrame(); view.setEventCallback(handleEvent); } diff --git a/examples/raw/simple_render_tree.dart b/examples/raw/simple_render_tree.dart index ee168f5609c..205043523b3 100644 --- a/examples/raw/simple_render_tree.dart +++ b/examples/raw/simple_render_tree.dart @@ -7,8 +7,11 @@ import 'dart:sky'; import 'package:sky/framework/layout2.dart'; class RenderSolidColor extends RenderDecoratedBox { + final int backgroundColor; + RenderSolidColor(int backgroundColor) - : super(new BoxDecoration(backgroundColor: backgroundColor)); + : super(new BoxDecoration(backgroundColor: backgroundColor)), + backgroundColor = backgroundColor; BoxDimensions getIntrinsicDimensions(BoxConstraints constraints) { return new BoxDimensions.withConstraints(constraints, height: 200.0); @@ -19,16 +22,48 @@ class RenderSolidColor extends RenderDecoratedBox { setHeight(constraints, 200.0); layoutDone(); } + + bool handlePointer(PointerEvent event, { double x: 0.0, double y: 0.0 }) { + if (event.type == 'pointerdown') { + setBoxDecoration(new BoxDecoration(backgroundColor: 0xFFFF0000)); + return true; + } + + if (event.type == 'pointerup') { + setBoxDecoration(new BoxDecoration(backgroundColor: backgroundColor)); + return true; + } + + return false; + } +} + +RenderView renderView; + +void beginFrame(double timeStamp) { + RenderNode.flushLayout(); + + renderView.paintFrame(); +} + +bool handleEvent(Event event) { + if (event is! PointerEvent) + return false; + return renderView.handlePointer(event, x: event.x, y: event.y); } void main() { + view.setEventCallback(handleEvent); + view.setBeginFrameCallback(beginFrame); + var root = new RenderBlock( decoration: new BoxDecoration(backgroundColor: 0xFF00FFFF)); root.add(new RenderSolidColor(0xFF00FF00)); root.add(new RenderSolidColor(0xFF0000FF)); - RenderView renderView = new RenderView(root: root); + renderView = new RenderView(root: root); renderView.layout(newWidth: view.width, newHeight: view.height); - renderView.paintFrame(); + + view.scheduleFrame(); }