David PHAM-VAN

Improve BoxBorder correctness

@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 - Document.save() now returns a Future 12 - Document.save() now returns a Future
13 - Add Widget.draw() to paint any widget on a canvas 13 - Add Widget.draw() to paint any widget on a canvas
14 - Improve Chart labels 14 - Improve Chart labels
  15 +- Improve BoxBorder correctness
15 16
16 ## 1.13.0 17 ## 1.13.0
17 18
@@ -582,6 +582,7 @@ class PdfGraphics { @@ -582,6 +582,7 @@ class PdfGraphics {
582 582
583 /// Set line joint miter limit, applies if the 583 /// Set line joint miter limit, applies if the
584 void setMiterLimit(double limit) { 584 void setMiterLimit(double limit) {
  585 + assert(limit >= 1.0);
585 PdfNum(limit).output(buf); 586 PdfNum(limit).output(buf);
586 buf.putString(' M\n'); 587 buf.putString(' M\n');
587 } 588 }
@@ -14,6 +14,8 @@ @@ -14,6 +14,8 @@
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 16
  17 +import 'dart:math' as math;
  18 +
17 import 'package:pdf/pdf.dart'; 19 import 'package:pdf/pdf.dart';
18 import 'package:xml/xml.dart'; 20 import 'package:xml/xml.dart';
19 21
@@ -225,7 +227,7 @@ class SvgPath extends SvgOperation { @@ -225,7 +227,7 @@ class SvgPath extends SvgOperation {
225 ..drawShape(d) 227 ..drawShape(d)
226 ..setLineCap(brush.strokeLineCap) 228 ..setLineCap(brush.strokeLineCap)
227 ..setLineJoin(brush.strokeLineJoin) 229 ..setLineJoin(brush.strokeLineJoin)
228 - ..setMiterLimit(brush.strokeMiterLimit) 230 + ..setMiterLimit(math.max(1.0, brush.strokeMiterLimit))
229 ..setLineDashPattern( 231 ..setLineDashPattern(
230 brush.strokeDashArray, brush.strokeDashOffset.toInt()) 232 brush.strokeDashArray, brush.strokeDashOffset.toInt())
231 ..setLineWidth(brush.strokeWidth.sizeValue) 233 ..setLineWidth(brush.strokeWidth.sizeValue)
@@ -87,6 +87,8 @@ abstract class BoxBorder { @@ -87,6 +87,8 @@ abstract class BoxBorder {
87 BorderSide side, BorderRadius borderRadius) { 87 BorderSide side, BorderRadius borderRadius) {
88 _setStyle(context, side.style); 88 _setStyle(context, side.style);
89 context.canvas 89 context.canvas
  90 + ..setLineJoin(PdfLineJoin.miter)
  91 + ..setMiterLimit(4)
90 ..setStrokeColor(side.color) 92 ..setStrokeColor(side.color)
91 ..setLineWidth(side.width); 93 ..setLineWidth(side.width);
92 borderRadius.paint(context, box); 94 borderRadius.paint(context, box);
@@ -98,6 +100,8 @@ abstract class BoxBorder { @@ -98,6 +100,8 @@ abstract class BoxBorder {
98 Context context, PdfRect box, BorderSide side) { 100 Context context, PdfRect box, BorderSide side) {
99 _setStyle(context, side.style); 101 _setStyle(context, side.style);
100 context.canvas 102 context.canvas
  103 + ..setLineJoin(PdfLineJoin.miter)
  104 + ..setMiterLimit(4)
101 ..setStrokeColor(side.color) 105 ..setStrokeColor(side.color)
102 ..setLineWidth(side.width) 106 ..setLineWidth(side.width)
103 ..drawBox(box) 107 ..drawBox(box)
@@ -254,7 +258,10 @@ class Border extends BoxBorder { @@ -254,7 +258,10 @@ class Border extends BoxBorder {
254 assert(borderRadius == null, 258 assert(borderRadius == null,
255 'A borderRadius can only be given for a uniform Border.'); 259 'A borderRadius can only be given for a uniform Border.');
256 260
257 - context.canvas.setLineCap(PdfLineCap.square); 261 + context.canvas
  262 + ..setLineCap(PdfLineCap.square)
  263 + ..setMiterLimit(4)
  264 + ..setLineJoin(PdfLineJoin.miter);
258 265
259 if (top.style != BorderStyle.none) { 266 if (top.style != BorderStyle.none) {
260 BoxBorder._setStyle(context, top.style); 267 BoxBorder._setStyle(context, top.style);