mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Merge pull request #946 from abarth/infinite_border_radius
BoxDecoration's borderRadius should be able to handle a value of double.INFINITY
This commit is contained in:
commit
92ef38fd46
@ -474,6 +474,14 @@ class BoxPainter {
|
||||
return hasUniformWidth;
|
||||
}
|
||||
|
||||
double _getEffectiveBorderRadius(Rect rect) {
|
||||
double shortestSide = rect.shortestSide;
|
||||
// In principle, we should use shortestSide / 2.0, but we don't want to
|
||||
// run into floating point rounding errors. Instead, we just use
|
||||
// shortestSide and let sky.Canvas do any remaning clamping.
|
||||
return _decoration.borderRadius > shortestSide ? shortestSide : _decoration.borderRadius;
|
||||
}
|
||||
|
||||
void _paintBackgroundColor(sky.Canvas canvas, Rect rect) {
|
||||
if (_decoration.backgroundColor != null ||
|
||||
_decoration.boxShadow != null ||
|
||||
@ -486,10 +494,12 @@ class BoxPainter {
|
||||
canvas.drawCircle(center, radius, _backgroundPaint);
|
||||
break;
|
||||
case Shape.rectangle:
|
||||
if (_decoration.borderRadius == null)
|
||||
if (_decoration.borderRadius == null) {
|
||||
canvas.drawRect(rect, _backgroundPaint);
|
||||
else
|
||||
canvas.drawRRect(new sky.RRect()..setRectXY(rect, _decoration.borderRadius, _decoration.borderRadius), _backgroundPaint);
|
||||
} else {
|
||||
double radius = _getEffectiveBorderRadius(rect);
|
||||
canvas.drawRRect(new sky.RRect()..setRectXY(rect, radius, radius), _backgroundPaint);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -580,7 +590,7 @@ class BoxPainter {
|
||||
assert(_decoration.shape == Shape.rectangle);
|
||||
Color color = _decoration.border.top.color;
|
||||
double width = _decoration.border.top.width;
|
||||
double radius = _decoration.borderRadius;
|
||||
double radius = _getEffectiveBorderRadius(rect);
|
||||
|
||||
sky.RRect outer = new sky.RRect()..setRectXY(rect, radius, radius);
|
||||
sky.RRect inner = new sky.RRect()..setRectXY(rect.deflate(width), radius - width, radius - width);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user