On this page:

1.8 Managing Control Arrows: "arrow.ss"

The teachpack implements a controller for moving shapes across a canvass. A shape is a class of data for which move and draw operations can be drawn.

(control-left-right shape n move draw)  true
  shape : Shape
  n : number?
  move : (-> number? Shape Shape)
  draw : (-> Shape true)
Moves shape n pixels left (negative) or right (positive).

(control-up-down shape n move draw)  true
  shape : Shape
  n : number?
  move : (-> number? Shape Shape)
  draw : (-> Shape true)
Moves shape n pixels up (negative) or down (positive).

(control shape n move-lr move-ud draw)  true
  shape : Shape
  n : number?
  move-lr : (-> number? Shape Shape)
  move-ud : (-> number? Shape Shape)
  draw : (-> Shape true)
Moves shape N pixels left or right and up or down, respectively.

  ; A shape is a structure:
  ;   (make-posn num num)
  ; RAD : the radius of the simple disk moving across a canvas
  (define RAD 10)
  ; move : number shape -> shape or false
  ; to move a shape by delta according to translate
  ; effect: to redraw it
  (define (move delta sh)
      [(and (clear-solid-disk sh RAD)
            (draw-solid-disk (translate sh delta) RAD))
       (translate sh delta)]
      [else false]))
  ; translate : shape number -> shape
  ; to translate a shape by delta in the x direction
  (define (translate sh delta)
    (make-posn (+ (posn-x sh) delta) (posn-y sh)))
  ; draw-it : shape -> true
  ; to draw a shape on the canvas: a disk with radius
  (define (draw-it sh)
    (draw-solid-disk sh RAD))
  ; RUN:
  ; this creates the canvas
  (start 100 50)
  ; this creates the controller GUI
  (control-left-right (make-posn 10 20) 10 move draw-it)