Review.
This commit is contained in:
parent
897ca0bc7c
commit
0dda63d66d
2 changed files with 11 additions and 20 deletions
|
@ -500,30 +500,27 @@ proc parseSvgFont*(buf: string): Typeface {.raises: [PixieError].} =
|
||||||
result = Typeface()
|
result = Typeface()
|
||||||
result.svgFont = svgfont.parseSvgFont(buf)
|
result.svgFont = svgfont.parseSvgFont(buf)
|
||||||
|
|
||||||
proc computePaths(
|
proc computePaths(arrangement: Arrangement): seq[Path] =
|
||||||
arrangement: Arrangement
|
|
||||||
): seq[Path] =
|
|
||||||
## Takes an Arrangement and computes Paths for drawing.
|
## Takes an Arrangement and computes Paths for drawing.
|
||||||
## Returns a seq of paths that match the seq of Spans in the arrangement.
|
## Returns a seq of paths that match the seq of Spans in the arrangement.
|
||||||
## If you only have one Span you will only get one Path.
|
## If you only have one Span you will only get one Path.
|
||||||
var line: int
|
var line: int
|
||||||
for spanIndex, (start, stop) in arrangement.spans:
|
for spanIndex, (start, stop) in arrangement.spans:
|
||||||
var spanPath = Path()
|
|
||||||
let
|
let
|
||||||
|
spanPath = newPath()
|
||||||
font = arrangement.fonts[spanIndex]
|
font = arrangement.fonts[spanIndex]
|
||||||
underlineThickness = font.typeface.underlineThickness * font.scale
|
underlineThickness = font.typeface.underlineThickness * font.scale
|
||||||
underlinePosition = font.typeface.underlinePosition * font.scale
|
underlinePosition = font.typeface.underlinePosition * font.scale
|
||||||
strikeoutThickness = font.typeface.strikeoutThickness * font.scale
|
strikeoutThickness = font.typeface.strikeoutThickness * font.scale
|
||||||
strikeoutPosition = font.typeface.strikeoutPosition * font.scale
|
strikeoutPosition = font.typeface.strikeoutPosition * font.scale
|
||||||
for runeIndex in start .. stop:
|
for runeIndex in start .. stop:
|
||||||
let position = arrangement.positions[runeIndex]
|
let
|
||||||
|
position = arrangement.positions[runeIndex]
|
||||||
let path = font.typeface.getGlyphPath(arrangement.runes[runeIndex])
|
path = font.typeface.getGlyphPath(arrangement.runes[runeIndex])
|
||||||
path.transform(
|
path.transform(
|
||||||
translate(position) *
|
translate(position) *
|
||||||
scale(vec2(font.scale))
|
scale(vec2(font.scale))
|
||||||
)
|
)
|
||||||
|
|
||||||
var applyDecoration = true
|
var applyDecoration = true
|
||||||
if runeIndex == arrangement.lines[line][1]:
|
if runeIndex == arrangement.lines[line][1]:
|
||||||
inc line
|
inc line
|
||||||
|
@ -564,7 +561,7 @@ proc textUber(
|
||||||
stroke: static[bool] = false
|
stroke: static[bool] = false
|
||||||
) =
|
) =
|
||||||
let spanPaths = arrangement.computePaths()
|
let spanPaths = arrangement.computePaths()
|
||||||
for spanIndex, (start, stop) in arrangement.spans:
|
for spanIndex in 0 ..< arrangement.spans.len:
|
||||||
let path = spanPaths[spanIndex]
|
let path = spanPaths[spanIndex]
|
||||||
when stroke:
|
when stroke:
|
||||||
when type(target) is Image:
|
when type(target) is Image:
|
||||||
|
@ -594,7 +591,6 @@ proc textUber(
|
||||||
when type(target) is Image:
|
when type(target) is Image:
|
||||||
let font = arrangement.fonts[spanIndex]
|
let font = arrangement.fonts[spanIndex]
|
||||||
for paint in font.paints:
|
for paint in font.paints:
|
||||||
#echo transform
|
|
||||||
target.fillPath(path, paint, transform)
|
target.fillPath(path, paint, transform)
|
||||||
else: # target is Mask
|
else: # target is Mask
|
||||||
target.fillPath(path, transform)
|
target.fillPath(path, transform)
|
||||||
|
@ -603,7 +599,7 @@ proc computeBounds*(
|
||||||
arrangement: Arrangement,
|
arrangement: Arrangement,
|
||||||
transform = mat3()
|
transform = mat3()
|
||||||
): Rect =
|
): Rect =
|
||||||
var fullPath = newPath()
|
let fullPath = newPath()
|
||||||
for path in arrangement.computePaths():
|
for path in arrangement.computePaths():
|
||||||
fullPath.addPath(path)
|
fullPath.addPath(path)
|
||||||
fullPath.transform(transform)
|
fullPath.transform(transform)
|
||||||
|
|
|
@ -1015,15 +1015,10 @@ block:
|
||||||
ctx.fillStyle = "#FFD6D6"
|
ctx.fillStyle = "#FFD6D6"
|
||||||
ctx.fillRect(rect(40, 170, 320, 60))
|
ctx.fillRect(rect(40, 170, 320, 60))
|
||||||
|
|
||||||
let arrangement = typeset(spans, bounds = vec2(320, 60))
|
let
|
||||||
|
arrangement = typeset(spans, bounds = vec2(320, 60))
|
||||||
echo arrangement.layoutBounds()
|
snappedBounds = arrangement.computeBounds().snapToPixels()
|
||||||
echo arrangement.computeBounds()
|
textImage = newImage(snappedBounds.w.int, snappedBounds.h.int)
|
||||||
echo arrangement.computeBounds().snapToPixels()
|
|
||||||
|
|
||||||
let snappedBounds = arrangement.computeBounds().snapToPixels()
|
|
||||||
|
|
||||||
let textImage = newImage(snappedBounds.w.int, snappedBounds.h.int)
|
|
||||||
textImage.fillText(arrangement, translate(-snappedBounds.xy))
|
textImage.fillText(arrangement, translate(-snappedBounds.xy))
|
||||||
|
|
||||||
image.draw(textImage, translate(snappedBounds.xy + vec2(40, 170)))
|
image.draw(textImage, translate(snappedBounds.xy + vec2(40, 170)))
|
||||||
|
|
Loading…
Reference in a new issue