Doodle

Doodle is a Scala library for 2D graphics, animation, data visualization, and creative coding. It runs in both the JVM, rendering via Java2D, and the web browser using SVG.

Getting Started

To use Doodle, add the following to your build.sbt

libraryDependencies += "org.creativescala" %% "doodle" % "0.9.20"

ScalaDoc

The ScalaDoc covers Doodle’s APIs.

Quick Example

The following example creates a Chessboard, by first creating a 2x2 board, then a 4x4 board from the 2x2 board, and finally the complete 8x8 board from the 4x4 board.

// The "Image" DSL is the easiest way to create images
import doodle.image._
// Colors and other useful stuff
import doodle.core._

val blackSquare = Image.rectangle(30, 30).fillColor(Color.black)
val redSquare = Image.rectangle(30, 30).fillColor(Color.red)

// A chessboard, broken into steps showing the recursive construction
val twoByTwo =
  (redSquare.beside(blackSquare))
    .above(blackSquare.beside(redSquare))

val fourByFour =
  (twoByTwo.beside(twoByTwo))
    .above(twoByTwo.beside(twoByTwo))

val chessboard =
  (fourByFour.beside(fourByFour))
    .above(fourByFour.beside(fourByFour))

To draw these Images call the draw method like so

// Extension methods
import doodle.image.syntax._
// Render to a window using Java2D (must be running in the JVM)
import doodle.java2d._

chessboard.draw()

This creates the picture shown below.

A picture of a red and black chessboard

Guides

Using the Image library is the easiest way to get started drawing with Doodle.

Using the tagless final algebras allows access to features that are specific to a backend.

Concepts

Understanding core concepts in Doodle will help make sense of the library.

TODO: layout, bounding boxes, and origins; paths; styles; debug

Library Overview

The main packages of Doodle are:

The source code for this page can be found here.