From 4f60e87ef4fac546c5b15d4e9ef7423eefc71b73 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Sat, 23 Jul 2022 19:13:23 -0500 Subject: [PATCH] copy proc consistent --- bindings/bindings.nim | 4 +++- src/pixie/contexts.nim | 7 +++---- src/pixie/fileformats/svg.nim | 2 +- src/pixie/fonts.nim | 11 +++++++++++ src/pixie/images.nim | 6 ++++-- src/pixie/masks.nim | 6 ++++-- src/pixie/paints.nim | 2 +- src/pixie/paths.nim | 6 ++++++ 8 files changed, 33 insertions(+), 11 deletions(-) diff --git a/bindings/bindings.nim b/bindings/bindings.nim index b47c7f6..a6a867c 100644 --- a/bindings/bindings.nim +++ b/bindings/bindings.nim @@ -182,12 +182,13 @@ exportRefObject Paint: constructor: newPaint(PaintKind) procs: - newPaint(Paint) + copy(Paint) exportRefObject Path: constructor: newPath procs: + copy(Path) transform(Path, Mat3) addPath(Path, Path) closePath(Path) @@ -233,6 +234,7 @@ exportRefObject Font: strikethrough noKerningAdjustments procs: + copy(Font) scale(Font) defaultLineHeight typeset(Font, string, Vec2, HorizontalAlignment, VerticalAlignment, bool) diff --git a/src/pixie/contexts.nim b/src/pixie/contexts.nim index 1e48e5a..ee2d0d1 100644 --- a/src/pixie/contexts.nim +++ b/src/pixie/contexts.nim @@ -88,13 +88,12 @@ proc state(ctx: Context): ContextState = result.mat = ctx.mat result.mask = if ctx.mask != nil: ctx.mask.copy() else: nil -proc save*(ctx: Context) {.inline, raises: [PixieError].} = +proc save*(ctx: Context) {.inline, raises: [].} = ## Saves the entire state of the context by pushing the current state onto ## a stack. ctx.stateStack.add(ctx.state()) - - ctx.fillStyle = newPaint(ctx.fillStyle) - ctx.strokeStyle = newPaint(ctx.strokeStyle) + ctx.fillStyle = ctx.fillStyle.copy() + ctx.strokeStyle = ctx.strokeStyle.copy() proc saveLayer*(ctx: Context) {.raises: [PixieError].} = ## Saves the entire state of the context by pushing the current state onto diff --git a/src/pixie/fileformats/svg.nim b/src/pixie/fileformats/svg.nim index 47c3b6a..c4f70dd 100644 --- a/src/pixie/fileformats/svg.nim +++ b/src/pixie/fileformats/svg.nim @@ -581,7 +581,7 @@ proc newImage*(svg: Svg): Image {.raises: [PixieError].} = blendMode = NormalBlend # Switch to normal when compositing multiple paths if props.stroke != rgbx(0, 0, 0, 0) and props.strokeWidth > 0: - let paint = newPaint(props.stroke) + let paint = props.stroke.copy() paint.color.a *= (props.opacity * props.strokeOpacity) result.strokePath( path, diff --git a/src/pixie/fonts.nim b/src/pixie/fonts.nim index d6485d7..28bd41a 100644 --- a/src/pixie/fonts.nim +++ b/src/pixie/fonts.nim @@ -213,6 +213,17 @@ proc newFont*(typeface: Typeface): Font {.raises: [].} = result.paint = newPaint(SolidPaint) result.paint.color = color(0, 0, 0, 1) +proc copy*(font: Font): Font {.raises: [].} = + result = Font() + result.typeface = font.typeface + result.size = font.size + result.lineHeight = font.lineHeight + result.paints = font.paints + result.textCase = font.textCase + result.underline = font.underline + result.strikethrough = font.strikethrough + result.noKerningAdjustments = font.noKerningAdjustments + proc newSpan*(text: string, font: Font): Span {.raises: [].} = ## Creates a span, associating a font with the text. result = Span() diff --git a/src/pixie/images.nim b/src/pixie/images.nim index ec9f2cb..8e2cfd8 100644 --- a/src/pixie/images.nim +++ b/src/pixie/images.nim @@ -21,9 +21,11 @@ proc newMask*(image: Image): Mask {.hasSimd, raises: [PixieError].} = for i in 0 ..< image.data.len: result.data[i] = image.data[i].a -proc copy*(image: Image): Image {.raises: [PixieError].} = +proc copy*(image: Image): Image {.raises: [].} = ## Copies the image data into a new image. - result = newImage(image.width, image.height) + result = Image() + result.width = image.width + result.height = image.height result.data = image.data proc `$`*(image: Image): string {.raises: [].} = diff --git a/src/pixie/masks.nim b/src/pixie/masks.nim index ea52af1..9fd8438 100644 --- a/src/pixie/masks.nim +++ b/src/pixie/masks.nim @@ -7,9 +7,11 @@ type UnsafeMask = distinct Mask when defined(release): {.push checks: off.} -proc copy*(mask: Mask): Mask {.raises: [PixieError].} = +proc copy*(mask: Mask): Mask {.raises: [].} = ## Copies the image data into a new image. - result = newMask(mask.width, mask.height) + result = Mask() + result.width = mask.width + result.height = mask.height result.data = mask.data proc `$`*(mask: Mask): string {.raises: [].} = diff --git a/src/pixie/paints.nim b/src/pixie/paints.nim index 1c7d312..5cfd451 100644 --- a/src/pixie/paints.nim +++ b/src/pixie/paints.nim @@ -34,7 +34,7 @@ proc newPaint*(kind: PaintKind): Paint {.raises: [].} = ## Create a new Paint. result = Paint(kind: kind, opacity: 1, imageMat: mat3()) -proc newPaint*(paint: Paint): Paint {.raises: [].} = +proc copy*(paint: Paint): Paint {.raises: [].} = ## Create a new Paint with the same properties. result = newPaint(paint.kind) result.blendMode = paint.blendMode diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index bfabae4..534a854 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -52,6 +52,12 @@ proc newPath*(): Path {.raises: [].} = ## Create a new Path. Path() +proc copy*(path: Path): Path {.raises: [].} = + result = Path() + result.commands = path.commands + result.start = path.start + result.at = path.at + proc pixelScale(transform: Mat3): float32 = ## What is the largest scale factor of this transform? max(