#lang racket
(require gigls/unsafe)
(provide (all-defined-out))

;;; File:
;;;   procedures-lab.rkt
;;; Authors:
;;;   Janet Davis
;;;   Samuel A. Rebelsky
;;;   Jerod Weinman
;;;   YOUR NAME HERE
;;; Summary:
;;;   Code for the lab entitled "Writing Your Own Procedures"

; +---------------+-------------------------------------------------------------
; | Some drawings |
; +---------------+

(define black-circle
  (hshift-drawing
   30
   (vshift-drawing
    40
    (scale-drawing 50 drawing-unit-circle))))

(define purple-ellipse
  (vshift-drawing
   10
   (hshift-drawing
    30
    (vscale-drawing
     25
     (hscale-drawing
      50
      (recolor-drawing "purple" drawing-unit-circle))))))

(define blue-i
  (recolor-drawing
   "blue"
   (drawing-group
    (hshift-drawing
     4
     (vshift-drawing
      4
      (scale-drawing 8 drawing-unit-circle)))
    (hshift-drawing
     4
     (vshift-drawing
      28
      (hscale-drawing
       8
       (drawing-vscale drawing-unit-square 32)))))))

(define red-eye
  (hshift-drawing
   32
   (vshift-drawing
    12
    (drawing-group
     (hscale-drawing
      64
      (vscale-drawing
       24
       (recolor-drawing "darkgrey" drawing-unit-circle)))
     (hscale-drawing
      60
      (vscale-drawing
       20
       (recolor-drawing "white" drawing-unit-circle)))
     (hscale-drawing
      16
      (vscale-drawing
       20
       (recolor-drawing "red" drawing-unit-circle)))))))

; +----------------------+------------------------------------------------------
; | Drawing transformers |
; +----------------------+

(define variant-1
  (lambda (drawing)
    (hshift-drawing
     15
     (vshift-drawing
      20
      (scale-drawing 1.1 drawing)))))

(define variant-pair-1
  (lambda (drawing)
    (drawing-group drawing (variant-1 drawing))))

(define add-right-neighbor
  (lambda (drawing)
    (drawing-group drawing
                   (hshift-drawing (drawing-width drawing)
                                   drawing))))

; +----------------------+------------------------------------------------------
; | Drawing constructors |
; +----------------------+

(define circle
  (lambda (radius x-center y-center)
    (hshift-drawing
     x-center
     (vshift-drawing
      y-center
      (scale-drawing
       (* 2 radius)
       drawing-unit-circle )))))
