selection rects, better initial y
This commit is contained in:
parent
4a670e19df
commit
20eb1af118
|
@ -157,16 +157,25 @@ proc typeset*(
|
|||
result += font.typeface.getAdvance(runes[i])
|
||||
result *= font.scale
|
||||
|
||||
var fontUnitInitialY = font.typeface.ascent + font.typeface.lineGap / 2
|
||||
if lineHeight != font.defaultLineHeight:
|
||||
fontUnitInitialY += (
|
||||
(lineHeight / font.scale) -
|
||||
(font.typeface.ascent - font.typeface.descent + font.typeface.lineGap)
|
||||
) / 2
|
||||
let initialY = round(fontUnitInitialY * font.scale)
|
||||
|
||||
var
|
||||
at: Vec2
|
||||
prevCanWrap: int
|
||||
at.y = round((font.typeface.ascent + font.typeface.lineGap / 2) * font.scale)
|
||||
at.y += (lineheight - font.defaultLineHeight) / 2
|
||||
at.y = initialY
|
||||
for i, rune in result.runes:
|
||||
if rune == LF:
|
||||
let advance = font.typeface.getAdvance(SP) * font.scale
|
||||
result.positions[i] = at
|
||||
at.x = 0
|
||||
at.y += lineHeight
|
||||
result.selectionRects[i] = rect(at.x, at.y - initialY, advance, lineHeight)
|
||||
prevCanWrap = 0
|
||||
else:
|
||||
if rune.canWrap():
|
||||
|
@ -185,6 +194,7 @@ proc typeset*(
|
|||
at.x += advance(font, result.runes, j, kerning)
|
||||
|
||||
result.positions[i] = at
|
||||
result.selectionRects[i] = rect(at.x, at.y - initialY, advance, lineHeight)
|
||||
at.x += advance
|
||||
|
||||
iterator paths*(arrangement: Arrangement): Path =
|
||||
|
|
BIN
tests/fonts/diffs/lines2.png
Normal file
BIN
tests/fonts/diffs/lines2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
BIN
tests/fonts/masters/lines2.png
Normal file
BIN
tests/fonts/masters/lines2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
tests/fonts/rendered/lines2.png
Normal file
BIN
tests/fonts/rendered/lines2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.7 KiB |
|
@ -533,3 +533,23 @@ Seventh line""",
|
|||
)
|
||||
|
||||
doDiff(image, "lines1")
|
||||
|
||||
block:
|
||||
var font = readFont("tests/fonts/Roboto-Regular_1.ttf")
|
||||
font.size = 18
|
||||
font.lineHeight = 30
|
||||
|
||||
let image = newImage(200, 150)
|
||||
image.fill(rgba(255, 255, 255, 255))
|
||||
image.fillText(
|
||||
font,
|
||||
"""First line
|
||||
Second line
|
||||
Third line
|
||||
Fourth line
|
||||
Fifth line""",
|
||||
rgba(0, 0, 0, 255),
|
||||
bounds = image.wh
|
||||
)
|
||||
|
||||
doDiff(image, "lines2")
|
||||
|
|
Loading…
Reference in a new issue