Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: sky/examples/rendering/sector_layout.dart

Issue 1190123003: Decouple Canvas from DisplayList and map Picture and PictureRecorder more directly to their Skia co… (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:math' as math; 5 import 'dart:math' as math;
6 import 'dart:sky' as sky; 6 import 'dart:sky' as sky;
7 import 'package:sky/framework/app.dart'; 7 import 'package:sky/framework/app.dart';
8 import 'package:sky/framework/rendering/box.dart'; 8 import 'package:sky/framework/rendering/box.dart';
9 import 'package:sky/framework/rendering/object.dart'; 9 import 'package:sky/framework/rendering/object.dart';
10 10
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 BoxDecoration _decoration; 106 BoxDecoration _decoration;
107 BoxDecoration get decoration => _decoration; 107 BoxDecoration get decoration => _decoration;
108 void set decoration (BoxDecoration value) { 108 void set decoration (BoxDecoration value) {
109 if (value == _decoration) 109 if (value == _decoration)
110 return; 110 return;
111 _decoration = value; 111 _decoration = value;
112 markNeedsPaint(); 112 markNeedsPaint();
113 } 113 }
114 114
115 // origin must be set to the center of the circle 115 // origin must be set to the center of the circle
116 void paint(RenderObjectDisplayList canvas) { 116 void paint(sky.Canvas canvas) {
117 assert(deltaRadius != null); 117 assert(deltaRadius != null);
118 assert(deltaTheta != null); 118 assert(deltaTheta != null);
119 assert(parentData is SectorParentData); 119 assert(parentData is SectorParentData);
120 120
121 if (_decoration == null) 121 if (_decoration == null)
122 return; 122 return;
123 123
124 if (_decoration.backgroundColor != null) { 124 if (_decoration.backgroundColor != null) {
125 Paint paint = new Paint()..color = _decoration.backgroundColor; 125 Paint paint = new Paint()..color = _decoration.backgroundColor;
126 Path path = new Path(); 126 Path path = new Path();
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 if (child != null) { 242 if (child != null) {
243 innerTheta += paddingTheta; 243 innerTheta += paddingTheta;
244 remainingDeltaTheta -= paddingTheta; 244 remainingDeltaTheta -= paddingTheta;
245 } 245 }
246 } 246 }
247 deltaTheta = innerTheta; 247 deltaTheta = innerTheta;
248 } 248 }
249 249
250 // paint origin is 0,0 of our circle 250 // paint origin is 0,0 of our circle
251 // each sector then knows how to paint itself at its location 251 // each sector then knows how to paint itself at its location
252 void paint(RenderObjectDisplayList canvas) { 252 void paint(sky.Canvas canvas) {
253 // TODO(ianh): avoid code duplication 253 // TODO(ianh): avoid code duplication
254 super.paint(canvas); 254 super.paint(canvas);
255 RenderSector child = firstChild; 255 RenderSector child = firstChild;
256 while (child != null) { 256 while (child != null) {
257 assert(child.parentData is SectorChildListParentData); 257 assert(child.parentData is SectorChildListParentData);
258 canvas.paintChild(child, Point.origin); 258 paintChild(canvas, child, Point.origin);
259 child = child.parentData.nextSibling; 259 child = child.parentData.nextSibling;
260 } 260 }
261 } 261 }
262 262
263 } 263 }
264 264
265 class RenderSectorSlice extends RenderSectorWithChildren { 265 class RenderSectorSlice extends RenderSectorWithChildren {
266 // lays out RenderSector children in a stack 266 // lays out RenderSector children in a stack
267 267
268 RenderSectorSlice({ 268 RenderSectorSlice({
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 assert(child.parentData is SectorChildListParentData); 347 assert(child.parentData is SectorChildListParentData);
348 child = child.parentData.nextSibling; 348 child = child.parentData.nextSibling;
349 childRadius += padding; 349 childRadius += padding;
350 remainingDeltaRadius -= padding; 350 remainingDeltaRadius -= padding;
351 } 351 }
352 deltaRadius = childRadius - this.parentData.radius; 352 deltaRadius = childRadius - this.parentData.radius;
353 } 353 }
354 354
355 // paint origin is 0,0 of our circle 355 // paint origin is 0,0 of our circle
356 // each sector then knows how to paint itself at its location 356 // each sector then knows how to paint itself at its location
357 void paint(RenderObjectDisplayList canvas) { 357 void paint(sky.Canvas canvas) {
358 // TODO(ianh): avoid code duplication 358 // TODO(ianh): avoid code duplication
359 super.paint(canvas); 359 super.paint(canvas);
360 RenderSector child = firstChild; 360 RenderSector child = firstChild;
361 while (child != null) { 361 while (child != null) {
362 assert(child.parentData is SectorChildListParentData); 362 assert(child.parentData is SectorChildListParentData);
363 canvas.paintChild(child, Point.origin); 363 paintChild(canvas, child, Point.origin);
364 child = child.parentData.nextSibling; 364 child = child.parentData.nextSibling;
365 } 365 }
366 } 366 }
367 367
368 } 368 }
369 369
370 class RenderBoxToRenderSectorAdapter extends RenderBox { 370 class RenderBoxToRenderSectorAdapter extends RenderBox {
371 371
372 RenderBoxToRenderSectorAdapter({ double innerRadius: 0.0, RenderSector child } ) : 372 RenderBoxToRenderSectorAdapter({ double innerRadius: 0.0, RenderSector child } ) :
373 _innerRadius = innerRadius { 373 _innerRadius = innerRadius {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 assert(child.parentData is SectorParentData); 421 assert(child.parentData is SectorParentData);
422 child.parentData.radius = innerRadius; 422 child.parentData.radius = innerRadius;
423 child.parentData.theta = 0.0; 423 child.parentData.theta = 0.0;
424 child.layout(new SectorConstraints(maxDeltaRadius: maxChildDeltaRadius), p arentUsesSize: true); 424 child.layout(new SectorConstraints(maxDeltaRadius: maxChildDeltaRadius), p arentUsesSize: true);
425 double dimension = (innerRadius + child.deltaRadius) * 2.0; 425 double dimension = (innerRadius + child.deltaRadius) * 2.0;
426 size = constraints.constrain(new Size(dimension, dimension)); 426 size = constraints.constrain(new Size(dimension, dimension));
427 } 427 }
428 } 428 }
429 429
430 // paint origin is 0,0 of our circle 430 // paint origin is 0,0 of our circle
431 void paint(RenderObjectDisplayList canvas) { 431 void paint(sky.Canvas canvas) {
432 super.paint(canvas); 432 super.paint(canvas);
433 if (child != null) { 433 if (child != null) {
434 Rect bounds = new Rect.fromSize(size); 434 Rect bounds = new Rect.fromSize(size);
435 canvas.paintChild(child, bounds.center); 435 paintChild(canvas, child, bounds.center);
436 } 436 }
437 } 437 }
438 438
439 bool hitTest(HitTestResult result, { Point position }) { 439 bool hitTest(HitTestResult result, { Point position }) {
440 double x = position.x; 440 double x = position.x;
441 double y = position.y; 441 double y = position.y;
442 if (child == null) 442 if (child == null)
443 return false; 443 return false;
444 // translate to our origin 444 // translate to our origin
445 x -= size.width/2.0; 445 x -= size.width/2.0;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 rootCircle.add(new RenderSolidColor(const Color(0xFF0000FF), desiredDeltaTheta : kTwoPi * 0.4)); 497 rootCircle.add(new RenderSolidColor(const Color(0xFF0000FF), desiredDeltaTheta : kTwoPi * 0.4));
498 var stack = new RenderSectorSlice(padding: 2.0); 498 var stack = new RenderSectorSlice(padding: 2.0);
499 stack.add(new RenderSolidColor(const Color(0xFFFFFF00), desiredDeltaRadius: 20 .0)); 499 stack.add(new RenderSolidColor(const Color(0xFFFFFF00), desiredDeltaRadius: 20 .0));
500 stack.add(new RenderSolidColor(const Color(0xFFFF9000), desiredDeltaRadius: 20 .0)); 500 stack.add(new RenderSolidColor(const Color(0xFFFF9000), desiredDeltaRadius: 20 .0));
501 stack.add(new RenderSolidColor(const Color(0xFF00FF00))); 501 stack.add(new RenderSolidColor(const Color(0xFF00FF00)));
502 rootCircle.add(stack); 502 rootCircle.add(stack);
503 503
504 var root = new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCi rcle); 504 var root = new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCi rcle);
505 app = new AppView(root); 505 app = new AppView(root);
506 } 506 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698