- Complete reworking of SVG backend to remove race conditions and manage resources correctly.
- Java2d rendering waits for window to close before rendering is complete. See issue #176.
-
Improvements to reactor for more consistent animations (by
@lego-eden
) -
Convenience methods on
BufferedImageWriter
useDefaultFrame
-
Fix monospaced font rendering on SVG (by
@kulsoom2003
) -
Complete reworking of Java2D backend to remove race conditions and manage resources correctly.
-
Add HTML Canvas backend. It currently has fairly limited functionality.
-
Add
size
method to set bounding box width and height. Distinguished by the existingsize
method onSize
by it's arguments. (#158)
-
Arcs are available as paths on
OpenPath
,ClosedPath
, andPathElement
, and as conveniences onImage
andPicture
. -
Add
BufferedImageWriter
algebra (by@jCabala
) -
Refactoring of writers (
@jCabala
) -
SVG documentation (
@vosid8
)
-
Image
supports landmarks for layout withat
andoriginAt
. -
Added
fromHex
method toColor
to parse CSS hex-color
-
Rework type inference for syntax, making syntax more flexible and requiring fewer type annotations. (#133)
-
Implement a
Monad
instance forPicture
(#131) -
Add
flatMap
method toPicture
-
Doodle is now Scala 3 only, as the new syntax doesn't compile under 2.13
-
Add
margin
andoriginAt
toImage
, thanks to@danielost
-
Simplify handling of paths (#130). APIs prefer to work with
OpenPath
andClosedPath
-
Fix assorted typos
-
Add more constructors for creating animations
- Update
Image
render syntax to match changes toPicture
render syntax
-
Write a lot of documentation
-
Update to Scala 3.2
-
Rendering of pictures and animations is synchronous on the JVM. This should stop simple programs exiting before any output is displayed. Removed callbacks from rendering methods---they were never used, they don't make sense is rendering can be synchronous, and you can use the
IO
methods if you want that level of control. -
Add
strokeCap
,strokeJoin
, andstrokeDash
toImage
, providing all the features ofStyle
.
- Remove
F[_]
parameters from animation. This should have been done in the previous release, but I forgot to do so. Breaks binary compatibility, requiring a new version.
-
0.12 and 0.13 were broken and we weren't able to fix them due to MIMA checks. Hence the jump from 0.11 to 0.14
-
Add text and font to
Image
, courtesy of akiomik -
Simplify the
Picture
type, which requires a large refactoring.-
The
Drawing
type is now a type member ofAlgebra
, not a type parameter. -
Pictures
are now equivalent to dependent function types, with the output beinga.Drawing[A]
wherea
is theAlgebra
thePicture
is applied to.
This means the
Drawing
parameter no longer needs to propagated outward in backend independent code and in turnPicture
can now be backend indepndent. In turn makes writing backend independent code, such as libraries that build on Doodle, dramatically easier to write.Overall, the
Picture
type, plus syntax, is as easy to useImage
. -
- Add "constructors" to algebras. Described in WIP documentation. This allows
construction of
Picture
without going via syntax, and in turn without requiring explicit types.
-
Add
originAt
for even more layout flexibility -
Move all
interact
syntax intoall
object. Useimport doodle.interact.syntax.all._
instead of
import doodle.interact.syntax._
-
Set compiler flag to generate Java 8 compatible output
-
0.11.0 was released with a mix of Java 11 and Java 8 code, so we're pretending it doesn't exist.
-
Much more flexible layout using
Landmark
andmargin
-
Syntax moves from
import doodle.syntax._
toimport doodle.syntax.all._
. This is consistent with Typelevel projects and avoids name collisions between syntax methods and the objects on which they are defined (e.g. thetext
object contains a method namedtext
) -
Add missing syntax for
strokeCap
andstrokeJoin
. Contributed by Jeff Martin / custommonkey -
Move to fs2 and Cats Effect 3 from Monix. I'm not convinced Monix is actively maintained any more. Zainab helped out immensely with this one.
-
Remove
angle
parameter fromregularPolygon
andstar
. This is not needed now we have rotations and their removal simplifies the API.
-
Update to Scala 3.0, Scala 2.13.6, and Scala.js 1.6. The move to Scala 3 required:
-
removing the svg and explore projects, which have dependencies that don't yet work on Scala 3. They will be restored in due course.
-
updating a bunch of dependencies, changing some code, etc.
-
-
Add equilateralTriangle path
-
We will never speak of 0.9.24
-
Mouse click algebra
-
Reactors support mouse click
- Java2d writers correctly use frame background color.
-
Add redraw specification to Java2D
Frame
, which allows rendering animations in an way that captures the animation as a static image. -
A lot of work on documentation.
-
Text rendering correctly uses stroke and fill where possible. Java2D doesn't support fill. SVG supports both.
- Republish because I didn't completely rebuild last time and hence published some byte code compiled with JVM 11.
- Build with Java 8 to avoid class file version issues that occur when compiling with new JVM versions.
- Fix error in constructing open and closed paths
-
Improve modelling of fonts. Fonts can be both bold and italic
-
Java2D backend actually uses given font information to render the font
-
Add
scanLeft
method toTransducer
-
Add
Base64
wrapper type tocore
which encodes image format as well indicating base 64 data. UpdateBase64
algebra to use. -
Add
ToPicture
algebra and syntaxThe
ToPicture
algebra provides a generic way to convert some type into aPicture
. The syntax adds a methodtoPicture
so one can call, e.g.someBase64Value.toPicture[Algebra, Drawing]
There are implementations for the Java2d backend for
Base64
andBufferedImage
.This replaces some of the functionality of the
Bitmap
algebra and it is likely that theBitmap
algebra will be removed or reworked in the future. -
Implement
Text
algebra for the SVG backend on JS
-
Build and publish for Scala 2.12 and 2.13.
-
add
Monoid
instance forPicture
. -
add golden testing, to make tests more robust against rendering errors.
-
write
andbase64
methods are usable. -
add
debug
method toImage
. -
Vec
apply method accept cartesian or polar coordinates, inline withPoint
. -
add
withFrameRate
utility toObservable
. -
add
Invariant
instance forInterpolator
, andInterpolator
instance forAngle
. -
add
scaleLength
method toPoint
.
-
explore
takes aFrame
, which means it now works again. -
Some work on the
plot
library -
Algebraic animations via
Interpolation
andTransducer
allow easier construction and composition of common animations types.
-
Picture
has aMonad
instance if the underlying typeF
does. -
Refactor base64 encoding support into a separate type class, and augment the syntax with an optional frame.
-
Fix
Java2dWriter
use of 0 sizeBufferedImage
-
Fix error in calculating bounding box if the picture uses
at
layout. This will prevent the issue where the frame is too large or small for the enclosed picture. -
Add
Debug
algebra, which draws bounding box and origin for the given picture. -
Draw bitmaps the correct way around (they were upside-down).
-
Add some easing functions, the start of a library to make animations easier.
-
Miscellaneous small improvements.
-
Add text rendering via the
Text
algebra. Currently only implemented for the Java2D back-end. -
Add syntax for
Size
andTransform
algebras -
Add derived methods for some common types of shapes to the
Path
algebra. Add syntax for these.
-
Doodle has been completely rewritten in terms of tagless final algebras. This gives extensibility needed to support diffferent features on different platforms.
-
0.9.12 add the ability to load bitmap images on the java2d backend (the
read
methods on theBitmap
algebra.) It's likely this API will be reworked in the future. This is very basic support for this feature. -
0.9.11 added mouse movement events to reactors.
--- Period when I wasn't recording changes ---
Fix most SVG text rendering issues.
- The layout is passable but not great. This will be improved with time.
- Java2D does not support fills for text, to the best of my knowledge, while SVG does. This can lead to different rendering on the two platforms, and we need to think about how we will handle this.
Add some more predefined paths
Image.star
Image.regularPolygon
Improvements to Random
Random.int(lower,upper)
to generate anInt
in a given range.Random.discrete((atom, p), ...)
creates a discrete distribution that chooses the atom with the given probability- Refactoring of
Random
code that avoids strange REPL interactions.
More examples
Save to SVG
- the format is
Svg
E.g.myImage.save[Svg]("filename.svg")
Save to PDF and SVG
- use
PdfAndSvg
as the format, and specify only the base name of the file. E.g.myImage.save[PdfAndSvg]("filename")
will producefilename.pdf
andfilename.svg
Reduce the size of PDF files by enabling compression
These changes are lost in the mists of time