On this page:
control-left-right
control-up-down
control

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.

Example:
; 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)
  (cond
    [(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)