@@ -62,33 +62,66 @@ private void Render()
62
62
63
63
private void DrawText ( SKCanvas canvas , SKPaint paint , SKImageInfo imageInfo )
64
64
{
65
- var splitText = Text . Split ( ' ' ) ;
66
- var wrappedLines = new List < string > ( ) ;
67
- var lineLength = 0f ;
68
- var line = "" ;
69
- foreach ( var word in splitText )
65
+ var lines = new List < string > ( ) ;
66
+ var lastCharWasSpace = false ;
67
+ var lastWordIndex = - 1 ;
68
+ var lastLineIndex = 0 ;
69
+ for ( var i = 0 ; i < Text . Length ; i ++ )
70
70
{
71
- var wordWithSpace = $ "{ word } ";
72
- var wordWithSpaceLength = paint . MeasureText ( wordWithSpace ) ;
73
- if ( lineLength + wordWithSpaceLength > imageInfo . Width )
71
+ var c = Text [ i ] ;
72
+ if ( c == ' ' )
74
73
{
75
- wrappedLines . Add ( line ) ;
76
- line = wordWithSpace ;
77
- lineLength = wordWithSpaceLength ;
74
+ if ( ! lastCharWasSpace )
75
+ lastWordIndex = i ;
76
+ lastCharWasSpace = true ;
78
77
}
79
78
else
80
79
{
81
- line += wordWithSpace ;
82
- lineLength += wordWithSpaceLength ;
80
+ lastCharWasSpace = false ;
81
+ var currentText = Text . Substring ( lastLineIndex , ( i + 1 ) - lastLineIndex ) ;
82
+ var length = paint . MeasureText ( currentText ) ;
83
+ if ( length > imageInfo . Width )
84
+ {
85
+ var cutText = currentText . Substring ( 0 , currentText . Length - 1 ) ;
86
+ if ( lastWordIndex != - 1 )
87
+ {
88
+ var textAtLastWord = Text . Substring ( lastLineIndex , lastWordIndex - lastLineIndex ) ;
89
+ var lastWordLength = paint . MeasureText ( textAtLastWord ) ;
90
+ if ( lastWordLength <= imageInfo . Width )
91
+ {
92
+ lines . Add ( textAtLastWord ) ;
93
+ lastLineIndex = lastWordIndex + 1 ;
94
+ lastWordIndex = - 1 ;
95
+ lastCharWasSpace = false ;
96
+ }
97
+ else
98
+ {
99
+ lines . Add ( cutText ) ;
100
+ lastLineIndex = i ;
101
+ lastWordIndex = - 1 ;
102
+ lastCharWasSpace = false ;
103
+ }
104
+ }
105
+ else
106
+ {
107
+ lines . Add ( cutText ) ;
108
+ lastLineIndex = i ;
109
+ lastWordIndex = - 1 ;
110
+ lastCharWasSpace = false ;
111
+ }
112
+ }
83
113
}
84
114
}
85
115
86
- wrappedLines . Add ( line ) ;
116
+ var lastLineLength = Text . Length - lastLineIndex ;
117
+ if ( lastLineLength > 0 )
118
+ {
119
+ lines . Add ( Text . Substring ( lastLineIndex ) ) ;
120
+ }
87
121
88
122
var y = FontSize ;
89
- foreach ( var wrappedLine in wrappedLines )
123
+ foreach ( var wrappedLine in lines )
90
124
{
91
- Debug . Log ( wrappedLine ) ;
92
125
canvas . DrawText ( wrappedLine , 0f , y , paint ) ;
93
126
y += FontSize ;
94
127
}
0 commit comments