scala/ScalaBook/chapter-06/graphicDSL.scala

import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.awt._
class colorRegion {
  private val imgtype = BufferedImage.TYPE_INT_ARGB
  var img = new BufferedImage(500, 500, imgtype)
  var g2 = img.createGraphics()
  private var ac = AlphaComposite.getInstance(
                     AlphaComposite.SRC_OVER, 0.5f)
  g2.setComposite(ac)
  private var transform = new java.awt.geom.AffineTransform
  def circle(c1 : Float, c2 : Float, c3 : Float) = {
    g2.setColor(new Color(c1,c2,c3))
    g2.fillOval(150, 150, 200, 200)
    this 
  }
  def square(c1 : Float, c2 : Float, c3 : Float) {
    g2.setColor(new Color(c1,c2,c3))
    g2.fillRect(50, 50, 200, 200) 
    this
  }
  def translate(c1 : Float, c2 : Float) {
    transform.setToTranslation(c1, c2)
    g2.setTransform(transform)
    this
  }
  def over(y: colorRegion) {
    g2.drawImage(y.img, 0, 0, null)
    this
  }
  def show {
    g2.dispose()
    ImageIO.write(img, "png", new java.io.File("funcG.png"))
    this
  }
}


val blueCircle = new colorRegion circle (0,0,1)
val redCircle  = new colorRegion circle (1,0,0)
blueCircle translate(-100, 0) 
redCircle translate (100, 0)  
blueCircle over redCircle
blueCircle show