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

Side by Side Diff: sky/examples/raw/sector-layout.dart

Issue 1156303004: Use Point, Size, and Rect in layout2.dart (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: address review comments 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
« no previous file with comments | « sky/engine/core/painting/Size.dart ('k') | sky/examples/raw/simple_render_tree.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 249 }
250 250
251 // paint origin is 0,0 of our circle 251 // paint origin is 0,0 of our circle
252 // each sector then knows how to paint itself at its location 252 // each sector then knows how to paint itself at its location
253 void paint(RenderNodeDisplayList canvas) { 253 void paint(RenderNodeDisplayList canvas) {
254 // TODO(ianh): avoid code duplication 254 // TODO(ianh): avoid code duplication
255 super.paint(canvas); 255 super.paint(canvas);
256 RenderSector child = firstChild; 256 RenderSector child = firstChild;
257 while (child != null) { 257 while (child != null) {
258 assert(child.parentData is SectorChildListParentData); 258 assert(child.parentData is SectorChildListParentData);
259 canvas.paintChild(child, 0.0, 0.0); 259 canvas.paintChild(child, new sky.Point(0.0, 0.0));
260 child = child.parentData.nextSibling; 260 child = child.parentData.nextSibling;
261 } 261 }
262 } 262 }
263 263
264 } 264 }
265 265
266 class RenderSectorSlice extends RenderSectorWithChildren { 266 class RenderSectorSlice extends RenderSectorWithChildren {
267 // lays out RenderSector children in a stack 267 // lays out RenderSector children in a stack
268 268
269 RenderSectorSlice({ 269 RenderSectorSlice({
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 354 }
355 355
356 // paint origin is 0,0 of our circle 356 // paint origin is 0,0 of our circle
357 // each sector then knows how to paint itself at its location 357 // each sector then knows how to paint itself at its location
358 void paint(RenderNodeDisplayList canvas) { 358 void paint(RenderNodeDisplayList canvas) {
359 // TODO(ianh): avoid code duplication 359 // TODO(ianh): avoid code duplication
360 super.paint(canvas); 360 super.paint(canvas);
361 RenderSector child = firstChild; 361 RenderSector child = firstChild;
362 while (child != null) { 362 while (child != null) {
363 assert(child.parentData is SectorChildListParentData); 363 assert(child.parentData is SectorChildListParentData);
364 canvas.paintChild(child, 0.0, 0.0); 364 canvas.paintChild(child, new sky.Point(0.0, 0.0));
365 child = child.parentData.nextSibling; 365 child = child.parentData.nextSibling;
366 } 366 }
367 } 367 }
368 368
369 } 369 }
370 370
371 class RenderBoxToRenderSectorAdapter extends RenderBox { 371 class RenderBoxToRenderSectorAdapter extends RenderBox {
372 372
373 RenderBoxToRenderSectorAdapter({ double innerRadius: 0.0, RenderSector child } ) : 373 RenderBoxToRenderSectorAdapter({ double innerRadius: 0.0, RenderSector child } ) :
374 _innerRadius = innerRadius { 374 _innerRadius = innerRadius {
(...skipping 29 matching lines...) Expand all
404 assert(child is RenderSector); 404 assert(child is RenderSector);
405 assert(child.parentData is SectorParentData); 405 assert(child.parentData is SectorParentData);
406 assert(!constraints.isInfinite); 406 assert(!constraints.isInfinite);
407 double maxChildDeltaRadius = math.min(constraints.maxWidth, constraints.maxH eight) / 2.0 - innerRadius; 407 double maxChildDeltaRadius = math.min(constraints.maxWidth, constraints.maxH eight) / 2.0 - innerRadius;
408 SectorDimensions childDimensions = child.getIntrinsicDimensions(new SectorCo nstraints(maxDeltaRadius: maxChildDeltaRadius), innerRadius); 408 SectorDimensions childDimensions = child.getIntrinsicDimensions(new SectorCo nstraints(maxDeltaRadius: maxChildDeltaRadius), innerRadius);
409 double dimension = (innerRadius + childDimensions.deltaRadius) * 2.0; 409 double dimension = (innerRadius + childDimensions.deltaRadius) * 2.0;
410 return new BoxDimensions.withConstraints(constraints, width: dimension, heig ht: dimension); 410 return new BoxDimensions.withConstraints(constraints, width: dimension, heig ht: dimension);
411 } 411 }
412 412
413 void performLayout() { 413 void performLayout() {
414 BoxDimensions ourDimensions;
415 if (child == null) { 414 if (child == null) {
416 ourDimensions = new BoxDimensions.withConstraints(constraints, width: 0.0, height: 0.0); 415 size = constraints.constrain(new sky.Size(0.0, 0.0));
417 } else { 416 } else {
418 assert(child is RenderSector); 417 assert(child is RenderSector);
419 assert(!constraints.isInfinite); 418 assert(!constraints.isInfinite);
420 double maxChildDeltaRadius = math.min(constraints.maxWidth, constraints.ma xHeight) / 2.0 - innerRadius; 419 double maxChildDeltaRadius = math.min(constraints.maxWidth, constraints.ma xHeight) / 2.0 - innerRadius;
421 assert(child.parentData is SectorParentData); 420 assert(child.parentData is SectorParentData);
422 child.parentData.radius = innerRadius; 421 child.parentData.radius = innerRadius;
423 child.parentData.theta = 0.0; 422 child.parentData.theta = 0.0;
424 child.layout(new SectorConstraints(maxDeltaRadius: maxChildDeltaRadius), p arentUsesSize: true); 423 child.layout(new SectorConstraints(maxDeltaRadius: maxChildDeltaRadius), p arentUsesSize: true);
425 double dimension = (innerRadius + child.deltaRadius) * 2.0; 424 double dimension = (innerRadius + child.deltaRadius) * 2.0;
426 ourDimensions = new BoxDimensions.withConstraints(constraints, width: dime nsion, height: dimension); 425 size = constraints.constrain(new sky.Size(dimension, dimension));
427 } 426 }
428 width = ourDimensions.width;
429 height = ourDimensions.height;
430 } 427 }
431 428
432 double width;
433 double height;
434
435 // paint origin is 0,0 of our circle 429 // paint origin is 0,0 of our circle
436 void paint(RenderNodeDisplayList canvas) { 430 void paint(RenderNodeDisplayList canvas) {
437 super.paint(canvas); 431 super.paint(canvas);
438 if (child != null) 432 if (child != null) {
439 canvas.paintChild(child, width/2.0, height/2.0); 433 sky.Rect bounds = new sky.Rect.fromSize(size);
434 canvas.paintChild(child, bounds.center);
435 }
440 } 436 }
441 437
442 bool hitTest(HitTestResult result, { double x, double y }) { 438 bool hitTest(HitTestResult result, { sky.Point position }) {
439 double x = position.x;
440 double y = position.y;
443 if (child == null) 441 if (child == null)
444 return false; 442 return false;
445 // translate to our origin 443 // translate to our origin
446 x -= width/2.0; 444 x -= size.width/2.0;
447 y -= height/2.0; 445 y -= size.height/2.0;
448 // convert to radius/theta 446 // convert to radius/theta
449 double radius = math.sqrt(x*x+y*y); 447 double radius = math.sqrt(x*x+y*y);
450 double theta = (math.atan2(x, -y) - math.PI/2.0) % kTwoPi; 448 double theta = (math.atan2(x, -y) - math.PI/2.0) % kTwoPi;
451 if (radius < innerRadius) 449 if (radius < innerRadius)
452 return false; 450 return false;
453 if (radius >= innerRadius + child.deltaRadius) 451 if (radius >= innerRadius + child.deltaRadius)
454 return false; 452 return false;
455 if (theta > child.deltaTheta) 453 if (theta > child.deltaTheta)
456 return false; 454 return false;
457 child.hitTest(result, radius: radius, theta: theta); 455 child.hitTest(result, radius: radius, theta: theta);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 rootCircle.add(new RenderSolidColor(0xFF0000FF, desiredDeltaTheta: kTwoPi * 0. 4)); 496 rootCircle.add(new RenderSolidColor(0xFF0000FF, desiredDeltaTheta: kTwoPi * 0. 4));
499 var stack = new RenderSectorSlice(padding: 2.0); 497 var stack = new RenderSectorSlice(padding: 2.0);
500 stack.add(new RenderSolidColor(0xFFFFFF00, desiredDeltaRadius: 20.0)); 498 stack.add(new RenderSolidColor(0xFFFFFF00, desiredDeltaRadius: 20.0));
501 stack.add(new RenderSolidColor(0xFFFF9000, desiredDeltaRadius: 20.0)); 499 stack.add(new RenderSolidColor(0xFFFF9000, desiredDeltaRadius: 20.0));
502 stack.add(new RenderSolidColor(0xFF00FF00)); 500 stack.add(new RenderSolidColor(0xFF00FF00));
503 rootCircle.add(stack); 501 rootCircle.add(stack);
504 502
505 var root = new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCi rcle); 503 var root = new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCi rcle);
506 app = new AppView(root); 504 app = new AppView(root);
507 } 505 }
OLDNEW
« no previous file with comments | « sky/engine/core/painting/Size.dart ('k') | sky/examples/raw/simple_render_tree.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698