@@ -36,12 +36,18 @@ class WavyBoxPainter extends CustomPainter {
3636 WavyBoxPainter ({
3737 required this .text,
3838 required this .borderColor,
39+ required this .padding,
40+ this .nHorizontalSegments = 12 ,
41+ this .nVerticalSegments = 3 ,
3942 super .repaint,
4043 });
4144 // TODO(everyone): add padding?
4245 // TODO(everyone): add fill color?
4346 final Text text;
4447 final Color borderColor;
48+ final EdgeInsets padding;
49+ final int nHorizontalSegments;
50+ final int nVerticalSegments;
4551
4652 @override
4753 void paint (Canvas canvas, Size size) {
@@ -63,44 +69,44 @@ class WavyBoxPainter extends CustomPainter {
6369 final nLines = heightFactor.ceil ();
6470 textHeight = nLines * textHeight;
6571
66- const nHorizontalSegments = 10 ;
67- final availableWidth = min (textWidth , size.width) ;
68- final lengthSegment = ( availableWidth / nHorizontalSegments). ceil () ;
69- final nVerticalSegments = (textHeight / lengthSegment). ceil () ;
72+ final availableWidth = min (textWidth, size.width) + padding.horizontal ;
73+ final availableHeight = max (textHeight , size.height) + padding.vertical ;
74+ final widthHorizontalSegment = availableWidth / nHorizontalSegments;
75+ final heightVerticalSegment = availableHeight / nVerticalSegments ;
7076
7177 const arcHeight = - 10.0 ;
7278 const weight = 1.0 ;
73- var lastX2 = 0.0 ;
79+ var lastX2 = 0.0 - padding.left ;
7480
7581 // TODO(everyone): Fix corners, maybe with [arcTo]?
76- final path = Path ()..moveTo (0 , 0 );
82+ final path = Path ()..moveTo (0 - padding.left , 0 - padding.top );
7783
7884 // Upper left to upper right
7985 for (var i = 1 ; i <= nHorizontalSegments; i++ ) {
80- final x2 = i * lengthSegment / 1.0 ;
81- path.conicTo (lastX2 + lengthSegment / 2 , arcHeight, x2 / 1.0 , 0 , weight);
86+ final x2 = ( i * widthHorizontalSegment / 1.0 ) - padding.left ;
87+ path.conicTo (lastX2 + widthHorizontalSegment / 2 , arcHeight - padding.top , x2 / 1.0 , 0 - padding.top , weight);
8288 lastX2 = x2;
8389 }
8490
8591 // Upper right to lower right
86- double lastY2 = 0 ;
92+ var lastY2 = 0 - padding.top ;
8793 for (var i = 1 ; i <= nVerticalSegments; i++ ) {
88- final y2 = i * lengthSegment / 1.0 ;
89- path.conicTo (lastX2 - arcHeight, lastY2 + lengthSegment / 2 , lastX2, y2, weight);
94+ final y2 = ( i * heightVerticalSegment / 1.0 ) - padding.top ;
95+ path.conicTo (lastX2 - arcHeight, lastY2 + heightVerticalSegment / 2 , lastX2, y2, weight);
9096 lastY2 = y2;
9197 }
9298
9399 // Lower right to lower left
94100 for (var i = nHorizontalSegments - 1 ; i >= 0 ; i-- ) {
95- final x2 = i * lengthSegment / 1.0 ;
96- path.conicTo (lastX2 - lengthSegment / 2 , lastY2 - arcHeight, x2 / 1.0 , lastY2, weight);
101+ final x2 = ( i * widthHorizontalSegment / 1.0 ) - padding.left ;
102+ path.conicTo (lastX2 - widthHorizontalSegment / 2 , lastY2 - arcHeight, x2 / 1.0 , lastY2, weight);
97103 lastX2 = x2;
98104 }
99105
100106 // Lower left to upper right
101107 for (var i = nVerticalSegments - 1 ; i >= 0 ; i-- ) {
102- final y2 = i * lengthSegment / 1.0 ;
103- path.conicTo (arcHeight, y2 + lengthSegment / 2 , lastX2 , y2, weight);
108+ final y2 = ( i * heightVerticalSegment / 1.0 ) - padding.top ;
109+ path.conicTo (arcHeight - padding.left , y2 + heightVerticalSegment / 2 , 0 - padding.left , y2, weight);
104110 lastY2 = y2;
105111 }
106112
0 commit comments