Showing
4 changed files
with
75 additions
and
67 deletions
| @@ -21,7 +21,43 @@ import 'border_radius.dart'; | @@ -21,7 +21,43 @@ import 'border_radius.dart'; | ||
| 21 | import 'decoration.dart'; | 21 | import 'decoration.dart'; |
| 22 | import 'widget.dart'; | 22 | import 'widget.dart'; |
| 23 | 23 | ||
| 24 | -enum BorderStyle { none, solid, dashed, dotted } | 24 | +class BorderStyle { |
| 25 | + const BorderStyle({ | ||
| 26 | + this.paint = true, | ||
| 27 | + this.pattern, | ||
| 28 | + this.phase = 0, | ||
| 29 | + }); | ||
| 30 | + | ||
| 31 | + static const none = BorderStyle(paint: false); | ||
| 32 | + static const solid = BorderStyle(); | ||
| 33 | + static const dashed = BorderStyle(pattern: <int>[3, 3]); | ||
| 34 | + static const dotted = BorderStyle(pattern: <int>[1, 1]); | ||
| 35 | + | ||
| 36 | + /// Paint this line | ||
| 37 | + final bool paint; | ||
| 38 | + | ||
| 39 | + /// Lengths of alternating dashes and gaps. The numbers shall be nonnegative | ||
| 40 | + /// and not all zero. | ||
| 41 | + final List<num>? pattern; | ||
| 42 | + | ||
| 43 | + /// Specify the distance into the dash pattern at which to start the dash. | ||
| 44 | + final int phase; | ||
| 45 | + | ||
| 46 | + void setStyle(Context context) { | ||
| 47 | + if (paint && pattern != null) { | ||
| 48 | + context.canvas | ||
| 49 | + ..saveContext() | ||
| 50 | + ..setLineCap(PdfLineCap.butt) | ||
| 51 | + ..setLineDashPattern(pattern!, phase); | ||
| 52 | + } | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + void unsetStyle(Context context) { | ||
| 56 | + if (paint && pattern != null) { | ||
| 57 | + context.canvas.restoreContext(); | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | +} | ||
| 25 | 61 | ||
| 26 | @immutable | 62 | @immutable |
| 27 | abstract class BoxBorder { | 63 | abstract class BoxBorder { |
| @@ -41,51 +77,21 @@ abstract class BoxBorder { | @@ -41,51 +77,21 @@ abstract class BoxBorder { | ||
| 41 | BorderRadius? borderRadius, | 77 | BorderRadius? borderRadius, |
| 42 | }); | 78 | }); |
| 43 | 79 | ||
| 44 | - static void setStyle(Context context, BorderStyle style) { | ||
| 45 | - switch (style) { | ||
| 46 | - case BorderStyle.none: | ||
| 47 | - case BorderStyle.solid: | ||
| 48 | - break; | ||
| 49 | - case BorderStyle.dashed: | ||
| 50 | - context.canvas | ||
| 51 | - ..saveContext() | ||
| 52 | - ..setLineDashPattern(const <int>[3, 3]); | ||
| 53 | - break; | ||
| 54 | - case BorderStyle.dotted: | ||
| 55 | - context.canvas | ||
| 56 | - ..saveContext() | ||
| 57 | - ..setLineDashPattern(const <int>[1, 1]); | ||
| 58 | - break; | ||
| 59 | - } | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - static void unsetStyle(Context context, BorderStyle style) { | ||
| 63 | - switch (style) { | ||
| 64 | - case BorderStyle.none: | ||
| 65 | - case BorderStyle.solid: | ||
| 66 | - break; | ||
| 67 | - case BorderStyle.dashed: | ||
| 68 | - case BorderStyle.dotted: | ||
| 69 | - context.canvas.restoreContext(); | ||
| 70 | - break; | ||
| 71 | - } | ||
| 72 | - } | ||
| 73 | - | ||
| 74 | static void _paintUniformBorderWithCircle( | 80 | static void _paintUniformBorderWithCircle( |
| 75 | Context context, PdfRect box, BorderSide side) { | 81 | Context context, PdfRect box, BorderSide side) { |
| 76 | - setStyle(context, side.style); | 82 | + side.style.setStyle(context); |
| 77 | context.canvas | 83 | context.canvas |
| 78 | ..setStrokeColor(side.color) | 84 | ..setStrokeColor(side.color) |
| 79 | ..setLineWidth(side.width) | 85 | ..setLineWidth(side.width) |
| 80 | ..drawEllipse(box.x + box.width / 2.0, box.y + box.height / 2.0, | 86 | ..drawEllipse(box.x + box.width / 2.0, box.y + box.height / 2.0, |
| 81 | box.width / 2.0, box.height / 2.0) | 87 | box.width / 2.0, box.height / 2.0) |
| 82 | ..strokePath(); | 88 | ..strokePath(); |
| 83 | - unsetStyle(context, side.style); | 89 | + side.style.unsetStyle(context); |
| 84 | } | 90 | } |
| 85 | 91 | ||
| 86 | static void _paintUniformBorderWithRadius(Context context, PdfRect box, | 92 | static void _paintUniformBorderWithRadius(Context context, PdfRect box, |
| 87 | BorderSide side, BorderRadius borderRadius) { | 93 | BorderSide side, BorderRadius borderRadius) { |
| 88 | - setStyle(context, side.style); | 94 | + side.style.setStyle(context); |
| 89 | context.canvas | 95 | context.canvas |
| 90 | ..setLineJoin(PdfLineJoin.miter) | 96 | ..setLineJoin(PdfLineJoin.miter) |
| 91 | ..setMiterLimit(4) | 97 | ..setMiterLimit(4) |
| @@ -93,12 +99,12 @@ abstract class BoxBorder { | @@ -93,12 +99,12 @@ abstract class BoxBorder { | ||
| 93 | ..setLineWidth(side.width); | 99 | ..setLineWidth(side.width); |
| 94 | borderRadius.paint(context, box); | 100 | borderRadius.paint(context, box); |
| 95 | context.canvas.strokePath(); | 101 | context.canvas.strokePath(); |
| 96 | - unsetStyle(context, side.style); | 102 | + side.style.unsetStyle(context); |
| 97 | } | 103 | } |
| 98 | 104 | ||
| 99 | static void _paintUniformBorderWithRectangle( | 105 | static void _paintUniformBorderWithRectangle( |
| 100 | Context context, PdfRect box, BorderSide side) { | 106 | Context context, PdfRect box, BorderSide side) { |
| 101 | - setStyle(context, side.style); | 107 | + side.style.setStyle(context); |
| 102 | context.canvas | 108 | context.canvas |
| 103 | ..setLineJoin(PdfLineJoin.miter) | 109 | ..setLineJoin(PdfLineJoin.miter) |
| 104 | ..setMiterLimit(4) | 110 | ..setMiterLimit(4) |
| @@ -106,7 +112,7 @@ abstract class BoxBorder { | @@ -106,7 +112,7 @@ abstract class BoxBorder { | ||
| 106 | ..setLineWidth(side.width) | 112 | ..setLineWidth(side.width) |
| 107 | ..drawBox(box) | 113 | ..drawBox(box) |
| 108 | ..strokePath(); | 114 | ..strokePath(); |
| 109 | - unsetStyle(context, side.style); | 115 | + side.style.unsetStyle(context); |
| 110 | } | 116 | } |
| 111 | } | 117 | } |
| 112 | 118 | ||
| @@ -251,44 +257,44 @@ class Border extends BoxBorder { | @@ -251,44 +257,44 @@ class Border extends BoxBorder { | ||
| 251 | ..setMiterLimit(4) | 257 | ..setMiterLimit(4) |
| 252 | ..setLineJoin(PdfLineJoin.miter); | 258 | ..setLineJoin(PdfLineJoin.miter); |
| 253 | 259 | ||
| 254 | - if (top.style != BorderStyle.none) { | ||
| 255 | - BoxBorder.setStyle(context, top.style); | 260 | + if (top.style.paint) { |
| 261 | + top.style.setStyle(context); | ||
| 256 | context.canvas | 262 | context.canvas |
| 257 | ..setStrokeColor(top.color) | 263 | ..setStrokeColor(top.color) |
| 258 | ..setLineWidth(top.width) | 264 | ..setLineWidth(top.width) |
| 259 | ..drawLine(box.left, box.top, box.right, box.top) | 265 | ..drawLine(box.left, box.top, box.right, box.top) |
| 260 | ..strokePath(); | 266 | ..strokePath(); |
| 261 | - BoxBorder.unsetStyle(context, top.style); | 267 | + top.style.unsetStyle(context); |
| 262 | } | 268 | } |
| 263 | 269 | ||
| 264 | - if (right.style != BorderStyle.none) { | ||
| 265 | - BoxBorder.setStyle(context, right.style); | 270 | + if (right.style.paint) { |
| 271 | + right.style.setStyle(context); | ||
| 266 | context.canvas | 272 | context.canvas |
| 267 | ..setStrokeColor(right.color) | 273 | ..setStrokeColor(right.color) |
| 268 | ..setLineWidth(right.width) | 274 | ..setLineWidth(right.width) |
| 269 | ..drawLine(box.right, box.top, box.right, box.bottom) | 275 | ..drawLine(box.right, box.top, box.right, box.bottom) |
| 270 | ..strokePath(); | 276 | ..strokePath(); |
| 271 | - BoxBorder.unsetStyle(context, right.style); | 277 | + right.style.unsetStyle(context); |
| 272 | } | 278 | } |
| 273 | 279 | ||
| 274 | - if (bottom.style != BorderStyle.none) { | ||
| 275 | - BoxBorder.setStyle(context, bottom.style); | 280 | + if (bottom.style.paint) { |
| 281 | + bottom.style.setStyle(context); | ||
| 276 | context.canvas | 282 | context.canvas |
| 277 | ..setStrokeColor(bottom.color) | 283 | ..setStrokeColor(bottom.color) |
| 278 | ..setLineWidth(bottom.width) | 284 | ..setLineWidth(bottom.width) |
| 279 | ..drawLine(box.right, box.bottom, box.left, box.bottom) | 285 | ..drawLine(box.right, box.bottom, box.left, box.bottom) |
| 280 | ..strokePath(); | 286 | ..strokePath(); |
| 281 | - BoxBorder.unsetStyle(context, bottom.style); | 287 | + bottom.style.unsetStyle(context); |
| 282 | } | 288 | } |
| 283 | 289 | ||
| 284 | - if (left.style != BorderStyle.none) { | ||
| 285 | - BoxBorder.setStyle(context, left.style); | 290 | + if (left.style.paint) { |
| 291 | + left.style.setStyle(context); | ||
| 286 | context.canvas | 292 | context.canvas |
| 287 | ..setStrokeColor(left.color) | 293 | ..setStrokeColor(left.color) |
| 288 | ..setLineWidth(left.width) | 294 | ..setLineWidth(left.width) |
| 289 | ..drawLine(box.left, box.top, box.left, box.bottom) | 295 | ..drawLine(box.left, box.top, box.left, box.bottom) |
| 290 | ..strokePath(); | 296 | ..strokePath(); |
| 291 | - BoxBorder.unsetStyle(context, left.style); | 297 | + left.style.unsetStyle(context); |
| 292 | } | 298 | } |
| 293 | } | 299 | } |
| 294 | } | 300 | } |
| @@ -270,45 +270,45 @@ class GridPaper extends SingleChildWidget { | @@ -270,45 +270,45 @@ class GridPaper extends SingleChildWidget { | ||
| 270 | n++; | 270 | n++; |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | - if (border.left.style != BorderStyle.none) { | ||
| 274 | - BoxBorder.setStyle(context, border.left.style); | 273 | + if (border.left.style.paint) { |
| 274 | + border.left.style.setStyle(context); | ||
| 275 | context.canvas | 275 | context.canvas |
| 276 | ..setStrokeColor(border.left.color) | 276 | ..setStrokeColor(border.left.color) |
| 277 | ..setLineWidth(border.left.width) | 277 | ..setLineWidth(border.left.width) |
| 278 | ..drawLine(box!.left + margin.left, box!.top, box!.left + margin.left, | 278 | ..drawLine(box!.left + margin.left, box!.top, box!.left + margin.left, |
| 279 | box!.bottom) | 279 | box!.bottom) |
| 280 | ..strokePath(); | 280 | ..strokePath(); |
| 281 | - BoxBorder.unsetStyle(context, border.left.style); | 281 | + border.left.style.unsetStyle(context); |
| 282 | } | 282 | } |
| 283 | - if (border.right.style != BorderStyle.none) { | ||
| 284 | - BoxBorder.setStyle(context, border.right.style); | 283 | + if (border.right.style.paint) { |
| 284 | + border.right.style.setStyle(context); | ||
| 285 | context.canvas | 285 | context.canvas |
| 286 | ..setStrokeColor(border.right.color) | 286 | ..setStrokeColor(border.right.color) |
| 287 | ..setLineWidth(border.right.width) | 287 | ..setLineWidth(border.right.width) |
| 288 | ..drawLine(box!.right - margin.right, box!.top, | 288 | ..drawLine(box!.right - margin.right, box!.top, |
| 289 | box!.right - margin.right, box!.bottom) | 289 | box!.right - margin.right, box!.bottom) |
| 290 | ..strokePath(); | 290 | ..strokePath(); |
| 291 | - BoxBorder.unsetStyle(context, border.right.style); | 291 | + border.right.style.unsetStyle(context); |
| 292 | } | 292 | } |
| 293 | - if (border.top.style != BorderStyle.none) { | ||
| 294 | - BoxBorder.setStyle(context, border.top.style); | 293 | + if (border.top.style.paint) { |
| 294 | + border.top.style.setStyle(context); | ||
| 295 | context.canvas | 295 | context.canvas |
| 296 | ..setStrokeColor(border.top.color) | 296 | ..setStrokeColor(border.top.color) |
| 297 | ..setLineWidth(border.top.width) | 297 | ..setLineWidth(border.top.width) |
| 298 | ..drawLine( | 298 | ..drawLine( |
| 299 | box!.left, box!.top - margin.top, box!.right, box!.top - margin.top) | 299 | box!.left, box!.top - margin.top, box!.right, box!.top - margin.top) |
| 300 | ..strokePath(); | 300 | ..strokePath(); |
| 301 | - BoxBorder.unsetStyle(context, border.top.style); | 301 | + border.top.style.unsetStyle(context); |
| 302 | } | 302 | } |
| 303 | - if (border.bottom.style != BorderStyle.none) { | ||
| 304 | - BoxBorder.setStyle(context, border.bottom.style); | 303 | + if (border.bottom.style.paint) { |
| 304 | + border.bottom.style.setStyle(context); | ||
| 305 | context.canvas | 305 | context.canvas |
| 306 | ..setStrokeColor(border.bottom.color) | 306 | ..setStrokeColor(border.bottom.color) |
| 307 | ..setLineWidth(border.bottom.width) | 307 | ..setLineWidth(border.bottom.width) |
| 308 | ..drawLine(box!.left, box!.bottom + margin.bottom, box!.right, | 308 | ..drawLine(box!.left, box!.bottom + margin.bottom, box!.right, |
| 309 | box!.bottom + margin.bottom) | 309 | box!.bottom + margin.bottom) |
| 310 | ..strokePath(); | 310 | ..strokePath(); |
| 311 | - BoxBorder.unsetStyle(context, border.bottom.style); | 311 | + border.bottom.style.unsetStyle(context); |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | context.canvas.restoreContext(); | 314 | context.canvas.restoreContext(); |
| @@ -105,8 +105,8 @@ class TableBorder extends Border { | @@ -105,8 +105,8 @@ class TableBorder extends Border { | ||
| 105 | [List<double?>? widths, List<double>? heights]) { | 105 | [List<double?>? widths, List<double>? heights]) { |
| 106 | super.paint(context, box); | 106 | super.paint(context, box); |
| 107 | 107 | ||
| 108 | - if (verticalInside.style != BorderStyle.none) { | ||
| 109 | - BoxBorder.setStyle(context, verticalInside.style); | 108 | + if (verticalInside.style.paint) { |
| 109 | + verticalInside.style.setStyle(context); | ||
| 110 | var offset = box.x; | 110 | var offset = box.x; |
| 111 | for (var width in widths!.sublist(0, widths.length - 1)) { | 111 | for (var width in widths!.sublist(0, widths.length - 1)) { |
| 112 | offset += width!; | 112 | offset += width!; |
| @@ -117,11 +117,11 @@ class TableBorder extends Border { | @@ -117,11 +117,11 @@ class TableBorder extends Border { | ||
| 117 | context.canvas.setLineWidth(verticalInside.width); | 117 | context.canvas.setLineWidth(verticalInside.width); |
| 118 | context.canvas.strokePath(); | 118 | context.canvas.strokePath(); |
| 119 | 119 | ||
| 120 | - BoxBorder.unsetStyle(context, verticalInside.style); | 120 | + verticalInside.style.unsetStyle(context); |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | - if (horizontalInside.style != BorderStyle.none) { | ||
| 124 | - BoxBorder.setStyle(context, verticalInside.style); | 123 | + if (horizontalInside.style.paint) { |
| 124 | + horizontalInside.style.setStyle(context); | ||
| 125 | var offset = box.top; | 125 | var offset = box.top; |
| 126 | for (var height in heights!.sublist(0, heights.length - 1)) { | 126 | for (var height in heights!.sublist(0, heights.length - 1)) { |
| 127 | offset -= height; | 127 | offset -= height; |
| @@ -131,7 +131,7 @@ class TableBorder extends Border { | @@ -131,7 +131,7 @@ class TableBorder extends Border { | ||
| 131 | context.canvas.setStrokeColor(verticalInside.color); | 131 | context.canvas.setStrokeColor(verticalInside.color); |
| 132 | context.canvas.setLineWidth(verticalInside.width); | 132 | context.canvas.setLineWidth(verticalInside.width); |
| 133 | context.canvas.strokePath(); | 133 | context.canvas.strokePath(); |
| 134 | - BoxBorder.unsetStyle(context, verticalInside.style); | 134 | + horizontalInside.style.unsetStyle(context); |
| 135 | } | 135 | } |
| 136 | } | 136 | } |
| 137 | } | 137 | } |
-
Please register or login to post a comment