diff --git a/core/jvm/src/main/scala/doodle/syntax/Base64WriterSyntax.scala b/core/jvm/src/main/scala/doodle/syntax/Base64WriterSyntax.scala index c8124cba..d62f9fa3 100644 --- a/core/jvm/src/main/scala/doodle/syntax/Base64WriterSyntax.scala +++ b/core/jvm/src/main/scala/doodle/syntax/Base64WriterSyntax.scala @@ -24,6 +24,7 @@ import doodle.algebra.Picture import doodle.core.format.Format import doodle.core.{Base64 as B64} import doodle.effect.Base64Writer +import doodle.effect.DefaultFrame trait Base64WriterSyntax { implicit class Base64Ops[Alg <: Algebra, A]( @@ -34,6 +35,7 @@ trait Base64WriterSyntax { class Base64OpsHelper[Fmt <: Format](picture: Picture[Alg, A]) { def apply[Frame]()(implicit w: Base64Writer[Alg, Frame, Fmt], + f: DefaultFrame[Frame], r: IORuntime ): (A, B64[Fmt]) = w.base64(picture).unsafeRunSync() @@ -47,7 +49,8 @@ trait Base64WriterSyntax { class Base64IOOpsHelper[Fmt <: Format](picture: Picture[Alg, A]) { def apply[Frame]()(implicit - w: Base64Writer[Alg, Frame, Fmt] + w: Base64Writer[Alg, Frame, Fmt], + f: DefaultFrame[Frame] ): IO[(A, B64[Fmt])] = w.base64(picture) diff --git a/core/jvm/src/main/scala/doodle/syntax/FileWriterSyntax.scala b/core/jvm/src/main/scala/doodle/syntax/FileWriterSyntax.scala index 35919e08..cb7fde97 100644 --- a/core/jvm/src/main/scala/doodle/syntax/FileWriterSyntax.scala +++ b/core/jvm/src/main/scala/doodle/syntax/FileWriterSyntax.scala @@ -22,6 +22,7 @@ import cats.effect.unsafe.IORuntime import doodle.algebra.Algebra import doodle.algebra.Picture import doodle.core.format.Format +import doodle.effect.DefaultFrame import doodle.effect.FileWriter import java.io.File @@ -35,12 +36,14 @@ trait FileWriterSyntax { class FileWriterOpsHelper[Fmt <: Format](picture: Picture[Alg, A]) { def apply[Frame](file: String)(implicit w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame], r: IORuntime ): A = apply(new File(file)) def apply[Frame](file: File)(implicit w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame], r: IORuntime ): A = w.write(file, picture).unsafeRunSync() @@ -60,12 +63,14 @@ trait FileWriterSyntax { class FileWriterIOOpsHelper[Fmt <: Format](picture: Picture[Alg, A]) { def apply[Frame](file: String)(implicit - w: FileWriter[Alg, Frame, Fmt] + w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame] ): IO[A] = apply(new File(file)) def apply[Frame](file: File)(implicit - w: FileWriter[Alg, Frame, Fmt] + w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame] ): IO[A] = w.write(file, picture) diff --git a/core/shared/src/main/scala/doodle/effect/Base64Writer.scala b/core/shared/src/main/scala/doodle/effect/Base64Writer.scala index 226e953b..03ce25c8 100644 --- a/core/shared/src/main/scala/doodle/effect/Base64Writer.scala +++ b/core/shared/src/main/scala/doodle/effect/Base64Writer.scala @@ -32,5 +32,9 @@ trait Base64Writer[+Alg <: Algebra, Frame, Fmt <: Format] description: Frame, picture: Picture[Alg, A] ): IO[(A, B64[Fmt])] - def base64[A](picture: Picture[Alg, A]): IO[(A, B64[Fmt])] + + def base64[A](picture: Picture[Alg, A])(using + frame: DefaultFrame[Frame] + ): IO[(A, B64[Fmt])] = + base64(frame.default, picture) } diff --git a/core/shared/src/main/scala/doodle/effect/FileWriter.scala b/core/shared/src/main/scala/doodle/effect/FileWriter.scala index 6128430e..98d12036 100644 --- a/core/shared/src/main/scala/doodle/effect/FileWriter.scala +++ b/core/shared/src/main/scala/doodle/effect/FileWriter.scala @@ -29,6 +29,10 @@ import java.io.File */ trait FileWriter[+Alg <: Algebra, Frame, Fmt <: Format] extends Writer[Alg, Frame] { - def write[A](file: File, description: Frame, image: Picture[Alg, A]): IO[A] - def write[A](file: File, image: Picture[Alg, A]): IO[A] + def write[A](file: File, description: Frame, picture: Picture[Alg, A]): IO[A] + + def write[A](file: File, picture: Picture[Alg, A])(using + frame: DefaultFrame[Frame] + ): IO[A] = + write(file, frame.default, picture) } diff --git a/image/jvm/src/main/scala/doodle/image/syntax/JvmImageSyntax.scala b/image/jvm/src/main/scala/doodle/image/syntax/JvmImageSyntax.scala index 9b33d25c..6488ecf1 100644 --- a/image/jvm/src/main/scala/doodle/image/syntax/JvmImageSyntax.scala +++ b/image/jvm/src/main/scala/doodle/image/syntax/JvmImageSyntax.scala @@ -24,6 +24,7 @@ import doodle.algebra.Picture import doodle.core.format.Format import doodle.core.{Base64 as B64} import doodle.effect.Base64Writer +import doodle.effect.DefaultFrame import doodle.effect.FileWriter import doodle.language.Basic @@ -41,6 +42,7 @@ class JvmImageSyntax extends AbstractImageSyntax(doodle.syntax.renderer) { final class Base64Ops[Fmt <: Format](image: Image) { def apply[Alg <: Basic, Frame](implicit w: Base64Writer[Alg, Frame, Fmt], + f: DefaultFrame[Frame], runtime: IORuntime ): B64[Fmt] = { val picture = new Picture[Basic, Unit] { @@ -66,6 +68,7 @@ class JvmImageSyntax extends AbstractImageSyntax(doodle.syntax.renderer) { final class ImageWriterUnitOps[Fmt <: Format](image: Image) { def apply[Alg <: Basic, Frame](file: String)(implicit w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame], r: IORuntime ): Unit = apply(new File(file)) @@ -78,7 +81,11 @@ class JvmImageSyntax extends AbstractImageSyntax(doodle.syntax.renderer) { def apply[Alg <: Basic, Frame]( file: File - )(implicit w: FileWriter[Alg, Frame, Fmt], r: IORuntime): Unit = + )(implicit + w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame], + r: IORuntime + ): Unit = image.compile[Alg].write[Fmt](file) def apply[Alg <: Basic, Frame](file: File, frame: Frame)(implicit @@ -94,7 +101,8 @@ class JvmImageSyntax extends AbstractImageSyntax(doodle.syntax.renderer) { */ final class ImageWriterIOOps[Fmt <: Format](image: Image) { def apply[Alg <: Basic, Frame](file: String)(implicit - w: FileWriter[Alg, Frame, Fmt] + w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame] ): IO[Unit] = apply(new File(file)) @@ -105,7 +113,10 @@ class JvmImageSyntax extends AbstractImageSyntax(doodle.syntax.renderer) { def apply[Alg <: Basic, Frame]( file: File - )(implicit w: FileWriter[Alg, Frame, Fmt]): IO[Unit] = + )(implicit + w: FileWriter[Alg, Frame, Fmt], + f: DefaultFrame[Frame] + ): IO[Unit] = image.compile[Alg].writeToIO[Fmt](file) def apply[Alg <: Basic, Frame](file: File, frame: Frame)(implicit diff --git a/java2d/src/main/scala/doodle/java2d/effect/Java2dWriter.scala b/java2d/src/main/scala/doodle/java2d/effect/Java2dWriter.scala index 19422a04..64b0aea0 100644 --- a/java2d/src/main/scala/doodle/java2d/effect/Java2dWriter.scala +++ b/java2d/src/main/scala/doodle/java2d/effect/Java2dWriter.scala @@ -46,10 +46,6 @@ trait Java2dWriter[Fmt <: Format] // with alpha channels as described in https://bugs.openjdk.java.net/browse/JDK-8119048 def makeImage(w: Int, h: Int): BufferedImage - def write[A](file: File, picture: Picture[A]): IO[A] = { - write(file, Frame.default.withSizedToPicture(20), picture) - } - def write[A](file: File, frame: Frame, picture: Picture[A]): IO[A] = { for { result <- Java2d.renderBufferedImage( @@ -70,9 +66,6 @@ trait Java2dWriter[Fmt <: Format] base64 = JBase64.getEncoder.encodeToString(output.toByteArray) } yield (value, B64[Fmt](base64)) - def base64[A](image: Picture[A]): IO[(A, B64[Fmt])] = - base64(Frame.default.withSizedToPicture(20), image) - private def writeToOutput[A]( output: OutputStream, frame: Frame, diff --git a/svg/jvm/src/main/scala/doodle/svg/effect/SvgWriter.scala b/svg/jvm/src/main/scala/doodle/svg/effect/SvgWriter.scala index fecac25d..cad95b3b 100644 --- a/svg/jvm/src/main/scala/doodle/svg/effect/SvgWriter.scala +++ b/svg/jvm/src/main/scala/doodle/svg/effect/SvgWriter.scala @@ -46,9 +46,6 @@ object SvgWriter } } - def write[A](file: File, picture: Picture[Algebra, A]): IO[A] = - write(file, Frame("").withSizedToPicture(), picture) - def base64[A]( frame: Frame, image: Picture[Algebra, A] @@ -59,9 +56,4 @@ object SvgWriter (nodes, value) = rendered b64 = JBase64.getEncoder.encodeToString(nodes.getBytes()) } yield (value, B64[format.Svg](b64)) - - def base64[A]( - picture: Picture[Algebra, A] - ): IO[(A, B64[format.Svg])] = - base64(Frame("").withSizedToPicture(), picture) }