small comment things
This commit is contained in:
parent
34b5f07f1f
commit
7b9d968381
5 changed files with 62 additions and 54 deletions
|
@ -52,13 +52,13 @@ proc writeFile*(image: Image, filePath: string) =
|
||||||
image.writeFile(filePath, fileformat)
|
image.writeFile(filePath, fileformat)
|
||||||
|
|
||||||
proc fillRect*(image: Image, rect: Rect, color: ColorRGBA) =
|
proc fillRect*(image: Image, rect: Rect, color: ColorRGBA) =
|
||||||
## Fill a rectangle.
|
## Fills a rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.rect(rect)
|
path.rect(rect)
|
||||||
image.fillPath(path, color)
|
image.fillPath(path, color)
|
||||||
|
|
||||||
proc fillRect*(mask: Mask, rect: Rect) =
|
proc fillRect*(mask: Mask, rect: Rect) =
|
||||||
## Fill a rectangle.
|
## Fills a rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.rect(rect)
|
path.rect(rect)
|
||||||
mask.fillPath(path)
|
mask.fillPath(path)
|
||||||
|
@ -66,13 +66,13 @@ proc fillRect*(mask: Mask, rect: Rect) =
|
||||||
proc strokeRect*(
|
proc strokeRect*(
|
||||||
image: Image, rect: Rect, color: ColorRGBA, strokeWidth = 1.0
|
image: Image, rect: Rect, color: ColorRGBA, strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke a rounded rectangle.
|
## Strokes a rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.rect(rect)
|
path.rect(rect)
|
||||||
image.strokePath(path, color, strokeWidth)
|
image.strokePath(path, color, strokeWidth)
|
||||||
|
|
||||||
proc strokeRect*(mask: Mask, rect: Rect, strokeWidth = 1.0) =
|
proc strokeRect*(mask: Mask, rect: Rect, strokeWidth = 1.0) =
|
||||||
## Stroke a rounded rectangle.
|
## Strokes a rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.rect(rect)
|
path.rect(rect)
|
||||||
mask.strokePath(path, strokeWidth)
|
mask.strokePath(path, strokeWidth)
|
||||||
|
@ -83,7 +83,7 @@ proc fillRoundedRect*(
|
||||||
nw, ne, se, sw: float32,
|
nw, ne, se, sw: float32,
|
||||||
color: ColorRGBA
|
color: ColorRGBA
|
||||||
) =
|
) =
|
||||||
## Fill a rounded rectangle.
|
## Fills a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, nw, ne, se, sw)
|
path.roundedRect(rect, nw, ne, se, sw)
|
||||||
image.fillPath(path, color)
|
image.fillPath(path, color)
|
||||||
|
@ -94,19 +94,19 @@ proc fillRoundedRect*(
|
||||||
radius: float32,
|
radius: float32,
|
||||||
color: ColorRGBA
|
color: ColorRGBA
|
||||||
) =
|
) =
|
||||||
## Fill a rounded rectangle.
|
## Fills a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, radius, radius, radius, radius)
|
path.roundedRect(rect, radius, radius, radius, radius)
|
||||||
image.fillPath(path, color)
|
image.fillPath(path, color)
|
||||||
|
|
||||||
proc fillRoundedRect*(mask: Mask, rect: Rect, nw, ne, se, sw: float32) =
|
proc fillRoundedRect*(mask: Mask, rect: Rect, nw, ne, se, sw: float32) =
|
||||||
## Fill a rounded rectangle.
|
## Fills a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, nw, ne, se, sw)
|
path.roundedRect(rect, nw, ne, se, sw)
|
||||||
mask.fillPath(path)
|
mask.fillPath(path)
|
||||||
|
|
||||||
proc fillRoundedRect*(mask: Mask, rect: Rect, radius: float32) =
|
proc fillRoundedRect*(mask: Mask, rect: Rect, radius: float32) =
|
||||||
## Fill a rounded rectangle.
|
## Fills a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, radius, radius, radius, radius)
|
path.roundedRect(rect, radius, radius, radius, radius)
|
||||||
mask.fillPath(path)
|
mask.fillPath(path)
|
||||||
|
@ -118,7 +118,7 @@ proc strokeRoundedRect*(
|
||||||
color: ColorRGBA,
|
color: ColorRGBA,
|
||||||
strokeWidth = 1.0
|
strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke a rounded rectangle.
|
## Strokes a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, nw, ne, se, sw)
|
path.roundedRect(rect, nw, ne, se, sw)
|
||||||
image.strokePath(path, color, strokeWidth)
|
image.strokePath(path, color, strokeWidth)
|
||||||
|
@ -130,7 +130,7 @@ proc strokeRoundedRect*(
|
||||||
color: ColorRGBA,
|
color: ColorRGBA,
|
||||||
strokeWidth = 1.0
|
strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke a rounded rectangle.
|
## Strokes a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, radius, radius, radius, radius)
|
path.roundedRect(rect, radius, radius, radius, radius)
|
||||||
image.strokePath(path, color, strokeWidth)
|
image.strokePath(path, color, strokeWidth)
|
||||||
|
@ -138,7 +138,7 @@ proc strokeRoundedRect*(
|
||||||
proc strokeRoundedRect*(
|
proc strokeRoundedRect*(
|
||||||
mask: Mask, rect: Rect, nw, ne, se, sw: float32, strokeWidth = 1.0
|
mask: Mask, rect: Rect, nw, ne, se, sw: float32, strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke a rounded rectangle.
|
## Strokes a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, nw, ne, se, sw)
|
path.roundedRect(rect, nw, ne, se, sw)
|
||||||
mask.strokePath(path, strokeWidth)
|
mask.strokePath(path, strokeWidth)
|
||||||
|
@ -146,7 +146,7 @@ proc strokeRoundedRect*(
|
||||||
proc strokeRoundedRect*(
|
proc strokeRoundedRect*(
|
||||||
mask: Mask, rect: Rect, radius: float32, strokeWidth = 1.0
|
mask: Mask, rect: Rect, radius: float32, strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke a rounded rectangle.
|
## Strokes a rounded rectangle.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.roundedRect(rect, radius, radius, radius, radius)
|
path.roundedRect(rect, radius, radius, radius, radius)
|
||||||
mask.strokePath(path, strokeWidth)
|
mask.strokePath(path, strokeWidth)
|
||||||
|
@ -157,14 +157,14 @@ proc strokeSegment*(
|
||||||
color: ColorRGBA,
|
color: ColorRGBA,
|
||||||
strokeWidth = 1.0
|
strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke a segment (draws a line from segment.at to segment.to).
|
## Strokes a segment (draws a line from segment.at to segment.to).
|
||||||
var path: Path
|
var path: Path
|
||||||
path.moveTo(segment.at)
|
path.moveTo(segment.at)
|
||||||
path.lineTo(segment.to)
|
path.lineTo(segment.to)
|
||||||
image.strokePath(path, color, strokeWidth)
|
image.strokePath(path, color, strokeWidth)
|
||||||
|
|
||||||
proc strokeSegment*(mask: Mask, segment: Segment, strokeWidth: float32) =
|
proc strokeSegment*(mask: Mask, segment: Segment, strokeWidth: float32) =
|
||||||
## Stroke a segment (draws a line from segment.at to segment.to).
|
## Strokes a segment (draws a line from segment.at to segment.to).
|
||||||
var path: Path
|
var path: Path
|
||||||
path.moveTo(segment.at)
|
path.moveTo(segment.at)
|
||||||
path.lineTo(segment.to)
|
path.lineTo(segment.to)
|
||||||
|
@ -177,7 +177,7 @@ proc fillEllipse*(
|
||||||
color: ColorRGBA,
|
color: ColorRGBA,
|
||||||
blendMode = bmNormal
|
blendMode = bmNormal
|
||||||
) =
|
) =
|
||||||
## Fill an ellipse.
|
## Fills an ellipse.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.ellipse(center, rx, ry)
|
path.ellipse(center, rx, ry)
|
||||||
image.fillPath(path, color, wrNonZero, blendMode)
|
image.fillPath(path, color, wrNonZero, blendMode)
|
||||||
|
@ -187,7 +187,7 @@ proc fillEllipse*(
|
||||||
center: Vec2,
|
center: Vec2,
|
||||||
rx, ry: float32
|
rx, ry: float32
|
||||||
) =
|
) =
|
||||||
## Fill an ellipse.
|
## Fills an ellipse.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.ellipse(center, rx, ry)
|
path.ellipse(center, rx, ry)
|
||||||
mask.fillPath(path)
|
mask.fillPath(path)
|
||||||
|
@ -199,7 +199,7 @@ proc strokeEllipse*(
|
||||||
color: ColorRGBA,
|
color: ColorRGBA,
|
||||||
strokeWidth = 1.0
|
strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke an ellipse.
|
## Strokes an ellipse.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.ellipse(center, rx, ry)
|
path.ellipse(center, rx, ry)
|
||||||
image.strokePath(path, color, strokeWidth)
|
image.strokePath(path, color, strokeWidth)
|
||||||
|
@ -210,7 +210,7 @@ proc strokeEllipse*(
|
||||||
rx, ry: float32,
|
rx, ry: float32,
|
||||||
strokeWidth = 1.0
|
strokeWidth = 1.0
|
||||||
) =
|
) =
|
||||||
## Stroke an ellipse.
|
## Strokes an ellipse.
|
||||||
var path: Path
|
var path: Path
|
||||||
path.ellipse(center, rx, ry)
|
path.ellipse(center, rx, ry)
|
||||||
mask.strokePath(path, strokeWidth)
|
mask.strokePath(path, strokeWidth)
|
||||||
|
|
|
@ -210,15 +210,15 @@ proc blendMultiply(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
result.b = blend(backdrop.b, backdrop.a, source.b, source.a)
|
result.b = blend(backdrop.b, backdrop.a, source.b, source.a)
|
||||||
result.a = blendAlpha(backdrop.a, source.a)
|
result.a = blendAlpha(backdrop.a, source.a)
|
||||||
|
|
||||||
proc blendLinearBurn(backdrop, source: ColorRGBA): ColorRGBA =
|
# proc blendLinearBurn(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
let
|
# let
|
||||||
backdrop = backdrop.toStraightAlpha()
|
# backdrop = backdrop.toStraightAlpha()
|
||||||
source = source.toStraightAlpha()
|
# source = source.toStraightAlpha()
|
||||||
result.r = min(0, backdrop.r.int32 + source.r.int32 - 255).uint8
|
# result.r = min(0, backdrop.r.int32 + source.r.int32 - 255).uint8
|
||||||
result.g = min(0, backdrop.g.int32 + source.g.int32 - 255).uint8
|
# result.g = min(0, backdrop.g.int32 + source.g.int32 - 255).uint8
|
||||||
result.b = min(0, backdrop.b.int32 + source.b.int32 - 255).uint8
|
# result.b = min(0, backdrop.b.int32 + source.b.int32 - 255).uint8
|
||||||
result = alphaFix(backdrop, source, result)
|
# result = alphaFix(backdrop, source, result)
|
||||||
result = result.toPremultipliedAlpha()
|
# result = result.toPremultipliedAlpha()
|
||||||
|
|
||||||
proc blendColorBurn(backdrop, source: ColorRGBA): ColorRGBA =
|
proc blendColorBurn(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
let
|
let
|
||||||
|
@ -257,15 +257,15 @@ proc blendScreen(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
result.b = screen(backdrop.b, source.b)
|
result.b = screen(backdrop.b, source.b)
|
||||||
result.a = blendAlpha(backdrop.a, source.a)
|
result.a = blendAlpha(backdrop.a, source.a)
|
||||||
|
|
||||||
proc blendLinearDodge(backdrop, source: ColorRGBA): ColorRGBA =
|
# proc blendLinearDodge(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
let
|
# let
|
||||||
backdrop = backdrop.toStraightAlpha()
|
# backdrop = backdrop.toStraightAlpha()
|
||||||
source = source.toStraightAlpha()
|
# source = source.toStraightAlpha()
|
||||||
result.r = min(backdrop.r.uint32 + source.r, 255).uint8
|
# result.r = min(backdrop.r.uint32 + source.r, 255).uint8
|
||||||
result.g = min(backdrop.g.uint32 + source.g, 255).uint8
|
# result.g = min(backdrop.g.uint32 + source.g, 255).uint8
|
||||||
result.b = min(backdrop.b.uint32 + source.b, 255).uint8
|
# result.b = min(backdrop.b.uint32 + source.b, 255).uint8
|
||||||
result = alphaFix(backdrop, source, result)
|
# result = alphaFix(backdrop, source, result)
|
||||||
result = result.toPremultipliedAlpha()
|
# result = result.toPremultipliedAlpha()
|
||||||
|
|
||||||
proc blendColorDodge(backdrop, source: ColorRGBA): ColorRGBA =
|
proc blendColorDodge(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
let
|
let
|
||||||
|
@ -449,9 +449,9 @@ proc blendExcludeMask(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
proc blendOverwrite(backdrop, source: ColorRGBA): ColorRGBA =
|
proc blendOverwrite(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
source
|
source
|
||||||
|
|
||||||
proc blendWhite(backdrop, source: ColorRGBA): ColorRGBA =
|
# proc blendWhite(backdrop, source: ColorRGBA): ColorRGBA =
|
||||||
## For testing
|
# ## For testing
|
||||||
rgba(255, 255, 255, 255)
|
# rgba(255, 255, 255, 255)
|
||||||
|
|
||||||
proc blender*(blendMode: BlendMode): Blender =
|
proc blender*(blendMode: BlendMode): Blender =
|
||||||
## Returns a blend function for a given blend mode.
|
## Returns a blend function for a given blend mode.
|
||||||
|
|
|
@ -339,7 +339,7 @@ proc draw(img: Image, node: XmlNode, ctxStack: var seq[Ctx]) =
|
||||||
raise newException(PixieError, "Unsupported SVG tag: " & node.tag & ".")
|
raise newException(PixieError, "Unsupported SVG tag: " & node.tag & ".")
|
||||||
|
|
||||||
proc decodeSvg*(data: string, width = 0, height = 0): Image =
|
proc decodeSvg*(data: string, width = 0, height = 0): Image =
|
||||||
## Render SVG file and return the image.
|
## Render SVG file and return the image. Defaults to the SVG's view box size.
|
||||||
try:
|
try:
|
||||||
let root = parseXml(data)
|
let root = parseXml(data)
|
||||||
if root.tag != "svg":
|
if root.tag != "svg":
|
||||||
|
|
|
@ -200,7 +200,7 @@ proc minifyBy2*(image: Image, power = 1): Image =
|
||||||
src = result
|
src = result
|
||||||
|
|
||||||
proc magnifyBy2*(image: Image, power = 1): Image =
|
proc magnifyBy2*(image: Image, power = 1): Image =
|
||||||
## Scales image image up by 2 ^ power.
|
## Scales image up by 2 ^ power.
|
||||||
if power < 0:
|
if power < 0:
|
||||||
raise newException(PixieError, "Cannot magnifyBy2 with negative power")
|
raise newException(PixieError, "Cannot magnifyBy2 with negative power")
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ when defined(release):
|
||||||
{.push checks: off.}
|
{.push checks: off.}
|
||||||
|
|
||||||
proc maxScale(m: Mat3): float32 =
|
proc maxScale(m: Mat3): float32 =
|
||||||
## What is the largest scale of this matrix.
|
## What is the largest scale factor of this matrix?
|
||||||
max(
|
max(
|
||||||
vec2(m[0, 0], m[0, 1]).length,
|
vec2(m[0, 0], m[0, 1]).length,
|
||||||
vec2(m[1, 0], m[1, 1]).length
|
vec2(m[1, 0], m[1, 1]).length
|
||||||
|
@ -89,7 +89,7 @@ proc `$`*(path: Path): string =
|
||||||
result.add " "
|
result.add " "
|
||||||
|
|
||||||
proc parsePath*(path: string): Path =
|
proc parsePath*(path: string): Path =
|
||||||
## Converts a SVG style path into seq of commands.
|
## Converts a SVG style path string into seq of commands.
|
||||||
|
|
||||||
if path.len == 0:
|
if path.len == 0:
|
||||||
return
|
return
|
||||||
|
@ -398,7 +398,9 @@ proc arcTo*(path: var Path, ctrl1, ctrl2: Vec2, radius: float32) {.inline.} =
|
||||||
))
|
))
|
||||||
path.at = to
|
path.at = to
|
||||||
|
|
||||||
proc arcTo*(path: var Path, x1, y1, x2, y2, radius: float32) =
|
proc arcTo*(path: var Path, x1, y1, x2, y2, radius: float32) {.inline.} =
|
||||||
|
## Adds a circular arc to the current sub-path, using the given control
|
||||||
|
## points and radius.
|
||||||
path.arcTo(vec2(x1, y1), vec2(x2, y2), radius)
|
path.arcTo(vec2(x1, y1), vec2(x2, y2), radius)
|
||||||
|
|
||||||
proc ellipticalArcTo*(
|
proc ellipticalArcTo*(
|
||||||
|
@ -419,6 +421,9 @@ proc ellipticalArcTo*(
|
||||||
path.at = vec2(x, y)
|
path.at = vec2(x, y)
|
||||||
|
|
||||||
proc rect*(path: var Path, x, y, w, h: float32, clockwise = true) =
|
proc rect*(path: var Path, x, y, w, h: float32, clockwise = true) =
|
||||||
|
## Adds a rectangle.
|
||||||
|
## Clockwise param can be used to subtract a rect from a path when using
|
||||||
|
## even-odd winding rule.
|
||||||
if clockwise:
|
if clockwise:
|
||||||
path.moveTo(x, y)
|
path.moveTo(x, y)
|
||||||
path.lineTo(x + w, y)
|
path.lineTo(x + w, y)
|
||||||
|
@ -434,12 +439,14 @@ proc rect*(path: var Path, x, y, w, h: float32, clockwise = true) =
|
||||||
|
|
||||||
proc rect*(path: var Path, pos: Vec2, wh: Vec2, clockwise = true) {.inline.} =
|
proc rect*(path: var Path, pos: Vec2, wh: Vec2, clockwise = true) {.inline.} =
|
||||||
## Adds a rectangle.
|
## Adds a rectangle.
|
||||||
## Clockwise param can be used to subtract a rect from a path using even-odd.
|
## Clockwise param can be used to subtract a rect from a path when using
|
||||||
|
## even-odd winding rule.
|
||||||
path.rect(pos.x, pos.y, wh.x, wh.y, clockwise)
|
path.rect(pos.x, pos.y, wh.x, wh.y, clockwise)
|
||||||
|
|
||||||
proc rect*(path: var Path, rect: Rect, clockwise = true) {.inline.} =
|
proc rect*(path: var Path, rect: Rect, clockwise = true) {.inline.} =
|
||||||
## Adds a rectangle.
|
## Adds a rectangle.
|
||||||
## Clockwise param can be used to subtract a rect from a path using even-odd.
|
## Clockwise param can be used to subtract a rect from a path when using
|
||||||
|
## even-odd winding rule.
|
||||||
path.rect(rect.x, rect.y, rect.w, rect.h, clockwise)
|
path.rect(rect.x, rect.y, rect.w, rect.h, clockwise)
|
||||||
|
|
||||||
const splineCircleK = 4.0 * (-1.0 + sqrt(2.0)) / 3
|
const splineCircleK = 4.0 * (-1.0 + sqrt(2.0)) / 3
|
||||||
|
@ -450,7 +457,8 @@ proc roundedRect*(
|
||||||
path: var Path, x, y, w, h, nw, ne, se, sw: float32, clockwise = true
|
path: var Path, x, y, w, h, nw, ne, se, sw: float32, clockwise = true
|
||||||
) =
|
) =
|
||||||
## Adds a rounded rectangle.
|
## Adds a rounded rectangle.
|
||||||
## Clockwise param can be used to subtract a rect from a path using even-odd.
|
## Clockwise param can be used to subtract a rect from a path when using
|
||||||
|
## even-odd winding rule.
|
||||||
let
|
let
|
||||||
s = splineCircleK
|
s = splineCircleK
|
||||||
|
|
||||||
|
@ -505,14 +513,16 @@ proc roundedRect*(
|
||||||
path: var Path, pos, wh: Vec2, nw, ne, se, sw: float32, clockwise = true
|
path: var Path, pos, wh: Vec2, nw, ne, se, sw: float32, clockwise = true
|
||||||
) {.inline.} =
|
) {.inline.} =
|
||||||
## Adds a rounded rectangle.
|
## Adds a rounded rectangle.
|
||||||
## Clockwise param can be used to subtract a rect from a path using even-odd.
|
## Clockwise param can be used to subtract a rect from a path when using
|
||||||
|
## even-odd winding rule.
|
||||||
path.roundedRect(pos.x, pos.y, wh.x, wh.y, nw, ne, se, sw, clockwise)
|
path.roundedRect(pos.x, pos.y, wh.x, wh.y, nw, ne, se, sw, clockwise)
|
||||||
|
|
||||||
proc roundedRect*(
|
proc roundedRect*(
|
||||||
path: var Path, rect: Rect, nw, ne, se, sw: float32, clockwise = true
|
path: var Path, rect: Rect, nw, ne, se, sw: float32, clockwise = true
|
||||||
) {.inline.} =
|
) {.inline.} =
|
||||||
## Adds a rounded rectangle.
|
## Adds a rounded rectangle.
|
||||||
## Clockwise param can be used to subtract a rect from a path using even-odd.
|
## Clockwise param can be used to subtract a rect from a path when using
|
||||||
|
## even-odd winding rule.
|
||||||
path.roundedRect(rect.x, rect.y, rect.w, rect.h, nw, ne, se, sw, clockwise)
|
path.roundedRect(rect.x, rect.y, rect.w, rect.h, nw, ne, se, sw, clockwise)
|
||||||
|
|
||||||
proc ellipse*(path: var Path, cx, cy, rx, ry: float32) =
|
proc ellipse*(path: var Path, cx, cy, rx, ry: float32) =
|
||||||
|
@ -533,7 +543,7 @@ proc ellipse*(path: var Path, center: Vec2, rx, ry: float32) {.inline.} =
|
||||||
path.ellipse(center.x, center.y, rx, ry)
|
path.ellipse(center.x, center.y, rx, ry)
|
||||||
|
|
||||||
proc polygon*(path: var Path, x, y, size: float32, sides: int) =
|
proc polygon*(path: var Path, x, y, size: float32, sides: int) =
|
||||||
## Draws a n-sided regular polygon at (x, y) with a size.
|
## Draws an n-sided regular polygon at (x, y) with the parameter size.
|
||||||
path.moveTo(x + size * cos(0.0), y + size * sin(0.0))
|
path.moveTo(x + size * cos(0.0), y + size * sin(0.0))
|
||||||
for side in 0 .. sides:
|
for side in 0 .. sides:
|
||||||
path.lineTo(
|
path.lineTo(
|
||||||
|
@ -542,12 +552,11 @@ proc polygon*(path: var Path, x, y, size: float32, sides: int) =
|
||||||
)
|
)
|
||||||
|
|
||||||
proc polygon*(path: var Path, pos: Vec2, size: float32, sides: int) {.inline.} =
|
proc polygon*(path: var Path, pos: Vec2, size: float32, sides: int) {.inline.} =
|
||||||
## Draws a n-sided regular polygon at (x, y) with a size.
|
## Draws a n-sided regular polygon at (x, y) with the parameter size.
|
||||||
path.polygon(pos.x, pos.y, size, sides)
|
path.polygon(pos.x, pos.y, size, sides)
|
||||||
|
|
||||||
proc commandsToShapes*(path: Path, pixelScale: float32 = 1.0): seq[seq[Vec2]] =
|
proc commandsToShapes*(path: Path, pixelScale: float32 = 1.0): seq[seq[Vec2]] =
|
||||||
## Converts SVG-like commands to line segments.
|
## Converts SVG-like commands to line segments.
|
||||||
|
|
||||||
var
|
var
|
||||||
start, at: Vec2
|
start, at: Vec2
|
||||||
shape: seq[Vec2]
|
shape: seq[Vec2]
|
||||||
|
@ -910,7 +919,7 @@ iterator segments*(s: seq[Vec2]): Segment =
|
||||||
yield(segment(s[i], s[i + 1]))
|
yield(segment(s[i], s[i + 1]))
|
||||||
|
|
||||||
proc quickSort(a: var seq[(float32, int16)], inl, inr: int) =
|
proc quickSort(a: var seq[(float32, int16)], inl, inr: int) =
|
||||||
## Quick sorts inline faster then standard lib.
|
## Sorts in place + faster than standard lib sort.
|
||||||
var
|
var
|
||||||
r = inr
|
r = inr
|
||||||
l = inl
|
l = inl
|
||||||
|
@ -966,7 +975,6 @@ proc partitionSegments(
|
||||||
shapes: seq[seq[Vec2]], height: int
|
shapes: seq[seq[Vec2]], height: int
|
||||||
): seq[seq[(Segment, int16)]] =
|
): seq[seq[(Segment, int16)]] =
|
||||||
## Puts segments into the height partitions they intersect with.
|
## Puts segments into the height partitions they intersect with.
|
||||||
|
|
||||||
var segmentCount: int
|
var segmentCount: int
|
||||||
for shape in shapes:
|
for shape in shapes:
|
||||||
segmentCount += shape.len - 1
|
segmentCount += shape.len - 1
|
||||||
|
|
Loading…
Reference in a new issue