//
// Recursive scribble: empty object and recursive class
// 
// Represents a scribble as a sequence of lines
// 
// @author Kim Bruce
//

dialect "rtobjectdraw"

type Scribble = {
   contains (pt: Point) -> Boolean 

   moveBy (dx: Number, dy: Number) -> Done 

   removeFromCanvas -> Done 

   color := (newColor: Color) -> Done
}

def emptyScribble: Scribble = object {

   method contains (pt: Point) -> Boolean {
      false
   }

   method moveBy (dx: Number, dy: Number) -> Done {}

   method removeFromCanvas -> Done {}

   method color:= (newColor: Color) -> Done {}
}

class scribbleAdding (first':Line) to (rest': Scribble) -> Scribble {

   def first: Line = first'
   def rest: Scribble = rest'

   method contains (pt: Point) -> Boolean {
      first.contains (pt) || rest.contains (pt)
   }

   method moveBy (dx: Number, dy: Number) -> Done {
       first.moveBy (dx,dy)
       rest.moveBy (dx,dy)
   }

   method removeFromCanvas -> Done {
       first.removeFromCanvas
       rest.removeFromCanvas
   }

   method color := (newColor: Color) -> Done {
       first.color := newColor
       rest.color := newColor
   }
}
