OLD | NEW |
---|---|
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/layout2.dart'; | 8 import 'package:sky/framework/layout2.dart'; |
9 | 9 |
10 const double kTwoPi = 2 * math.PI; | 10 const double kTwoPi = 2 * math.PI; |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 } | 257 } |
258 | 258 |
259 // paint origin is 0,0 of our circle | 259 // paint origin is 0,0 of our circle |
260 // each sector then knows how to paint itself at its location | 260 // each sector then knows how to paint itself at its location |
261 void paint(RenderNodeDisplayList canvas) { | 261 void paint(RenderNodeDisplayList canvas) { |
262 // TODO(ianh): avoid code duplication | 262 // TODO(ianh): avoid code duplication |
263 super.paint(canvas); | 263 super.paint(canvas); |
264 RenderSector child = firstChild; | 264 RenderSector child = firstChild; |
265 while (child != null) { | 265 while (child != null) { |
266 assert(child.parentData is SectorChildListParentData); | 266 assert(child.parentData is SectorChildListParentData); |
267 canvas.paintChild(child, 0.0, 0.0); | 267 canvas.paintChild(child, new sky.Point()); |
Hixie
2015/05/28 18:45:22
I don't like the way this looks. It's not obvious
| |
268 child = child.parentData.nextSibling; | 268 child = child.parentData.nextSibling; |
269 } | 269 } |
270 } | 270 } |
271 | 271 |
272 } | 272 } |
273 | 273 |
274 class RenderSectorSlice extends RenderSectorWithChildren { | 274 class RenderSectorSlice extends RenderSectorWithChildren { |
275 // lays out RenderSector children in a stack | 275 // lays out RenderSector children in a stack |
276 | 276 |
277 RenderSectorSlice({ | 277 RenderSectorSlice({ |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
377 } | 377 } |
378 | 378 |
379 // paint origin is 0,0 of our circle | 379 // paint origin is 0,0 of our circle |
380 // each sector then knows how to paint itself at its location | 380 // each sector then knows how to paint itself at its location |
381 void paint(RenderNodeDisplayList canvas) { | 381 void paint(RenderNodeDisplayList canvas) { |
382 // TODO(ianh): avoid code duplication | 382 // TODO(ianh): avoid code duplication |
383 super.paint(canvas); | 383 super.paint(canvas); |
384 RenderSector child = firstChild; | 384 RenderSector child = firstChild; |
385 while (child != null) { | 385 while (child != null) { |
386 assert(child.parentData is SectorChildListParentData); | 386 assert(child.parentData is SectorChildListParentData); |
387 canvas.paintChild(child, 0.0, 0.0); | 387 canvas.paintChild(child, new sky.Point()); |
388 child = child.parentData.nextSibling; | 388 child = child.parentData.nextSibling; |
389 } | 389 } |
390 } | 390 } |
391 | 391 |
392 } | 392 } |
393 | 393 |
394 class RenderBoxToRenderSectorAdapter extends RenderBox { | 394 class RenderBoxToRenderSectorAdapter extends RenderBox { |
395 | 395 |
396 RenderBoxToRenderSectorAdapter({ double innerRadius: 0.0, RenderSector child } ) : | 396 RenderBoxToRenderSectorAdapter({ double innerRadius: 0.0, RenderSector child } ) : |
397 _innerRadius = innerRadius { | 397 _innerRadius = innerRadius { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
456 layoutDone(); | 456 layoutDone(); |
457 } | 457 } |
458 | 458 |
459 double width; | 459 double width; |
460 double height; | 460 double height; |
461 | 461 |
462 // paint origin is 0,0 of our circle | 462 // paint origin is 0,0 of our circle |
463 void paint(RenderNodeDisplayList canvas) { | 463 void paint(RenderNodeDisplayList canvas) { |
464 super.paint(canvas); | 464 super.paint(canvas); |
465 if (child != null) | 465 if (child != null) |
466 canvas.paintChild(child, width/2.0, height/2.0); | 466 canvas.paintChild(child, new sky.Point(width/2.0, height/2.0)); |
Hixie
2015/05/28 18:45:22
We could replace width/height with a Rect and then
| |
467 } | 467 } |
468 | 468 |
469 bool hitTest(HitTestResult result, { double x, double y }) { | 469 bool hitTest(HitTestResult result, { sky.Point position }) { |
470 double x = position.x; | |
471 double y = position.y; | |
470 if (child == null) | 472 if (child == null) |
471 return false; | 473 return false; |
472 // translate to our origin | 474 // translate to our origin |
473 x -= width/2.0; | 475 x -= width/2.0; |
474 y -= height/2.0; | 476 y -= height/2.0; |
475 // convert to radius/theta | 477 // convert to radius/theta |
476 double radius = math.sqrt(x*x+y*y); | 478 double radius = math.sqrt(x*x+y*y); |
477 double theta = (math.atan2(x, -y) - math.PI/2.0) % kTwoPi; | 479 double theta = (math.atan2(x, -y) - math.PI/2.0) % kTwoPi; |
478 if (radius < innerRadius) | 480 if (radius < innerRadius) |
479 return false; | 481 return false; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
526 rootCircle.add(new RenderSolidColor(0xFF0000FF, desiredDeltaTheta: kTwoPi * 0. 4)); | 528 rootCircle.add(new RenderSolidColor(0xFF0000FF, desiredDeltaTheta: kTwoPi * 0. 4)); |
527 var stack = new RenderSectorSlice(padding: 2.0); | 529 var stack = new RenderSectorSlice(padding: 2.0); |
528 stack.add(new RenderSolidColor(0xFFFFFF00, desiredDeltaRadius: 20.0)); | 530 stack.add(new RenderSolidColor(0xFFFFFF00, desiredDeltaRadius: 20.0)); |
529 stack.add(new RenderSolidColor(0xFFFF9000, desiredDeltaRadius: 20.0)); | 531 stack.add(new RenderSolidColor(0xFFFF9000, desiredDeltaRadius: 20.0)); |
530 stack.add(new RenderSolidColor(0xFF00FF00)); | 532 stack.add(new RenderSolidColor(0xFF00FF00)); |
531 rootCircle.add(stack); | 533 rootCircle.add(stack); |
532 | 534 |
533 var root = new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCi rcle); | 535 var root = new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCi rcle); |
534 app = new AppView(root); | 536 app = new AppView(root); |
535 } | 537 } |
OLD | NEW |