From 2365004c9c5e9f4541927f8778ea27e16bdf9e90 Mon Sep 17 00:00:00 2001 From: treeform Date: Sun, 20 Mar 2022 13:04:25 -0700 Subject: [PATCH] Seperate the idea layout and pixel bounds. --- src/pixie/contexts.nim | 2 +- src/pixie/fonts.nim | 61 +++++++++++++++++++++++++++++--- tests/fonts/PinyonScript.ttf | Bin 0 -> 62124 bytes tests/fonts/diffs/spans7.png | Bin 0 -> 14031 bytes tests/fonts/masters/spans7.png | Bin 0 -> 8621 bytes tests/fonts/rendered/spans7.png | Bin 0 -> 17375 bytes tests/test_fonts.nim | 46 ++++++++++++++++++++++-- 7 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 tests/fonts/PinyonScript.ttf create mode 100644 tests/fonts/diffs/spans7.png create mode 100644 tests/fonts/masters/spans7.png create mode 100644 tests/fonts/rendered/spans7.png diff --git a/src/pixie/contexts.nim b/src/pixie/contexts.nim index 85a9f0b..7ba9e4a 100644 --- a/src/pixie/contexts.nim +++ b/src/pixie/contexts.nim @@ -482,7 +482,7 @@ proc measureText*(ctx: Context, text: string): TextMetrics {.raises: [PixieError ## text (such as its width, for example). let font = newFont(ctx) - bounds = typeset(font, text).computeBounds() + bounds = typeset(font, text).layoutBounds() result.width = bounds.x proc getLineDash*(ctx: Context): seq[float32] {.inline, raises: [].} = diff --git a/src/pixie/fonts.nim b/src/pixie/fonts.nim index 4a5bf7e..bb8561b 100644 --- a/src/pixie/fonts.nim +++ b/src/pixie/fonts.nim @@ -467,7 +467,7 @@ proc typeset*( ## wrap: enable/disable text wrapping typeset(@[newSpan(text, font)], bounds, hAlign, vAlign, wrap) -proc computeBounds*(arrangement: Arrangement): Vec2 {.raises: [].} = +proc layoutBounds*(arrangement: Arrangement): Vec2 {.raises: [].} = ## Computes the width and height of the arrangement in pixels. if arrangement.runes.len > 0: for i in 0 ..< arrangement.runes.len: @@ -481,13 +481,13 @@ proc computeBounds*(arrangement: Arrangement): Vec2 {.raises: [].} = # If the text ends with a new line, we need add another line height. result.y += finalRect.h -proc computeBounds*(font: Font, text: string): Vec2 {.inline, raises: [].} = +proc layoutBounds*(font: Font, text: string): Vec2 {.inline, raises: [].} = ## Computes the width and height of the text in pixels. - font.typeset(text).computeBounds() + font.typeset(text).layoutBounds() -proc computeBounds*(spans: seq[Span]): Vec2 {.inline, raises: [].} = +proc layoutBounds*(spans: seq[Span]): Vec2 {.inline, raises: [].} = ## Computes the width and height of the spans in pixels. - typeset(spans).computeBounds() + typeset(spans).layoutBounds() proc parseOtf*(buf: string): Typeface {.raises: [PixieError].} = result = Typeface() @@ -583,6 +583,57 @@ proc textUber( else: # target is Mask target.fillPath(path, transform) +proc computeBounds*( + arrangement: Arrangement, +): Rect = + var + fullPath = newPath() + line: int + for spanIndex, (start, stop) in arrangement.spans: + let + font = arrangement.fonts[spanIndex] + underlineThickness = font.typeface.underlineThickness * font.scale + underlinePosition = font.typeface.underlinePosition * font.scale + strikeoutThickness = font.typeface.strikeoutThickness * font.scale + strikeoutPosition = font.typeface.strikeoutPosition * font.scale + for runeIndex in start .. stop: + let position = arrangement.positions[runeIndex] + + let path = font.typeface.getGlyphPath(arrangement.runes[runeIndex]) + path.transform( + translate(position) * + scale(vec2(font.scale)) + ) + + var applyDecoration = true + if runeIndex == arrangement.lines[line][1]: + inc line + if arrangement.runes[runeIndex] == SP: + # Do not apply decoration to the space at end of lines + applyDecoration = false + + if applyDecoration: + if font.underline: + path.rect( + arrangement.selectionRects[runeIndex].x, + position.y - underlinePosition + underlineThickness / 2, + arrangement.selectionRects[runeIndex].w, + underlineThickness, + font.typeface.isCCW() + ) + if font.strikethrough: + path.rect( + arrangement.selectionRects[runeIndex].x, + position.y - strikeoutPosition, + arrangement.selectionRects[runeIndex].w, + strikeoutThickness, + font.typeface.isCCW() + ) + + fullPath.addPath(path) + + fullPath.computeBounds() + proc fillText*( target: Image | Mask, arrangement: Arrangement, diff --git a/tests/fonts/PinyonScript.ttf b/tests/fonts/PinyonScript.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1bd9d29f16c0527241a627560dcbf5ba19dcea0b GIT binary patch literal 62124 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 N3(E*q3H6HNdB literal 0 HcmV?d00001 diff --git a/tests/test_fonts.nim b/tests/test_fonts.nim index 71c9b9b..c02cc25 100644 --- a/tests/test_fonts.nim +++ b/tests/test_fonts.nim @@ -16,14 +16,14 @@ block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") font.size = 24 - let bounds = font.computeBounds("Word") + let bounds = font.layoutBounds("Word") doAssert bounds == vec2(56, 28) block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") font.size = 24 - let bounds = font.computeBounds("Word\n") + let bounds = font.layoutBounds("Word\n") doAssert bounds == vec2(56, 56) block: @@ -996,6 +996,48 @@ block: doDiff(image, "spans6") +block: + + let typeface1 = readTypeface("tests/fonts/PinyonScript.ttf") + + var font1 = newFont(typeface1) + font1.size = 82 + font1.lineHeight = 60 + font1.paint = "#000000" + + let spans = @[ + newSpan("Fancy text", font1), + ] + + let image = newImage(400, 400) + image.fill(rgba(255, 255, 255, 255)) + let ctx = newContext(image) + ctx.fillStyle = "#FFD6D6" + ctx.fillRect(rect(40, 170, 320, 60)) + + let arrangement = typeset(spans, bounds = vec2(320, 60)) + + echo arrangement.layoutBounds() + echo arrangement.computeBounds() + echo arrangement.computeBounds().snapToPixels() + + let snappedBounds = arrangement.computeBounds().snapToPixels() + + let textImage = newImage(snappedBounds.w.int, snappedBounds.h.int) + textImage.fillText(arrangement, translate(-snappedBounds.xy)) + + image.draw(textImage, translate(snappedBounds.xy + vec2(40, 170))) + + # Enable this to show bounds + # ctx.strokeStyle = "#FF0000" + # ctx.translate(vec2(40, 170)) + # ctx.strokeRect(arrangement.computeBounds()) + + # Enable this to show how text is drawing directly + # image.fillText(arrangement, translate(vec2(40, 170))) + + doDiff(image, "spans7") + block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") font.size = 36