internal static void _paintUniformBorderWithRadius(Canvas canvas, Rect rect, BorderSide side, BorderRadius borderRadius) { D.assert(side.style != BorderStyle.none); Paint paint = new Paint(); paint.color = side.color; RRect outer = borderRadius.toRRect(rect); float width = side.width; if (width == 0.0f) { paint.style = PaintingStyle.stroke; paint.strokeWidth = 0.0f; canvas.drawRRect(outer, paint); } else { RRect inner = outer.deflate(width); canvas.drawDRRect(outer, inner, paint); } }
public override bool hitTest(Size size, Offset position, TextDirection textDirection) { D.assert((Offset.zero & size).contains(position)); switch (shape) { case BoxShape.rectangle: if (borderRadius != null) { RRect bounds = borderRadius.toRRect(Offset.zero & size); return(bounds.contains(position)); } return(true); case BoxShape.circle: Offset center = size.center(Offset.zero); float distance = (position - center).distance; return(distance <= Mathf.Min(size.width, size.height) / 2.0); } return(false); }