diff --git a/src/pixie/fileformats/svg.nim b/src/pixie/fileformats/svg.nim index 683fe68..3e0437e 100644 --- a/src/pixie/fileformats/svg.nim +++ b/src/pixie/fileformats/svg.nim @@ -8,6 +8,8 @@ const svgSignature* = "<?xml" type Ctx = object fill, stroke: ColorRGBA strokeWidth: float32 + strokeLineCap: LineCap + strokeLineJoin: LineJoin transform: Mat3 template failInvalid() = @@ -25,6 +27,8 @@ proc decodeCtx(inherited: Ctx, node: XmlNode): Ctx = fill = node.attr("fill") stroke = node.attr("stroke") strokeWidth = node.attr("stroke-width") + strokeLineCap = node.attr("stroke-linecap") + strokeLineJoin = node.attr("stroke-linejoin") transform = node.attr("transform") if fill == "": @@ -46,6 +50,40 @@ proc decodeCtx(inherited: Ctx, node: XmlNode): Ctx = else: result.strokeWidth = parseFloat(strokeWidth) + if strokeLineCap == "": + discard # Inherit + else: + case strokeLineCap: + of "butt": + result.strokeLineCap = lcButt + of "round": + result.strokeLineCap = lcRound + of "square": + result.strokeLineCap = lcSquare + of "inherit": + discard + else: + raise newException( + PixieError, "Invalid stroke-linecap value " & strokeLineCap + ) + + if strokeLineJoin == "": + discard # Inherit + else: + case strokeLineJoin: + of "miter": + result.strokeLineJoin = ljMiter + of "round": + result.strokeLineJoin = ljRound + of "bevel": + result.strokeLineJoin = ljBevel + of "inherit": + discard + else: + raise newException( + PixieError, "Invalid stroke-linejoin value " & strokeLineJoin + ) + if transform == "": discard # Inherit else: diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index 48cf6d1..3bef039 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -8,6 +8,12 @@ type wrNonZero wrEvenOdd + LineCap* = enum + lcButt, lcRound, lcSquare + + LineJoin* = enum + ljMiter, ljRound, ljBevel + PathCommandKind* = enum ## Type of path commands Close,