Commit e770b9da authored by Adam Barth's avatar Adam Barth

Merge pull request #552 from abarth/fix_image_layout

Images in Stocks drawer layout at crazy sizes
parents c25beb84 ae9f1702
...@@ -1385,6 +1385,9 @@ class RenderImage extends RenderBox { ...@@ -1385,6 +1385,9 @@ class RenderImage extends RenderBox {
} }
Size _sizeForConstraints(BoxConstraints constraints) { Size _sizeForConstraints(BoxConstraints constraints) {
if (constraints.isTight)
return constraints.constrain(Size.zero);
// If there's no image, we can't size ourselves automatically // If there's no image, we can't size ourselves automatically
if (_image == null) { if (_image == null) {
double width = _width == null ? 0.0 : _width; double width = _width == null ? 0.0 : _width;
...@@ -1392,36 +1395,38 @@ class RenderImage extends RenderBox { ...@@ -1392,36 +1395,38 @@ class RenderImage extends RenderBox {
return constraints.constrain(new Size(width, height)); return constraints.constrain(new Size(width, height));
} }
if (!constraints.isTight) { // If neither height nor width are specified, use inherent image
// If neither height nor width are specified, use inherent image // dimensions. If only one dimension is specified, adjust the
// dimensions. If only one dimension is specified, adjust the // other dimension to maintain the aspect ratio. In both cases,
// other dimension to maintain the aspect ratio. In both cases, // constrain dimensions first, otherwise we end up losing the
// constrain dimensions first, otherwise we end up losing the // ratio after constraining.
// ratio after constraining. if (_width == null) {
if (_width == null) {
if (_height == null) {
// autosize
double width = constraints.constrainWidth(_image.width.toDouble());
double maxHeight = constraints.constrainHeight(_image.height.toDouble());
double ratio = _image.height / _image.width;
double height = width * ratio;
if (height > maxHeight) {
height = maxHeight;
width = maxHeight / ratio;
}
return constraints.constrain(new Size(width, height));
}
// Determine width from height
double width = _height * _image.width / _image.height;
return constraints.constrain(new Size(width, height));
}
if (_height == null) { if (_height == null) {
// Determine height from width // autosize
double height = _width * _image.height / _image.width; double width = constraints.constrainWidth(_image.width.toDouble());
double maxHeight = constraints.constrainHeight(_image.height.toDouble());
double ratio = _image.height / _image.width;
double height = width * ratio;
if (height > maxHeight) {
height = maxHeight;
width = maxHeight / ratio;
}
return constraints.constrain(new Size(width, height)); return constraints.constrain(new Size(width, height));
} }
// Determine width from height
double width = _height * _image.width / _image.height;
return constraints.constrain(new Size(width, height));
} }
return constraints.constrain(new Size(_image.width.toDouble(), _image.height.toDouble()));
if (_height == null) {
// Determine height from width
double height = _width * _image.height / _image.width;
return constraints.constrain(new Size(width, height));
}
assert(_width != null && _height != null);
return constraints.constrain(new Size(_width, _height));
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment