From 05e23bd55c67f636c628a105ca45e19408740ec6 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Wed, 6 Mar 2024 08:15:39 -0800 Subject: resources/images: Retain newlines with text overlays Closes #12206 --- resources/images/text.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/resources/images/text.go b/resources/images/text.go index cc67a5d1d..2d3370c61 100644 --- a/resources/images/text.go +++ b/resources/images/text.go @@ -91,15 +91,19 @@ func (f textFilter) Draw(dst draw.Image, src image.Image, options *gift.Options) y := f.y d.Dot = fixed.P(f.x, f.y) - // Draw text and break line at max width - parts := strings.Fields(f.text) - for _, str := range parts { - strWith := font.MeasureString(face, str) - if (d.Dot.X.Ceil() + strWith.Ceil()) >= maxWidth { - y = y + fontHeight + f.linespacing - d.Dot = fixed.P(f.x, y) + // Draw text line by line, breaking each line at the maximum width. + f.text = strings.ReplaceAll(f.text, "\r", "") + for _, line := range strings.Split(f.text, "\n") { + for _, str := range strings.Fields(line) { + strWidth := font.MeasureString(face, str) + if (d.Dot.X.Ceil() + strWidth.Ceil()) >= maxWidth { + y = y + fontHeight + f.linespacing + d.Dot = fixed.P(f.x, y) + } + d.DrawString(str + " ") } - d.DrawString(str + " ") + y = y + fontHeight + f.linespacing + d.Dot = fixed.P(f.x, y) } } -- cgit v1.2.3