diff --git a/examples/heart.png b/examples/heart.png index e726a0af..b7ca7052 100644 Binary files a/examples/heart.png and b/examples/heart.png differ diff --git a/examples/masking.png b/examples/masking.png index 7b4ab71b..b508b070 100644 Binary files a/examples/masking.png and b/examples/masking.png differ diff --git a/examples/text.png b/examples/text.png index 439b4fd5..100b2d2b 100644 Binary files a/examples/text.png and b/examples/text.png differ diff --git a/examples/text_spans.png b/examples/text_spans.png index d43e2bb8..320067cd 100644 Binary files a/examples/text_spans.png and b/examples/text_spans.png differ diff --git a/examples/tiger.png b/examples/tiger.png index a241b718..cacc455c 100644 Binary files a/examples/tiger.png and b/examples/tiger.png differ diff --git a/experiments/benchmark_svg_cairo.nim b/experiments/benchmark_svg_cairo.nim index f8feb05e..6355169f 100644 --- a/experiments/benchmark_svg_cairo.nim +++ b/experiments/benchmark_svg_cairo.nim @@ -1,6 +1,6 @@ import benchy, svg_cairo -let data = readFile("tests/images/svg/Ghostscript_Tiger.svg") +let data = readFile("tests/fileformats/svg/Ghostscript_Tiger.svg") timeIt "svg decode": - keep decodeSvg(data) + discard decodeSvg(data) diff --git a/src/pixie/images.nim b/src/pixie/images.nim index 5bd07b1b..1b2919f9 100644 --- a/src/pixie/images.nim +++ b/src/pixie/images.nim @@ -990,6 +990,9 @@ proc superImage*(image: Image, x, y, w, h: int): Image {.raises: [PixieError].} ## Either cuts a sub image or returns a super image with padded transparency. if x >= 0 and x + w <= image.width and y >= 0 and y + h <= image.height: result = image.subImage(x, y, w, h) + elif abs(x) >= image.width or abs(y) >= image.height: + # Nothing to copy, just an empty new image + result = newImage(w, h) else: result = newImage(w, h) result.draw(image, translate(vec2(-x.float32, -y.float32)), bmOverwrite) diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index 1f6db0d1..1b7b7099 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -45,7 +45,7 @@ type startY, partitionHeight: uint32 const - epsilon: float32 = 0.0001 * PI ## Tiny value used for some computations. + epsilon: float64 = 0.0001 * PI ## Tiny value used for some computations. Must be float64 to prevent leaks. defaultMiterLimit*: float32 = 4 when defined(release): @@ -651,7 +651,7 @@ proc commandsToShapes( prevCommandKind = Move prevCtrl, prevCtrl2: Vec2 - let errorMargin = 0.2 / pixelScale + let errorMarginSq = pow(0.2.float32 / pixelScale, 2) proc addSegment(shape: var seq[Vec2], at, to: Vec2) = # Don't add any 0 length lines @@ -669,27 +669,29 @@ proc commandsToShapes( (1 - t) * 3 * pow(t, 2) * ctrl2 + pow(t, 3) * to - var prev = at - - proc discretize(shape: var seq[Vec2], i, steps: int) = - # Closure captures at, ctrl1, ctrl2, to and prev + var + t: float32 # Where we are at on the curve from [0, 1] + step = 1.float32 # How far we want to try to move along the curve + prev = at + next = compute(at, ctrl1, ctrl2, to, t + step) + halfway = compute(at, ctrl1, ctrl2, to, t + step / 2) + while true: let - tPrev = (i - 1).float32 / steps.float32 - t = i.float32 / steps.float32 - next = compute(at, ctrl1, ctrl2, to, t) - halfway = compute(at, ctrl1, ctrl2, to, tPrev + (t - tPrev) / 2) midpoint = (prev + next) / 2 - error = (midpoint - halfway).length - - if error >= errorMargin: - # Error too large, double precision for this step - shape.discretize(i * 2 - 1, steps * 2) - shape.discretize(i * 2, steps * 2) + error = (midpoint - halfway).lengthSq + if error > errorMarginSq: + next = halfway + halfway = compute(at, ctrl1, ctrl2, to, t + step / 4) + step /= 2 else: shape.addSegment(prev, next) + t += step + if t == 1: + break prev = next - - shape.discretize(1, 1) + step = min(step * 2, 1 - t) # Optimistically attempt larger steps + next = compute(at, ctrl1, ctrl2, to, t + step) + halfway = compute(at, ctrl1, ctrl2, to, t + step / 2) proc addQuadratic(shape: var seq[Vec2], at, ctrl, to: Vec2) = ## Adds quadratic segments to shape. @@ -698,27 +700,34 @@ proc commandsToShapes( 2 * (1 - t) * t * ctrl + pow(t, 2) * to - var prev = at - - proc discretize(shape: var seq[Vec2], i, steps: int) = - # Closure captures at, ctrl, to and prev + var + t: float32 # Where we are at on the curve from [0, 1] + step = 1.float32 # How far we want to try to move along the curve + prev = at + next = compute(at, ctrl, to, t + step) + halfway = compute(at, ctrl, to, t + step / 2) + halfStepping = false + while true: let - tPrev = (i - 1).float32 / steps.float32 - t = i.float32 / steps.float32 - next = compute(at, ctrl, to, t) - halfway = compute(at, ctrl, to, tPrev + (t - tPrev) / 2) midpoint = (prev + next) / 2 - error = (midpoint - halfway).length - - if error >= errorMargin: - # Error too large, double precision for this step - shape.discretize(i * 2 - 1, steps * 2) - shape.discretize(i * 2, steps * 2) + error = (midpoint - halfway).lengthSq + if error > errorMarginSq: + next = halfway + halfway = compute(at, ctrl, to, t + step / 4) + step /= 2 + halfStepping = true else: shape.addSegment(prev, next) + t += step + if t == 1: + break prev = next - - shape.discretize(1, 1) + if halfStepping: + step = min(step, 1 - t) + else: + step = min(step * 2, 1 - t) # Optimistically attempt larger steps + next = compute(at, ctrl, to, t + step) + halfway = compute(at, ctrl, to, t + step / 2) proc addArc( shape: var seq[Vec2], @@ -808,28 +817,37 @@ proc commandsToShapes( result = vec2(cos(a) * arc.radii.x, sin(a) * arc.radii.y) result = arc.rotMat * result + arc.center - var prev = at + let arc = endpointToCenterArcParams(at, radii, rotation, large, sweep, to) - proc discretize(shape: var seq[Vec2], arc: ArcParams, i, steps: int) = + var + t: float32 # Where we are at on the curve from [0, 1] + step = 1.float32 # How far we want to try to move along the curve + prev = at + while t != 1: let - step = arc.delta / steps.float32 - aPrev = arc.theta + step * (i - 1).float32 - a = arc.theta + step * i.float32 + aPrev = arc.theta + arc.delta * t + a = arc.theta + arc.delta * (t + step) next = arc.compute(a) halfway = arc.compute(aPrev + (a - aPrev) / 2) midpoint = (prev + next) / 2 - error = (midpoint - halfway).length - - if error >= errorMargin: - # Error too large, try again with doubled precision - shape.discretize(arc, i * 2 - 1, steps * 2) - shape.discretize(arc, i * 2, steps * 2) + error = (midpoint - halfway).lengthSq + if error > errorMarginSq: + let + quarterway = arc.compute(aPrev + (a - aPrev) / 4) + midpoint = (prev + halfway) / 2 + halfwayError = (midpoint - quarterway).lengthSq + if halfwayError < errorMarginSq: + shape.addSegment(prev, halfway) + prev = halfway + t += step / 2 + step = min(step / 2, 1 - t) # Assume next steps hould be the same size + else: + step = step / 4 # We know a half-step is too big else: shape.addSegment(prev, next) prev = next - - let arc = endpointToCenterArcParams(at, radii, rotation, large, sweep, to) - shape.discretize(arc, 1, 1) + t += step + step = min(step * 2, 1 - t) # Optimistically attempt larger steps for command in path.commands: if command.numbers.len != command.kind.parameterCount(): @@ -1002,9 +1020,7 @@ proc commandsToShapes( shape.addSegment(at, start) result.add(shape) -proc shapesToSegments( - shapes: seq[seq[Vec2]] -): seq[(Segment, int16)] = +proc shapesToSegments(shapes: seq[seq[Vec2]]): seq[(Segment, int16)] = ## Converts the shapes into a set of filtered segments with winding value. for shape in shapes: for segment in shape.segments: @@ -1084,8 +1100,8 @@ proc partitionSegments( ): Partitioning = ## Puts segments into the height partitions they intersect with. let - maxPartitions = max(1, height div 10).uint32 - numPartitions = min(maxPartitions, max(1, segments.len div 10).uint32) + maxPartitions = max(1, height div 4).uint32 + numPartitions = min(maxPartitions, max(1, segments.len div 4).uint32) result.partitions.setLen(numPartitions) result.startY = top.uint32 @@ -1214,7 +1230,7 @@ proc computeCoverage( let quality = if aa: 5 else: 1 # Must divide 255 cleanly (1, 3, 5, 15, 17, 51, 85) sampleCoverage = (255 div quality).uint8 - offset = 1 / quality.float32 + offset = 1 / quality.float64 initialOffset = offset / 2 + epsilon if aa: # Coverage is only used for anti-aliasing @@ -1224,7 +1240,7 @@ proc computeCoverage( let partitionIndex = partitioning.getIndexForY(y) partitionEntryCount = partitioning.partitions[partitionIndex].len - var yLine = y.float32 + initialOffset - offset + var yLine = y.float64 + initialOffset - offset for m in 0 ..< quality: yLine += offset numHits = 0 @@ -1813,8 +1829,7 @@ proc fillPath*( var shapes = parseSomePath(path, true, transform.pixelScale()) shapes.transform(transform) var color = paint.color - if paint.opacity != 1: - color.a *= paint.opacity + color.a *= paint.opacity image.fillShapes(shapes, color, windingRule, paint.blendMode) return @@ -1897,8 +1912,7 @@ proc strokePath*( ) strokeShapes.transform(transform) var color = paint.color - if paint.opacity != 1: - color.a *= paint.opacity + color.a *= paint.opacity image.fillShapes(strokeShapes, color, wrNonZero, paint.blendMode) return diff --git a/tests/benchmark_svg.nim b/tests/benchmark_svg.nim index a17351d4..c158d6d0 100644 --- a/tests/benchmark_svg.nim +++ b/tests/benchmark_svg.nim @@ -3,4 +3,4 @@ import benchy, pixie/fileformats/svg let data = readFile("tests/fileformats/svg/Ghostscript_Tiger.svg") timeIt "svg decode": - keep decodeSvg(data) + discard decodeSvg(data) diff --git a/tests/contexts/bezierCurveTo_1.png b/tests/contexts/bezierCurveTo_1.png index 83bb3bf9..d409fb8b 100644 Binary files a/tests/contexts/bezierCurveTo_1.png and b/tests/contexts/bezierCurveTo_1.png differ diff --git a/tests/contexts/bezierCurveTo_2.png b/tests/contexts/bezierCurveTo_2.png index ef9ed768..e7a04f53 100644 Binary files a/tests/contexts/bezierCurveTo_2.png and b/tests/contexts/bezierCurveTo_2.png differ diff --git a/tests/contexts/clip_text.png b/tests/contexts/clip_text.png index eb6bed83..4b44e6b9 100644 Binary files a/tests/contexts/clip_text.png and b/tests/contexts/clip_text.png differ diff --git a/tests/contexts/ellipse_1.png b/tests/contexts/ellipse_1.png index 786a7d5f..83ef76f2 100644 Binary files a/tests/contexts/ellipse_1.png and b/tests/contexts/ellipse_1.png differ diff --git a/tests/contexts/fillText_1.png b/tests/contexts/fillText_1.png index 0ff36235..84c75740 100644 Binary files a/tests/contexts/fillText_1.png and b/tests/contexts/fillText_1.png differ diff --git a/tests/contexts/quadracticCurveTo_1.png b/tests/contexts/quadracticCurveTo_1.png index 6f6b63f5..9cf79ceb 100644 Binary files a/tests/contexts/quadracticCurveTo_1.png and b/tests/contexts/quadracticCurveTo_1.png differ diff --git a/tests/contexts/quadracticCurveTo_2.png b/tests/contexts/quadracticCurveTo_2.png index e1de302c..07bf8857 100644 Binary files a/tests/contexts/quadracticCurveTo_2.png and b/tests/contexts/quadracticCurveTo_2.png differ diff --git a/tests/contexts/strokeText_1.png b/tests/contexts/strokeText_1.png index 3b028b6d..1bf3eec2 100644 Binary files a/tests/contexts/strokeText_1.png and b/tests/contexts/strokeText_1.png differ diff --git a/tests/fileformats/svg/diffs/Ghostscript_Tiger.png b/tests/fileformats/svg/diffs/Ghostscript_Tiger.png index b870b2f0..b72862e6 100644 Binary files a/tests/fileformats/svg/diffs/Ghostscript_Tiger.png and b/tests/fileformats/svg/diffs/Ghostscript_Tiger.png differ diff --git a/tests/fileformats/svg/diffs/circle01.png b/tests/fileformats/svg/diffs/circle01.png index f8606a08..c469d989 100644 Binary files a/tests/fileformats/svg/diffs/circle01.png and b/tests/fileformats/svg/diffs/circle01.png differ diff --git a/tests/fileformats/svg/diffs/ellipse01.png b/tests/fileformats/svg/diffs/ellipse01.png index b4469866..4f58de4d 100644 Binary files a/tests/fileformats/svg/diffs/ellipse01.png and b/tests/fileformats/svg/diffs/ellipse01.png differ diff --git a/tests/fileformats/svg/diffs/miterlimit.png b/tests/fileformats/svg/diffs/miterlimit.png index 7803a670..948dbcd8 100644 Binary files a/tests/fileformats/svg/diffs/miterlimit.png and b/tests/fileformats/svg/diffs/miterlimit.png differ diff --git a/tests/fileformats/svg/diffs/polygon01.png b/tests/fileformats/svg/diffs/polygon01.png index e66307f4..2735343b 100644 Binary files a/tests/fileformats/svg/diffs/polygon01.png and b/tests/fileformats/svg/diffs/polygon01.png differ diff --git a/tests/fileformats/svg/diffs/quad01.png b/tests/fileformats/svg/diffs/quad01.png index 3edde6c1..55637bb6 100644 Binary files a/tests/fileformats/svg/diffs/quad01.png and b/tests/fileformats/svg/diffs/quad01.png differ diff --git a/tests/fileformats/svg/diffs/rect02.png b/tests/fileformats/svg/diffs/rect02.png index d3cf8c8b..7728335a 100644 Binary files a/tests/fileformats/svg/diffs/rect02.png and b/tests/fileformats/svg/diffs/rect02.png differ diff --git a/tests/fileformats/svg/diffs/scale.png b/tests/fileformats/svg/diffs/scale.png index 155d956f..33dc6058 100644 Binary files a/tests/fileformats/svg/diffs/scale.png and b/tests/fileformats/svg/diffs/scale.png differ diff --git a/tests/fileformats/svg/emojitwo.png b/tests/fileformats/svg/emojitwo.png index 35a3fabc..0ffb9b4f 100644 Binary files a/tests/fileformats/svg/emojitwo.png and b/tests/fileformats/svg/emojitwo.png differ diff --git a/tests/fileformats/svg/flat-color-icons.png b/tests/fileformats/svg/flat-color-icons.png index 8de3840b..041469ac 100644 Binary files a/tests/fileformats/svg/flat-color-icons.png and b/tests/fileformats/svg/flat-color-icons.png differ diff --git a/tests/fileformats/svg/ionicons.png b/tests/fileformats/svg/ionicons.png index 1d2aab48..9e6b0362 100644 Binary files a/tests/fileformats/svg/ionicons.png and b/tests/fileformats/svg/ionicons.png differ diff --git a/tests/fileformats/svg/noto-emoji.png b/tests/fileformats/svg/noto-emoji.png index dad78993..2e9e40d9 100644 Binary files a/tests/fileformats/svg/noto-emoji.png and b/tests/fileformats/svg/noto-emoji.png differ diff --git a/tests/fileformats/svg/openmoji.png b/tests/fileformats/svg/openmoji.png index 70e32e7f..71e2c316 100644 Binary files a/tests/fileformats/svg/openmoji.png and b/tests/fileformats/svg/openmoji.png differ diff --git a/tests/fileformats/svg/rendered/Ghostscript_Tiger.png b/tests/fileformats/svg/rendered/Ghostscript_Tiger.png index 710a1b99..2431f99f 100644 Binary files a/tests/fileformats/svg/rendered/Ghostscript_Tiger.png and b/tests/fileformats/svg/rendered/Ghostscript_Tiger.png differ diff --git a/tests/fileformats/svg/rendered/circle01.png b/tests/fileformats/svg/rendered/circle01.png index 56799c19..b558d694 100644 Binary files a/tests/fileformats/svg/rendered/circle01.png and b/tests/fileformats/svg/rendered/circle01.png differ diff --git a/tests/fileformats/svg/rendered/ellipse01.png b/tests/fileformats/svg/rendered/ellipse01.png index 9bf42b7d..16ff26ff 100644 Binary files a/tests/fileformats/svg/rendered/ellipse01.png and b/tests/fileformats/svg/rendered/ellipse01.png differ diff --git a/tests/fileformats/svg/rendered/miterlimit.png b/tests/fileformats/svg/rendered/miterlimit.png index c2babb8d..e09382fe 100644 Binary files a/tests/fileformats/svg/rendered/miterlimit.png and b/tests/fileformats/svg/rendered/miterlimit.png differ diff --git a/tests/fileformats/svg/rendered/polygon01.png b/tests/fileformats/svg/rendered/polygon01.png index ec6a32f9..c34e8452 100644 Binary files a/tests/fileformats/svg/rendered/polygon01.png and b/tests/fileformats/svg/rendered/polygon01.png differ diff --git a/tests/fileformats/svg/rendered/quad01.png b/tests/fileformats/svg/rendered/quad01.png index 4b3e6c5d..cb08ee63 100644 Binary files a/tests/fileformats/svg/rendered/quad01.png and b/tests/fileformats/svg/rendered/quad01.png differ diff --git a/tests/fileformats/svg/rendered/rect02.png b/tests/fileformats/svg/rendered/rect02.png index 2c009834..30537894 100644 Binary files a/tests/fileformats/svg/rendered/rect02.png and b/tests/fileformats/svg/rendered/rect02.png differ diff --git a/tests/fileformats/svg/rendered/scale.png b/tests/fileformats/svg/rendered/scale.png index 9f4e0c9d..c3b13536 100644 Binary files a/tests/fileformats/svg/rendered/scale.png and b/tests/fileformats/svg/rendered/scale.png differ diff --git a/tests/fileformats/svg/simple-icons.png b/tests/fileformats/svg/simple-icons.png index 9d6217c0..64e7030f 100644 Binary files a/tests/fileformats/svg/simple-icons.png and b/tests/fileformats/svg/simple-icons.png differ diff --git a/tests/fileformats/svg/tabler-icons.png b/tests/fileformats/svg/tabler-icons.png index b629c1c4..f08a0854 100644 Binary files a/tests/fileformats/svg/tabler-icons.png and b/tests/fileformats/svg/tabler-icons.png differ diff --git a/tests/fileformats/svg/twbs-icons.png b/tests/fileformats/svg/twbs-icons.png index ac850f32..756364f6 100644 Binary files a/tests/fileformats/svg/twbs-icons.png and b/tests/fileformats/svg/twbs-icons.png differ diff --git a/tests/fileformats/svg/twemoji.png b/tests/fileformats/svg/twemoji.png index 9e11f33e..b725c6e2 100644 Binary files a/tests/fileformats/svg/twemoji.png and b/tests/fileformats/svg/twemoji.png differ diff --git a/tests/fonts/diffs/alignments.png b/tests/fonts/diffs/alignments.png index 1cdee3bc..5c5c924e 100644 Binary files a/tests/fonts/diffs/alignments.png and b/tests/fonts/diffs/alignments.png differ diff --git a/tests/fonts/diffs/basic4.png b/tests/fonts/diffs/basic4.png index 56a84d3f..d1e55b42 100644 Binary files a/tests/fonts/diffs/basic4.png and b/tests/fonts/diffs/basic4.png differ diff --git a/tests/fonts/diffs/basic8b.png b/tests/fonts/diffs/basic8b.png index 6d89a7ff..e355a8b4 100644 Binary files a/tests/fonts/diffs/basic8b.png and b/tests/fonts/diffs/basic8b.png differ diff --git a/tests/fonts/diffs/cff.png b/tests/fonts/diffs/cff.png index 1477e3e2..6660b919 100644 Binary files a/tests/fonts/diffs/cff.png and b/tests/fonts/diffs/cff.png differ diff --git a/tests/fonts/diffs/cff_jp.png b/tests/fonts/diffs/cff_jp.png index 76cebe41..7014944c 100644 Binary files a/tests/fonts/diffs/cff_jp.png and b/tests/fonts/diffs/cff_jp.png differ diff --git a/tests/fonts/diffs/cff_strikethrough.png b/tests/fonts/diffs/cff_strikethrough.png index be1eb2ae..fe8fa6f5 100644 Binary files a/tests/fonts/diffs/cff_strikethrough.png and b/tests/fonts/diffs/cff_strikethrough.png differ diff --git a/tests/fonts/diffs/cff_underline.png b/tests/fonts/diffs/cff_underline.png index 409c7a22..698aabfc 100644 Binary files a/tests/fonts/diffs/cff_underline.png and b/tests/fonts/diffs/cff_underline.png differ diff --git a/tests/fonts/diffs/fallback.png b/tests/fonts/diffs/fallback.png index 8ff8aa2d..176fea9e 100644 Binary files a/tests/fonts/diffs/fallback.png and b/tests/fonts/diffs/fallback.png differ diff --git a/tests/fonts/diffs/fallback2.png b/tests/fonts/diffs/fallback2.png index 2e0a6368..8d8e6700 100644 Binary files a/tests/fonts/diffs/fallback2.png and b/tests/fonts/diffs/fallback2.png differ diff --git a/tests/fonts/diffs/huge1.png b/tests/fonts/diffs/huge1.png index 3c718adf..235dffc8 100644 Binary files a/tests/fonts/diffs/huge1.png and b/tests/fonts/diffs/huge1.png differ diff --git a/tests/fonts/diffs/huge1_nokern.png b/tests/fonts/diffs/huge1_nokern.png index 81ca1f08..86036310 100644 Binary files a/tests/fonts/diffs/huge1_nokern.png and b/tests/fonts/diffs/huge1_nokern.png differ diff --git a/tests/fonts/diffs/huge2.png b/tests/fonts/diffs/huge2.png index a1f4947f..53eff752 100644 Binary files a/tests/fonts/diffs/huge2.png and b/tests/fonts/diffs/huge2.png differ diff --git a/tests/fonts/diffs/huge2_nokern.png b/tests/fonts/diffs/huge2_nokern.png index 4938a153..d6e2d4bb 100644 Binary files a/tests/fonts/diffs/huge2_nokern.png and b/tests/fonts/diffs/huge2_nokern.png differ diff --git a/tests/fonts/diffs/huge3_nokern.png b/tests/fonts/diffs/huge3_nokern.png index 2a2006b8..930ab2f5 100644 Binary files a/tests/fonts/diffs/huge3_nokern.png and b/tests/fonts/diffs/huge3_nokern.png differ diff --git a/tests/fonts/diffs/image_stroke.png b/tests/fonts/diffs/image_stroke.png index 69f41a86..1dc19291 100644 Binary files a/tests/fonts/diffs/image_stroke.png and b/tests/fonts/diffs/image_stroke.png differ diff --git a/tests/fonts/diffs/lines1.png b/tests/fonts/diffs/lines1.png index 2ecde952..8506add7 100644 Binary files a/tests/fonts/diffs/lines1.png and b/tests/fonts/diffs/lines1.png differ diff --git a/tests/fonts/diffs/lines2.png b/tests/fonts/diffs/lines2.png index 603cbedb..05f0b9dd 100644 Binary files a/tests/fonts/diffs/lines2.png and b/tests/fonts/diffs/lines2.png differ diff --git a/tests/fonts/diffs/mask_stroke.png b/tests/fonts/diffs/mask_stroke.png index 22dbf266..2cdf4482 100644 Binary files a/tests/fonts/diffs/mask_stroke.png and b/tests/fonts/diffs/mask_stroke.png differ diff --git a/tests/fonts/diffs/pairs1.png b/tests/fonts/diffs/pairs1.png index f63c0e47..28c6ca16 100644 Binary files a/tests/fonts/diffs/pairs1.png and b/tests/fonts/diffs/pairs1.png differ diff --git a/tests/fonts/diffs/pairs2.png b/tests/fonts/diffs/pairs2.png index b1cfab13..fcb1e1ee 100644 Binary files a/tests/fonts/diffs/pairs2.png and b/tests/fonts/diffs/pairs2.png differ diff --git a/tests/fonts/diffs/pairs3.png b/tests/fonts/diffs/pairs3.png index f401ab16..c718a1cf 100644 Binary files a/tests/fonts/diffs/pairs3.png and b/tests/fonts/diffs/pairs3.png differ diff --git a/tests/fonts/diffs/paragraph1.png b/tests/fonts/diffs/paragraph1.png index 45d83c77..04c1b30e 100644 Binary files a/tests/fonts/diffs/paragraph1.png and b/tests/fonts/diffs/paragraph1.png differ diff --git a/tests/fonts/diffs/paragraph1_2.png b/tests/fonts/diffs/paragraph1_2.png index 63f6bd18..c6a9ff34 100644 Binary files a/tests/fonts/diffs/paragraph1_2.png and b/tests/fonts/diffs/paragraph1_2.png differ diff --git a/tests/fonts/diffs/paragraph1_3.png b/tests/fonts/diffs/paragraph1_3.png index 0dc8419d..63716919 100644 Binary files a/tests/fonts/diffs/paragraph1_3.png and b/tests/fonts/diffs/paragraph1_3.png differ diff --git a/tests/fonts/diffs/paragraph1_nokern.png b/tests/fonts/diffs/paragraph1_nokern.png index 9a09c77b..86e29fae 100644 Binary files a/tests/fonts/diffs/paragraph1_nokern.png and b/tests/fonts/diffs/paragraph1_nokern.png differ diff --git a/tests/fonts/diffs/paragraph1_nokern_2.png b/tests/fonts/diffs/paragraph1_nokern_2.png index 185702fe..cbde8f6a 100644 Binary files a/tests/fonts/diffs/paragraph1_nokern_2.png and b/tests/fonts/diffs/paragraph1_nokern_2.png differ diff --git a/tests/fonts/diffs/paragraph1_nokern_3.png b/tests/fonts/diffs/paragraph1_nokern_3.png index 93f55dfb..d6eb19ad 100644 Binary files a/tests/fonts/diffs/paragraph1_nokern_3.png and b/tests/fonts/diffs/paragraph1_nokern_3.png differ diff --git a/tests/fonts/diffs/paragraph2.png b/tests/fonts/diffs/paragraph2.png index 9df171b6..97ffac44 100644 Binary files a/tests/fonts/diffs/paragraph2.png and b/tests/fonts/diffs/paragraph2.png differ diff --git a/tests/fonts/diffs/paragraph2_2.png b/tests/fonts/diffs/paragraph2_2.png index b90a7330..930f89d6 100644 Binary files a/tests/fonts/diffs/paragraph2_2.png and b/tests/fonts/diffs/paragraph2_2.png differ diff --git a/tests/fonts/diffs/paragraph2_3.png b/tests/fonts/diffs/paragraph2_3.png index 0571740d..f6ce69cd 100644 Binary files a/tests/fonts/diffs/paragraph2_3.png and b/tests/fonts/diffs/paragraph2_3.png differ diff --git a/tests/fonts/diffs/paragraph2_nokern.png b/tests/fonts/diffs/paragraph2_nokern.png index 41975b31..5e9bfa23 100644 Binary files a/tests/fonts/diffs/paragraph2_nokern.png and b/tests/fonts/diffs/paragraph2_nokern.png differ diff --git a/tests/fonts/diffs/paragraph2_nokern_2.png b/tests/fonts/diffs/paragraph2_nokern_2.png index 76a2c7ef..9cae903b 100644 Binary files a/tests/fonts/diffs/paragraph2_nokern_2.png and b/tests/fonts/diffs/paragraph2_nokern_2.png differ diff --git a/tests/fonts/diffs/paragraph2_nokern_3.png b/tests/fonts/diffs/paragraph2_nokern_3.png index 624e9793..c2bcfe68 100644 Binary files a/tests/fonts/diffs/paragraph2_nokern_3.png and b/tests/fonts/diffs/paragraph2_nokern_3.png differ diff --git a/tests/fonts/diffs/paragraph3.png b/tests/fonts/diffs/paragraph3.png index d28a7ded..74cce402 100644 Binary files a/tests/fonts/diffs/paragraph3.png and b/tests/fonts/diffs/paragraph3.png differ diff --git a/tests/fonts/diffs/paragraph3_2.png b/tests/fonts/diffs/paragraph3_2.png index ed0759ba..75b2dd58 100644 Binary files a/tests/fonts/diffs/paragraph3_2.png and b/tests/fonts/diffs/paragraph3_2.png differ diff --git a/tests/fonts/diffs/paragraph3_3.png b/tests/fonts/diffs/paragraph3_3.png index 2ca2e93a..4fdda2c9 100644 Binary files a/tests/fonts/diffs/paragraph3_3.png and b/tests/fonts/diffs/paragraph3_3.png differ diff --git a/tests/fonts/diffs/paragraph3_nokern_2.png b/tests/fonts/diffs/paragraph3_nokern_2.png index d790e03b..1ad30e70 100644 Binary files a/tests/fonts/diffs/paragraph3_nokern_2.png and b/tests/fonts/diffs/paragraph3_nokern_2.png differ diff --git a/tests/fonts/diffs/paragraph3_nokern_3.png b/tests/fonts/diffs/paragraph3_nokern_3.png index 135425ee..c318cc3a 100644 Binary files a/tests/fonts/diffs/paragraph3_nokern_3.png and b/tests/fonts/diffs/paragraph3_nokern_3.png differ diff --git a/tests/fonts/diffs/paragraph4.png b/tests/fonts/diffs/paragraph4.png index 6caecb4c..88ebf274 100644 Binary files a/tests/fonts/diffs/paragraph4.png and b/tests/fonts/diffs/paragraph4.png differ diff --git a/tests/fonts/diffs/paragraph4_2.png b/tests/fonts/diffs/paragraph4_2.png index df793291..8f2b564b 100644 Binary files a/tests/fonts/diffs/paragraph4_2.png and b/tests/fonts/diffs/paragraph4_2.png differ diff --git a/tests/fonts/diffs/paragraph4_3.png b/tests/fonts/diffs/paragraph4_3.png index 7065e882..b8aecbb6 100644 Binary files a/tests/fonts/diffs/paragraph4_3.png and b/tests/fonts/diffs/paragraph4_3.png differ diff --git a/tests/fonts/diffs/paragraph4_nokern.png b/tests/fonts/diffs/paragraph4_nokern.png index 180a7232..e377a23b 100644 Binary files a/tests/fonts/diffs/paragraph4_nokern.png and b/tests/fonts/diffs/paragraph4_nokern.png differ diff --git a/tests/fonts/diffs/paragraph4_nokern_2.png b/tests/fonts/diffs/paragraph4_nokern_2.png index 7fcf2604..eee61cb5 100644 Binary files a/tests/fonts/diffs/paragraph4_nokern_2.png and b/tests/fonts/diffs/paragraph4_nokern_2.png differ diff --git a/tests/fonts/diffs/paragraph4_nokern_3.png b/tests/fonts/diffs/paragraph4_nokern_3.png index 98755e51..f81c1e87 100644 Binary files a/tests/fonts/diffs/paragraph4_nokern_3.png and b/tests/fonts/diffs/paragraph4_nokern_3.png differ diff --git a/tests/fonts/diffs/paragraph5.png b/tests/fonts/diffs/paragraph5.png index fa067c80..6ed39bd6 100644 Binary files a/tests/fonts/diffs/paragraph5.png and b/tests/fonts/diffs/paragraph5.png differ diff --git a/tests/fonts/diffs/paragraph5_2.png b/tests/fonts/diffs/paragraph5_2.png index dc52fc6f..cc316b4c 100644 Binary files a/tests/fonts/diffs/paragraph5_2.png and b/tests/fonts/diffs/paragraph5_2.png differ diff --git a/tests/fonts/diffs/paragraph5_3.png b/tests/fonts/diffs/paragraph5_3.png index a1fda534..37705982 100644 Binary files a/tests/fonts/diffs/paragraph5_3.png and b/tests/fonts/diffs/paragraph5_3.png differ diff --git a/tests/fonts/diffs/paragraph5_nokern.png b/tests/fonts/diffs/paragraph5_nokern.png index 9920ab6f..026d6d25 100644 Binary files a/tests/fonts/diffs/paragraph5_nokern.png and b/tests/fonts/diffs/paragraph5_nokern.png differ diff --git a/tests/fonts/diffs/paragraph5_nokern_2.png b/tests/fonts/diffs/paragraph5_nokern_2.png index 363ee4b5..0f7852bf 100644 Binary files a/tests/fonts/diffs/paragraph5_nokern_2.png and b/tests/fonts/diffs/paragraph5_nokern_2.png differ diff --git a/tests/fonts/diffs/paragraph5_nokern_3.png b/tests/fonts/diffs/paragraph5_nokern_3.png index b1186f6d..0d542a7f 100644 Binary files a/tests/fonts/diffs/paragraph5_nokern_3.png and b/tests/fonts/diffs/paragraph5_nokern_3.png differ diff --git a/tests/fonts/diffs/selection_rects1.png b/tests/fonts/diffs/selection_rects1.png index c15a0cc0..65a836b0 100644 Binary files a/tests/fonts/diffs/selection_rects1.png and b/tests/fonts/diffs/selection_rects1.png differ diff --git a/tests/fonts/diffs/selection_rects2.png b/tests/fonts/diffs/selection_rects2.png index d1806b9f..04d4ae35 100644 Binary files a/tests/fonts/diffs/selection_rects2.png and b/tests/fonts/diffs/selection_rects2.png differ diff --git a/tests/fonts/diffs/spans1.png b/tests/fonts/diffs/spans1.png index 0c788d16..a288f204 100644 Binary files a/tests/fonts/diffs/spans1.png and b/tests/fonts/diffs/spans1.png differ diff --git a/tests/fonts/diffs/spans4.png b/tests/fonts/diffs/spans4.png index ca726486..3747e477 100644 Binary files a/tests/fonts/diffs/spans4.png and b/tests/fonts/diffs/spans4.png differ diff --git a/tests/fonts/diffs/spans5.png b/tests/fonts/diffs/spans5.png index 33105102..82ab8b34 100644 Binary files a/tests/fonts/diffs/spans5.png and b/tests/fonts/diffs/spans5.png differ diff --git a/tests/fonts/diffs/spans6.png b/tests/fonts/diffs/spans6.png index 01d0aa4b..5f156e44 100644 Binary files a/tests/fonts/diffs/spans6.png and b/tests/fonts/diffs/spans6.png differ diff --git a/tests/fonts/diffs/strikethrough3.png b/tests/fonts/diffs/strikethrough3.png index 95fb1281..57772dc4 100644 Binary files a/tests/fonts/diffs/strikethrough3.png and b/tests/fonts/diffs/strikethrough3.png differ diff --git a/tests/fonts/diffs/tofu_advance.png b/tests/fonts/diffs/tofu_advance.png index 2b30fd23..75ddc952 100644 Binary files a/tests/fonts/diffs/tofu_advance.png and b/tests/fonts/diffs/tofu_advance.png differ diff --git a/tests/fonts/diffs/underline3.png b/tests/fonts/diffs/underline3.png index 43467ab9..0f3be749 100644 Binary files a/tests/fonts/diffs/underline3.png and b/tests/fonts/diffs/underline3.png differ diff --git a/tests/fonts/rendered/alignments.png b/tests/fonts/rendered/alignments.png index 6f394491..b4e4a698 100644 Binary files a/tests/fonts/rendered/alignments.png and b/tests/fonts/rendered/alignments.png differ diff --git a/tests/fonts/rendered/basic4.png b/tests/fonts/rendered/basic4.png index 77b18890..424cdffa 100644 Binary files a/tests/fonts/rendered/basic4.png and b/tests/fonts/rendered/basic4.png differ diff --git a/tests/fonts/rendered/basic8b.png b/tests/fonts/rendered/basic8b.png index 239380c2..4138702a 100644 Binary files a/tests/fonts/rendered/basic8b.png and b/tests/fonts/rendered/basic8b.png differ diff --git a/tests/fonts/rendered/cff.png b/tests/fonts/rendered/cff.png index ac094091..e273da00 100644 Binary files a/tests/fonts/rendered/cff.png and b/tests/fonts/rendered/cff.png differ diff --git a/tests/fonts/rendered/cff_jp.png b/tests/fonts/rendered/cff_jp.png index 53c1e744..0f2a426e 100644 Binary files a/tests/fonts/rendered/cff_jp.png and b/tests/fonts/rendered/cff_jp.png differ diff --git a/tests/fonts/rendered/cff_strikethrough.png b/tests/fonts/rendered/cff_strikethrough.png index 51bdedad..026f668d 100644 Binary files a/tests/fonts/rendered/cff_strikethrough.png and b/tests/fonts/rendered/cff_strikethrough.png differ diff --git a/tests/fonts/rendered/cff_underline.png b/tests/fonts/rendered/cff_underline.png index b767b0da..2da679db 100644 Binary files a/tests/fonts/rendered/cff_underline.png and b/tests/fonts/rendered/cff_underline.png differ diff --git a/tests/fonts/rendered/fallback.png b/tests/fonts/rendered/fallback.png index d7580a70..a6c83a11 100644 Binary files a/tests/fonts/rendered/fallback.png and b/tests/fonts/rendered/fallback.png differ diff --git a/tests/fonts/rendered/fallback2.png b/tests/fonts/rendered/fallback2.png index d7580a70..a6c83a11 100644 Binary files a/tests/fonts/rendered/fallback2.png and b/tests/fonts/rendered/fallback2.png differ diff --git a/tests/fonts/rendered/huge1.png b/tests/fonts/rendered/huge1.png index 433af376..3f5a1ebd 100644 Binary files a/tests/fonts/rendered/huge1.png and b/tests/fonts/rendered/huge1.png differ diff --git a/tests/fonts/rendered/huge1_nokern.png b/tests/fonts/rendered/huge1_nokern.png index 6ac10bfe..72836375 100644 Binary files a/tests/fonts/rendered/huge1_nokern.png and b/tests/fonts/rendered/huge1_nokern.png differ diff --git a/tests/fonts/rendered/huge2.png b/tests/fonts/rendered/huge2.png index ecc30afb..f537a149 100644 Binary files a/tests/fonts/rendered/huge2.png and b/tests/fonts/rendered/huge2.png differ diff --git a/tests/fonts/rendered/huge2_nokern.png b/tests/fonts/rendered/huge2_nokern.png index 6c113996..678fff12 100644 Binary files a/tests/fonts/rendered/huge2_nokern.png and b/tests/fonts/rendered/huge2_nokern.png differ diff --git a/tests/fonts/rendered/huge3.png b/tests/fonts/rendered/huge3.png index e4b2c08d..ef90ec3b 100644 Binary files a/tests/fonts/rendered/huge3.png and b/tests/fonts/rendered/huge3.png differ diff --git a/tests/fonts/rendered/huge3_nokern.png b/tests/fonts/rendered/huge3_nokern.png index e06357af..4799904c 100644 Binary files a/tests/fonts/rendered/huge3_nokern.png and b/tests/fonts/rendered/huge3_nokern.png differ diff --git a/tests/fonts/rendered/image_stroke.png b/tests/fonts/rendered/image_stroke.png index da57d705..f90121a0 100644 Binary files a/tests/fonts/rendered/image_stroke.png and b/tests/fonts/rendered/image_stroke.png differ diff --git a/tests/fonts/rendered/lines1.png b/tests/fonts/rendered/lines1.png index 3a00be40..9e0325ed 100644 Binary files a/tests/fonts/rendered/lines1.png and b/tests/fonts/rendered/lines1.png differ diff --git a/tests/fonts/rendered/lines2.png b/tests/fonts/rendered/lines2.png index 353673d0..2d717196 100644 Binary files a/tests/fonts/rendered/lines2.png and b/tests/fonts/rendered/lines2.png differ diff --git a/tests/fonts/rendered/mask_stroke.png b/tests/fonts/rendered/mask_stroke.png index 7301630c..a0ac5c10 100644 Binary files a/tests/fonts/rendered/mask_stroke.png and b/tests/fonts/rendered/mask_stroke.png differ diff --git a/tests/fonts/rendered/pairs1.png b/tests/fonts/rendered/pairs1.png index 23220ab0..04c64e9b 100644 Binary files a/tests/fonts/rendered/pairs1.png and b/tests/fonts/rendered/pairs1.png differ diff --git a/tests/fonts/rendered/pairs2.png b/tests/fonts/rendered/pairs2.png index 0a7dbc7a..ab547458 100644 Binary files a/tests/fonts/rendered/pairs2.png and b/tests/fonts/rendered/pairs2.png differ diff --git a/tests/fonts/rendered/pairs3.png b/tests/fonts/rendered/pairs3.png index b021bf3c..25951772 100644 Binary files a/tests/fonts/rendered/pairs3.png and b/tests/fonts/rendered/pairs3.png differ diff --git a/tests/fonts/rendered/paragraph1.png b/tests/fonts/rendered/paragraph1.png index 8028d520..a9b31801 100644 Binary files a/tests/fonts/rendered/paragraph1.png and b/tests/fonts/rendered/paragraph1.png differ diff --git a/tests/fonts/rendered/paragraph1_2.png b/tests/fonts/rendered/paragraph1_2.png index 719c9f9b..7e961296 100644 Binary files a/tests/fonts/rendered/paragraph1_2.png and b/tests/fonts/rendered/paragraph1_2.png differ diff --git a/tests/fonts/rendered/paragraph1_3.png b/tests/fonts/rendered/paragraph1_3.png index f712932f..753cbf51 100644 Binary files a/tests/fonts/rendered/paragraph1_3.png and b/tests/fonts/rendered/paragraph1_3.png differ diff --git a/tests/fonts/rendered/paragraph1_nokern.png b/tests/fonts/rendered/paragraph1_nokern.png index b88bfc8a..a80191e3 100644 Binary files a/tests/fonts/rendered/paragraph1_nokern.png and b/tests/fonts/rendered/paragraph1_nokern.png differ diff --git a/tests/fonts/rendered/paragraph1_nokern_2.png b/tests/fonts/rendered/paragraph1_nokern_2.png index 38359920..51f3f9e5 100644 Binary files a/tests/fonts/rendered/paragraph1_nokern_2.png and b/tests/fonts/rendered/paragraph1_nokern_2.png differ diff --git a/tests/fonts/rendered/paragraph1_nokern_3.png b/tests/fonts/rendered/paragraph1_nokern_3.png index d3029ce5..db705633 100644 Binary files a/tests/fonts/rendered/paragraph1_nokern_3.png and b/tests/fonts/rendered/paragraph1_nokern_3.png differ diff --git a/tests/fonts/rendered/paragraph2.png b/tests/fonts/rendered/paragraph2.png index 052055ca..6b01e253 100644 Binary files a/tests/fonts/rendered/paragraph2.png and b/tests/fonts/rendered/paragraph2.png differ diff --git a/tests/fonts/rendered/paragraph2_2.png b/tests/fonts/rendered/paragraph2_2.png index 1b9dd11c..5c1eb831 100644 Binary files a/tests/fonts/rendered/paragraph2_2.png and b/tests/fonts/rendered/paragraph2_2.png differ diff --git a/tests/fonts/rendered/paragraph2_3.png b/tests/fonts/rendered/paragraph2_3.png index d61fb2b9..0e4d50af 100644 Binary files a/tests/fonts/rendered/paragraph2_3.png and b/tests/fonts/rendered/paragraph2_3.png differ diff --git a/tests/fonts/rendered/paragraph2_nokern.png b/tests/fonts/rendered/paragraph2_nokern.png index 3d69f208..70c360cf 100644 Binary files a/tests/fonts/rendered/paragraph2_nokern.png and b/tests/fonts/rendered/paragraph2_nokern.png differ diff --git a/tests/fonts/rendered/paragraph2_nokern_2.png b/tests/fonts/rendered/paragraph2_nokern_2.png index fbe99657..6b432aee 100644 Binary files a/tests/fonts/rendered/paragraph2_nokern_2.png and b/tests/fonts/rendered/paragraph2_nokern_2.png differ diff --git a/tests/fonts/rendered/paragraph2_nokern_3.png b/tests/fonts/rendered/paragraph2_nokern_3.png index c78e7c28..7c00d894 100644 Binary files a/tests/fonts/rendered/paragraph2_nokern_3.png and b/tests/fonts/rendered/paragraph2_nokern_3.png differ diff --git a/tests/fonts/rendered/paragraph3.png b/tests/fonts/rendered/paragraph3.png index a60ebf11..51b1ab09 100644 Binary files a/tests/fonts/rendered/paragraph3.png and b/tests/fonts/rendered/paragraph3.png differ diff --git a/tests/fonts/rendered/paragraph3_2.png b/tests/fonts/rendered/paragraph3_2.png index 3bdf3573..2f5499a8 100644 Binary files a/tests/fonts/rendered/paragraph3_2.png and b/tests/fonts/rendered/paragraph3_2.png differ diff --git a/tests/fonts/rendered/paragraph3_3.png b/tests/fonts/rendered/paragraph3_3.png index 2941c2ce..ced91243 100644 Binary files a/tests/fonts/rendered/paragraph3_3.png and b/tests/fonts/rendered/paragraph3_3.png differ diff --git a/tests/fonts/rendered/paragraph3_nokern.png b/tests/fonts/rendered/paragraph3_nokern.png index 1c43cc02..00ec1c84 100644 Binary files a/tests/fonts/rendered/paragraph3_nokern.png and b/tests/fonts/rendered/paragraph3_nokern.png differ diff --git a/tests/fonts/rendered/paragraph3_nokern_2.png b/tests/fonts/rendered/paragraph3_nokern_2.png index dad7a0ef..43850cb2 100644 Binary files a/tests/fonts/rendered/paragraph3_nokern_2.png and b/tests/fonts/rendered/paragraph3_nokern_2.png differ diff --git a/tests/fonts/rendered/paragraph3_nokern_3.png b/tests/fonts/rendered/paragraph3_nokern_3.png index 95e0b845..851dd2b1 100644 Binary files a/tests/fonts/rendered/paragraph3_nokern_3.png and b/tests/fonts/rendered/paragraph3_nokern_3.png differ diff --git a/tests/fonts/rendered/paragraph4.png b/tests/fonts/rendered/paragraph4.png index c4a0e6d2..14dbdf08 100644 Binary files a/tests/fonts/rendered/paragraph4.png and b/tests/fonts/rendered/paragraph4.png differ diff --git a/tests/fonts/rendered/paragraph4_2.png b/tests/fonts/rendered/paragraph4_2.png index 35ff6ecb..d458f597 100644 Binary files a/tests/fonts/rendered/paragraph4_2.png and b/tests/fonts/rendered/paragraph4_2.png differ diff --git a/tests/fonts/rendered/paragraph4_3.png b/tests/fonts/rendered/paragraph4_3.png index c73bb95f..4ad59d51 100644 Binary files a/tests/fonts/rendered/paragraph4_3.png and b/tests/fonts/rendered/paragraph4_3.png differ diff --git a/tests/fonts/rendered/paragraph4_nokern.png b/tests/fonts/rendered/paragraph4_nokern.png index 6fd16c83..6c974b13 100644 Binary files a/tests/fonts/rendered/paragraph4_nokern.png and b/tests/fonts/rendered/paragraph4_nokern.png differ diff --git a/tests/fonts/rendered/paragraph4_nokern_2.png b/tests/fonts/rendered/paragraph4_nokern_2.png index 73bb9047..f6e37371 100644 Binary files a/tests/fonts/rendered/paragraph4_nokern_2.png and b/tests/fonts/rendered/paragraph4_nokern_2.png differ diff --git a/tests/fonts/rendered/paragraph4_nokern_3.png b/tests/fonts/rendered/paragraph4_nokern_3.png index 02c12541..cd5b41e9 100644 Binary files a/tests/fonts/rendered/paragraph4_nokern_3.png and b/tests/fonts/rendered/paragraph4_nokern_3.png differ diff --git a/tests/fonts/rendered/paragraph5.png b/tests/fonts/rendered/paragraph5.png index c19cb328..bc9b418c 100644 Binary files a/tests/fonts/rendered/paragraph5.png and b/tests/fonts/rendered/paragraph5.png differ diff --git a/tests/fonts/rendered/paragraph5_2.png b/tests/fonts/rendered/paragraph5_2.png index ac0685f8..ef4506eb 100644 Binary files a/tests/fonts/rendered/paragraph5_2.png and b/tests/fonts/rendered/paragraph5_2.png differ diff --git a/tests/fonts/rendered/paragraph5_3.png b/tests/fonts/rendered/paragraph5_3.png index 07dbeae4..5ea50c2b 100644 Binary files a/tests/fonts/rendered/paragraph5_3.png and b/tests/fonts/rendered/paragraph5_3.png differ diff --git a/tests/fonts/rendered/paragraph5_nokern.png b/tests/fonts/rendered/paragraph5_nokern.png index 98788bf3..ad9918cf 100644 Binary files a/tests/fonts/rendered/paragraph5_nokern.png and b/tests/fonts/rendered/paragraph5_nokern.png differ diff --git a/tests/fonts/rendered/paragraph5_nokern_2.png b/tests/fonts/rendered/paragraph5_nokern_2.png index 19f917fc..0767f3db 100644 Binary files a/tests/fonts/rendered/paragraph5_nokern_2.png and b/tests/fonts/rendered/paragraph5_nokern_2.png differ diff --git a/tests/fonts/rendered/paragraph5_nokern_3.png b/tests/fonts/rendered/paragraph5_nokern_3.png index 78ee9c3e..184bc962 100644 Binary files a/tests/fonts/rendered/paragraph5_nokern_3.png and b/tests/fonts/rendered/paragraph5_nokern_3.png differ diff --git a/tests/fonts/rendered/selection_rects1.png b/tests/fonts/rendered/selection_rects1.png index 0ccffed4..3529bd92 100644 Binary files a/tests/fonts/rendered/selection_rects1.png and b/tests/fonts/rendered/selection_rects1.png differ diff --git a/tests/fonts/rendered/selection_rects2.png b/tests/fonts/rendered/selection_rects2.png index 1c421da5..afb39fc6 100644 Binary files a/tests/fonts/rendered/selection_rects2.png and b/tests/fonts/rendered/selection_rects2.png differ diff --git a/tests/fonts/rendered/spans1.png b/tests/fonts/rendered/spans1.png index d8890576..a894b4f9 100644 Binary files a/tests/fonts/rendered/spans1.png and b/tests/fonts/rendered/spans1.png differ diff --git a/tests/fonts/rendered/spans2.png b/tests/fonts/rendered/spans2.png index 493f52b8..2c1a1253 100644 Binary files a/tests/fonts/rendered/spans2.png and b/tests/fonts/rendered/spans2.png differ diff --git a/tests/fonts/rendered/spans4.png b/tests/fonts/rendered/spans4.png index 52662eb3..b62dea46 100644 Binary files a/tests/fonts/rendered/spans4.png and b/tests/fonts/rendered/spans4.png differ diff --git a/tests/fonts/rendered/spans5.png b/tests/fonts/rendered/spans5.png index d5d305f8..54d2facc 100644 Binary files a/tests/fonts/rendered/spans5.png and b/tests/fonts/rendered/spans5.png differ diff --git a/tests/fonts/rendered/spans6.png b/tests/fonts/rendered/spans6.png index a5d6596c..60ee0c3d 100644 Binary files a/tests/fonts/rendered/spans6.png and b/tests/fonts/rendered/spans6.png differ diff --git a/tests/fonts/rendered/strikethrough3.png b/tests/fonts/rendered/strikethrough3.png index 699ffc57..b9b0e7df 100644 Binary files a/tests/fonts/rendered/strikethrough3.png and b/tests/fonts/rendered/strikethrough3.png differ diff --git a/tests/fonts/rendered/tofu_advance.png b/tests/fonts/rendered/tofu_advance.png index a1deb573..e913319c 100644 Binary files a/tests/fonts/rendered/tofu_advance.png and b/tests/fonts/rendered/tofu_advance.png differ diff --git a/tests/fonts/rendered/underline3.png b/tests/fonts/rendered/underline3.png index 2c7f62a6..4e0631df 100644 Binary files a/tests/fonts/rendered/underline3.png and b/tests/fonts/rendered/underline3.png differ diff --git a/tests/images/drawRoundedRect.png b/tests/images/drawRoundedRect.png index c3050ad5..906eceb5 100644 Binary files a/tests/images/drawRoundedRect.png and b/tests/images/drawRoundedRect.png differ diff --git a/tests/images/mask2image.png b/tests/images/mask2image.png index 91ccc81f..2a221202 100644 Binary files a/tests/images/mask2image.png and b/tests/images/mask2image.png differ diff --git a/tests/images/strokeEllipse.png b/tests/images/strokeEllipse.png index 3ef7e070..ffa70e0a 100644 Binary files a/tests/images/strokeEllipse.png and b/tests/images/strokeEllipse.png differ diff --git a/tests/images/strokePolygon.png b/tests/images/strokePolygon.png index 62b18160..1fc710ed 100644 Binary files a/tests/images/strokePolygon.png and b/tests/images/strokePolygon.png differ diff --git a/tests/images/strokeRoundedRect.png b/tests/images/strokeRoundedRect.png index 22dae203..1df75465 100644 Binary files a/tests/images/strokeRoundedRect.png and b/tests/images/strokeRoundedRect.png differ diff --git a/tests/masks/drawEllipse.png b/tests/masks/drawEllipse.png index 1f479612..58a2fb1b 100644 Binary files a/tests/masks/drawEllipse.png and b/tests/masks/drawEllipse.png differ diff --git a/tests/masks/drawRoundedRect.png b/tests/masks/drawRoundedRect.png index 13bb852d..ad1e5deb 100644 Binary files a/tests/masks/drawRoundedRect.png and b/tests/masks/drawRoundedRect.png differ diff --git a/tests/masks/maskMagnified.png b/tests/masks/maskMagnified.png index d2c9e78d..8a9127b5 100644 Binary files a/tests/masks/maskMagnified.png and b/tests/masks/maskMagnified.png differ diff --git a/tests/masks/maskMinified.png b/tests/masks/maskMinified.png index 1c10946b..c32c5981 100644 Binary files a/tests/masks/maskMinified.png and b/tests/masks/maskMinified.png differ diff --git a/tests/masks/strokeEllipse.png b/tests/masks/strokeEllipse.png index 76c08c76..a852c93e 100644 Binary files a/tests/masks/strokeEllipse.png and b/tests/masks/strokeEllipse.png differ diff --git a/tests/masks/strokePolygon.png b/tests/masks/strokePolygon.png index 3c8f6e14..5802ab0a 100644 Binary files a/tests/masks/strokePolygon.png and b/tests/masks/strokePolygon.png differ diff --git a/tests/masks/strokeRoundedRect.png b/tests/masks/strokeRoundedRect.png index ee372519..abebe114 100644 Binary files a/tests/masks/strokeRoundedRect.png and b/tests/masks/strokeRoundedRect.png differ diff --git a/tests/paths/arc.png b/tests/paths/arc.png index 8ac91b3c..f6abfbfb 100644 Binary files a/tests/paths/arc.png and b/tests/paths/arc.png differ diff --git a/tests/paths/arcTo1.png b/tests/paths/arcTo1.png index 4260f91a..a07975e3 100644 Binary files a/tests/paths/arcTo1.png and b/tests/paths/arcTo1.png differ diff --git a/tests/paths/arcTo2.png b/tests/paths/arcTo2.png index 422bd2f9..6a7b209b 100644 Binary files a/tests/paths/arcTo2.png and b/tests/paths/arcTo2.png differ diff --git a/tests/paths/arcTo3.png b/tests/paths/arcTo3.png index 8bb1cd2d..0b6c20fa 100644 Binary files a/tests/paths/arcTo3.png and b/tests/paths/arcTo3.png differ diff --git a/tests/paths/opacityStroke.png b/tests/paths/opacityStroke.png index 57f2b5d2..7e9ef5d4 100644 Binary files a/tests/paths/opacityStroke.png and b/tests/paths/opacityStroke.png differ diff --git a/tests/paths/pathRotatedArc.png b/tests/paths/pathRotatedArc.png index 4e3886a3..8405e7e6 100644 Binary files a/tests/paths/pathRotatedArc.png and b/tests/paths/pathRotatedArc.png differ diff --git a/tests/paths/pixelScale.png b/tests/paths/pixelScale.png index eb4bf095..d27f29dc 100644 Binary files a/tests/paths/pixelScale.png and b/tests/paths/pixelScale.png differ