Skip to content

Commit

Permalink
Merge pull request #596 from kinha08/main
Browse files Browse the repository at this point in the history
fix breaking line with newline character when wrap is true
  • Loading branch information
brendan-duncan authored Dec 2, 2023
2 parents 698ebf5 + 0d2615f commit 1ff7ad7
Showing 1 changed file with 59 additions and 49 deletions.
108 changes: 59 additions & 49 deletions lib/src/draw/draw_string.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,60 +44,67 @@ Image drawString(Image image, String string,
var sy = y ?? (image.height / 2).round() - (stringHeight / 2).round();

if (wrap) {
final words = string.split(RegExp(r"\s+"));
var subString = "";
var x2 = sx;

for (var w in words) {
final ws = StringBuffer()
..write(w)
..write(' ');
w = ws.toString();
final chars = w.codeUnits;
var wordWidth = 0;
for (var c in chars) {
if (!font.characters.containsKey(c)) {
wordWidth += font.base ~/ 2;
continue;
final sentences = string.split(RegExp(r'\n'));

for (var sentence in sentences) {
final words = sentence.split(RegExp(r"\s+"));
var subString = "";
var x2 = sx;

for (var w in words) {
final ws = StringBuffer()
..write(w)
..write(' ');
w = ws.toString();
final chars = w.codeUnits;
var wordWidth = 0;
for (var c in chars) {
if (c == 10) break;
if (!font.characters.containsKey(c)) {
wordWidth += font.base ~/ 2;
continue;
}
final ch = font.characters[c]!;
wordWidth += ch.xAdvance;
}
final ch = font.characters[c]!;
wordWidth += ch.xAdvance;
}
if ((x2 + wordWidth) > image.width) {
// If there is a word that won't fit the starting x, stop drawing
if ((sx == x2) || (sx + wordWidth > image.width)) {
return image;
if ((x2 + wordWidth) > image.width) {
// If there is a word that won't fit the starting x, stop drawing
if ((sx == x2) || (sx + wordWidth > image.width)) {
return image;
}

drawString(image, subString,
font: font,
x: sx,
y: sy,
color: color,
mask: mask,
maskChannel: maskChannel,
rightJustify: rightJustify);

subString = "";
x2 = sx;
sy += stringHeight;
subString += w;
x2 += wordWidth;
} else {
subString += w;
x2 += wordWidth;
}

drawString(image, subString,
font: font,
x: sx,
y: sy,
color: color,
mask: mask,
maskChannel: maskChannel,
rightJustify: rightJustify);

subString = "";
x2 = sx;
sy += stringHeight;
subString += w;
x2 += wordWidth;
} else {
subString += w;
x2 += wordWidth;
if (subString.isNotEmpty) {
drawString(image, subString,
font: font,
x: sx,
y: sy,
color: color,
mask: mask,
maskChannel: maskChannel,
rightJustify: rightJustify);
}
}

if (subString.isNotEmpty) {
drawString(image, subString,
font: font,
x: sx,
y: sy,
color: color,
mask: mask,
maskChannel: maskChannel,
rightJustify: rightJustify);
}
sy += stringHeight;
}

return image;
Expand All @@ -106,8 +113,11 @@ Image drawString(Image image, String string,
final origX = sx;
final substrings = string.split(RegExp(r"[\n|\r]"));

// print(substrings);

for (var ss in substrings) {
final chars = ss.codeUnits;
// print("$ss = $chars");
if (rightJustify == true) {
for (var c in chars) {
if (!font.characters.containsKey(c)) {
Expand Down

0 comments on commit 1ff7ad7

Please sign in to comment.