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

Side by Side Diff: sky/sdk/lib/framework/rendering/box.dart

Issue 1173493003: Extend Sky's RenderFlex with intrinsic sizes and compute cross-size height (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: fix typos 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 'dart:typed_data'; 7 import 'dart:typed_data';
8 import 'object.dart'; 8 import 'object.dart';
9 import '../painting/shadows.dart'; 9 import '../painting/shadows.dart';
10 import 'package:vector_math/vector_math.dart'; 10 import 'package:vector_math/vector_math.dart';
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 549
550 Size _requestedSize; 550 Size _requestedSize;
551 Size get requestedSize => _requestedSize; 551 Size get requestedSize => _requestedSize;
552 void set requestedSize (Size value) { 552 void set requestedSize (Size value) {
553 if (value == _requestedSize) 553 if (value == _requestedSize)
554 return; 554 return;
555 _requestedSize = value; 555 _requestedSize = value;
556 markNeedsLayout(); 556 markNeedsLayout();
557 } 557 }
558 558
559 void performLayout() { 559 Size _sizeForConstraints(BoxConstraints innerConstraints) {
560 // If there's no image, we can't size ourselves automatically 560 // If there's no image, we can't size ourselves automatically
561 if (_image == null) { 561 if (_image == null) {
562 double width = requestedSize.width == null ? 0.0 : requestedSize.width; 562 double width = requestedSize.width == null ? 0.0 : requestedSize.width;
563 double height = requestedSize.height == null ? 0.0 : requestedSize.height; 563 double height = requestedSize.height == null ? 0.0 : requestedSize.height;
564 size = constraints.constrain(new Size(width, height)); 564 return constraints.constrain(new Size(width, height));
565 return;
566 } 565 }
567 566
568 // If neither height nor width are specified, use inherent image dimensions 567 // If neither height nor width are specified, use inherent image dimensions
569 // If only one dimension is specified, adjust the other dimension to 568 // If only one dimension is specified, adjust the other dimension to
570 // maintain the aspect ratio 569 // maintain the aspect ratio
571 if (requestedSize.width == null) { 570 if (requestedSize.width == null) {
572 if (requestedSize.height == null) { 571 if (requestedSize.height == null) {
573 size = constraints.constrain(new Size(_image.width.toDouble(), _image.he ight.toDouble())); 572 return constraints.constrain(new Size(_image.width.toDouble(), _image.he ight.toDouble()));
574 } else { 573 } else {
575 double width = requestedSize.height * _image.width / _image.height; 574 double width = requestedSize.height * _image.width / _image.height;
576 size = constraints.constrain(new Size(width, requestedSize.height)); 575 return constraints.constrain(new Size(width, requestedSize.height));
577 } 576 }
578 } else if (requestedSize.height == null) { 577 } else if (requestedSize.height == null) {
579 double height = requestedSize.width * _image.height / _image.width; 578 double height = requestedSize.width * _image.height / _image.width;
580 size = constraints.constrain(new Size(requestedSize.width, height)); 579 return constraints.constrain(new Size(requestedSize.width, height));
581 } else { 580 } else {
582 size = constraints.constrain(requestedSize); 581 return constraints.constrain(requestedSize);
583 } 582 }
584 } 583 }
585 584
585 double getMinIntrinsicWidth(BoxConstraints constraints) {
586 if (requestedSize.width == null && requestedSize.height == null)
587 return constraints.constrainWidth(0.0);
588 return _sizeForConstraints(constraints).width;
589 }
590
591 double getMaxIntrinsicWidth(BoxConstraints constraints) {
592 return _sizeForConstraints(constraints).width;
593 }
594
595 double getMinIntrinsicHeight(BoxConstraints constraints) {
596 if (requestedSize.width == null && requestedSize.height == null)
597 return constraints.constrainHeight(0.0);
598 return _sizeForConstraints(constraints).height;
599 }
600
601 double getMaxIntrinsicHeight(BoxConstraints constraints) {
602 return _sizeForConstraints(constraints).height;
603 }
604
605 void performLayout() {
606 size = _sizeForConstraints(constraints);
607 }
608
586 void paint(RenderObjectDisplayList canvas) { 609 void paint(RenderObjectDisplayList canvas) {
587 if (_image == null) return; 610 if (_image == null) return;
588 bool needsScale = size.width != _image.width || size.height != _image.height ; 611 bool needsScale = size.width != _image.width || size.height != _image.height ;
589 if (needsScale) { 612 if (needsScale) {
590 double widthScale = size.width / _image.width; 613 double widthScale = size.width / _image.width;
591 double heightScale = size.height / _image.height; 614 double heightScale = size.height / _image.height;
592 canvas.save(); 615 canvas.save();
593 canvas.scale(widthScale, heightScale); 616 canvas.scale(widthScale, heightScale);
594 } 617 }
595 Paint paint = new Paint(); 618 Paint paint = new Paint();
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 } 813 }
791 814
792 return _cachedBackgroundPaint; 815 return _cachedBackgroundPaint;
793 } 816 }
794 817
795 void paint(RenderObjectDisplayList canvas) { 818 void paint(RenderObjectDisplayList canvas) {
796 assert(size.width != null); 819 assert(size.width != null);
797 assert(size.height != null); 820 assert(size.height != null);
798 821
799 if (_decoration.backgroundColor != null || _decoration.boxShadow != null || 822 if (_decoration.backgroundColor != null || _decoration.boxShadow != null ||
800 _deocration.gradient != null) { 823 _decoration.gradient != null) {
801 Rect rect = new Rect.fromLTRB(0.0, 0.0, size.width, size.height); 824 Rect rect = new Rect.fromLTRB(0.0, 0.0, size.width, size.height);
802 if (_decoration.borderRadius == null) 825 if (_decoration.borderRadius == null)
803 canvas.drawRect(rect, _backgroundPaint); 826 canvas.drawRect(rect, _backgroundPaint);
804 else 827 else
805 canvas.drawRRect(new sky.RRect()..setRectXY(rect, _decoration.borderRadi us, _decoration.borderRadius), _backgroundPaint); 828 canvas.drawRRect(new sky.RRect()..setRectXY(rect, _decoration.borderRadi us, _decoration.borderRadius), _backgroundPaint);
806 } 829 }
807 830
808 if (_decoration.border != null) { 831 if (_decoration.border != null) {
809 assert(_decoration.borderRadius == null); // TODO(abarth): Implement borde rs with border radius. 832 assert(_decoration.borderRadius == null); // TODO(abarth): Implement borde rs with border radius.
810 833
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 1112
1090 void defaultPaint(RenderObjectDisplayList canvas) { 1113 void defaultPaint(RenderObjectDisplayList canvas) {
1091 RenderBox child = firstChild; 1114 RenderBox child = firstChild;
1092 while (child != null) { 1115 while (child != null) {
1093 assert(child.parentData is ParentDataType); 1116 assert(child.parentData is ParentDataType);
1094 canvas.paintChild(child, child.parentData.position); 1117 canvas.paintChild(child, child.parentData.position);
1095 child = child.parentData.nextSibling; 1118 child = child.parentData.nextSibling;
1096 } 1119 }
1097 } 1120 }
1098 } 1121 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/framework/components2/popup_menu_item.dart ('k') | sky/sdk/lib/framework/rendering/flex.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698