merge hits that stop and then continue filling without any gap
Before ![]() (image error) Size: 42 KiB After ![]() (image error) Size: 42 KiB ![]() ![]() |
|
@ -1171,9 +1171,9 @@ iterator walk(
|
|||
width: float32
|
||||
): (float32, float32, int) =
|
||||
var
|
||||
i, count: int
|
||||
prevAt: float32
|
||||
count: int
|
||||
for i in 0 ..< numHits:
|
||||
while i < numHits:
|
||||
let (at, winding) = hits[i]
|
||||
if windingRule == wrNonZero and
|
||||
count != 0 and
|
||||
|
@ -1182,12 +1182,23 @@ iterator walk(
|
|||
# Shortcut: if nonzero rule, we only care about when the count changes
|
||||
# between zero and nonzero (or the last hit)
|
||||
count += winding
|
||||
inc i
|
||||
continue
|
||||
if at > 0:
|
||||
if shouldFill(windingRule, count):
|
||||
# Look ahead to see if the next hit is in the same spot as this hit.
|
||||
# If it is, see if this and the next hit's windings cancel out.
|
||||
# If they do, skip the hits and do not yield yet. It will be yielded
|
||||
# later in a larger chunk.
|
||||
if i < numHits - 1:
|
||||
let (nextAt, nextWinding) = hits[i + 1]
|
||||
if nextAt == at and winding + nextWinding == 0:
|
||||
i += 2
|
||||
continue
|
||||
yield (prevAt, at, count)
|
||||
prevAt = at
|
||||
count += winding
|
||||
inc i
|
||||
|
||||
when defined(pixieLeakCheck):
|
||||
if prevAt != width and count != 0:
|
||||
|
|
Before ![]() (image error) Size: 2.4 KiB After ![]() (image error) Size: 2.4 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.7 KiB After ![]() (image error) Size: 2.7 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.6 KiB After ![]() (image error) Size: 2.6 KiB ![]() ![]() |
Before ![]() (image error) Size: 3.6 KiB After ![]() (image error) Size: 3.6 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.3 KiB After ![]() (image error) Size: 2.3 KiB ![]() ![]() |
Before ![]() (image error) Size: 6.9 KiB After ![]() (image error) Size: 6.9 KiB ![]() ![]() |
Before ![]() (image error) Size: 260 KiB After ![]() (image error) Size: 260 KiB ![]() ![]() |
Before ![]() (image error) Size: 9.4 KiB After ![]() (image error) Size: 8.8 KiB ![]() ![]() |
Before ![]() (image error) Size: 28 KiB After ![]() (image error) Size: 26 KiB ![]() ![]() |
Before ![]() (image error) Size: 24 KiB After ![]() (image error) Size: 24 KiB ![]() ![]() |
Before ![]() (image error) Size: 13 KiB After ![]() (image error) Size: 13 KiB ![]() ![]() |
Before ![]() (image error) Size: 32 KiB After ![]() (image error) Size: 31 KiB ![]() ![]() |
Before ![]() (image error) Size: 25 KiB After ![]() (image error) Size: 23 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.4 MiB After ![]() (image error) Size: 2.4 MiB ![]() ![]() |
Before ![]() (image error) Size: 280 KiB After ![]() (image error) Size: 280 KiB ![]() ![]() |
Before ![]() (image error) Size: 644 KiB After ![]() (image error) Size: 644 KiB ![]() ![]() |
Before ![]() (image error) Size: 783 KiB After ![]() (image error) Size: 783 KiB ![]() ![]() |
Before ![]() (image error) Size: 3.4 MiB After ![]() (image error) Size: 3.4 MiB ![]() ![]() |
Before ![]() (image error) Size: 358 KiB After ![]() (image error) Size: 357 KiB ![]() ![]() |
Before ![]() (image error) Size: 14 KiB After ![]() (image error) Size: 14 KiB ![]() ![]() |
Before ![]() (image error) Size: 30 KiB After ![]() (image error) Size: 28 KiB ![]() ![]() |
Before ![]() (image error) Size: 26 KiB After ![]() (image error) Size: 25 KiB ![]() ![]() |
Before ![]() (image error) Size: 24 KiB After ![]() (image error) Size: 24 KiB ![]() ![]() |
Before ![]() (image error) Size: 37 KiB After ![]() (image error) Size: 37 KiB ![]() ![]() |
Before ![]() (image error) Size: 31 KiB After ![]() (image error) Size: 29 KiB ![]() ![]() |
Before ![]() (image error) Size: 1.4 MiB After ![]() (image error) Size: 1.4 MiB ![]() ![]() |
Before ![]() (image error) Size: 610 KiB After ![]() (image error) Size: 610 KiB ![]() ![]() |
Before ![]() (image error) Size: 519 KiB After ![]() (image error) Size: 519 KiB ![]() ![]() |
Before ![]() (image error) Size: 3.9 MiB After ![]() (image error) Size: 3.9 MiB ![]() ![]() |
Before ![]() (image error) Size: 6.5 KiB After ![]() (image error) Size: 6.5 KiB ![]() ![]() |
Before ![]() (image error) Size: 7.5 KiB After ![]() (image error) Size: 7.5 KiB ![]() ![]() |
Before ![]() (image error) Size: 8.5 KiB After ![]() (image error) Size: 8.4 KiB ![]() ![]() |
Before ![]() (image error) Size: 8.1 KiB After ![]() (image error) Size: 8 KiB ![]() ![]() |
Before ![]() (image error) Size: 6.9 KiB After ![]() (image error) Size: 6.9 KiB ![]() ![]() |
Before ![]() (image error) Size: 7.2 KiB After ![]() (image error) Size: 7.2 KiB ![]() ![]() |
Before ![]() (image error) Size: 8 KiB After ![]() (image error) Size: 8 KiB ![]() ![]() |
Before ![]() (image error) Size: 7.8 KiB After ![]() (image error) Size: 7.8 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.9 KiB After ![]() (image error) Size: 2.6 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.4 KiB After ![]() (image error) Size: 2.4 KiB ![]() ![]() |
Before ![]() (image error) Size: 1.7 KiB After ![]() (image error) Size: 1.5 KiB ![]() ![]() |
Before ![]() (image error) Size: 1.1 KiB After ![]() (image error) Size: 1,002 B ![]() ![]() |
Before ![]() (image error) Size: 1.4 KiB After ![]() (image error) Size: 1.4 KiB ![]() ![]() |
Before ![]() (image error) Size: 893 B After ![]() (image error) Size: 836 B ![]() ![]() |
Before ![]() (image error) Size: 8.3 KiB After ![]() (image error) Size: 8.3 KiB ![]() ![]() |
Before ![]() (image error) Size: 3.7 KiB After ![]() (image error) Size: 3.6 KiB ![]() ![]() |
Before ![]() (image error) Size: 2.9 KiB After ![]() (image error) Size: 2.7 KiB ![]() ![]() |
Before ![]() (image error) Size: 1.8 KiB After ![]() (image error) Size: 1.7 KiB ![]() ![]() |
Before ![]() (image error) Size: 8.2 KiB After ![]() (image error) Size: 8.1 KiB ![]() ![]() |