Implement changes suggested by Gregory Cooper
-reorder requires and cleanup -remove unneccessary newline.
This commit is contained in:
parent
857b05798b
commit
a95a90a9da
|
@ -5,43 +5,41 @@
|
|||
|
||||
#lang racket/unit
|
||||
|
||||
(require mred/mred-sig
|
||||
(require (for-syntax syntax/parse racket/base)
|
||||
racket/class
|
||||
(for-syntax syntax/parse racket/base)
|
||||
mred/mred-sig
|
||||
frtime/core/frp
|
||||
"graphics-sig.rkt")
|
||||
|
||||
(import (prefix mred: mred^) graphics:posn^)
|
||||
(export graphics:posn-less^)
|
||||
|
||||
(import (prefix mred: mred^)
|
||||
graphics:posn^)
|
||||
(export graphics:posn-less^)
|
||||
|
||||
(define-syntax (rec stx)
|
||||
(define-syntax (rec stx)
|
||||
(syntax-parse stx
|
||||
[((~literal rec) var:identifier rhs:expr)
|
||||
#'(letrec ([var rhs])
|
||||
var)]))
|
||||
|
||||
(define send/proc
|
||||
(define send/proc
|
||||
(lambda (class method . args)
|
||||
(send-generic class (make-generic mred:dc<%> method) . args)))
|
||||
|
||||
(define send/proc2
|
||||
(define send/proc2
|
||||
(lambda (class method . args)
|
||||
(send-generic class (make-generic sixlib-canvas% method) . args)))
|
||||
|
||||
(define-struct viewport (label canvas))
|
||||
(define-struct sixmouse (x y left? middle? right?))
|
||||
(define-struct sixkey (value shift control meta alt))
|
||||
(define graphics-flag #f)
|
||||
(define global-viewport-list '())
|
||||
(define global-color-vector (make-vector 300 #f))
|
||||
(define global-pen-vector (make-vector 300 #f))
|
||||
(define global-brush-vector (make-vector 300 #f))
|
||||
(define default-font (make-object mred:font% 12 'roman 'normal 'normal))
|
||||
(define black-color (make-object mred:color% "BLACK"))
|
||||
(define-struct viewport (label canvas))
|
||||
(define-struct sixmouse (x y left? middle? right?))
|
||||
(define-struct sixkey (value shift control meta alt))
|
||||
(define graphics-flag #f)
|
||||
(define global-viewport-list '())
|
||||
(define global-color-vector (make-vector 300 #f))
|
||||
(define global-pen-vector (make-vector 300 #f))
|
||||
(define global-brush-vector (make-vector 300 #f))
|
||||
(define default-font (make-object mred:font% 12 'roman 'normal 'normal))
|
||||
(define black-color (make-object mred:color% "BLACK"))
|
||||
|
||||
(define sixlib-canvas%
|
||||
(define sixlib-canvas%
|
||||
(class mred:canvas%
|
||||
(super-new)
|
||||
(inherit get-parent
|
||||
|
@ -110,7 +108,7 @@
|
|||
(set! current-mouse-pos (make-posn (send mouse-event get-x)
|
||||
(send mouse-event get-y)))
|
||||
(send-event mouse-listener mouse-event))]
|
||||
#|
|
||||
#|
|
||||
(let* ([x (send mouse-event get-x)]
|
||||
[y (send mouse-event get-y)]
|
||||
[left? (send mouse-event button-down? 'left)]
|
||||
|
@ -150,9 +148,9 @@
|
|||
(set! width new-width)
|
||||
(reset-size))])))
|
||||
|
||||
(define open-frames-timer (make-object mred:timer%))
|
||||
(define open-frames-timer (make-object mred:timer%))
|
||||
|
||||
(define sixlib-frame%
|
||||
(define sixlib-frame%
|
||||
(class mred:frame%
|
||||
(field [canvas #f])
|
||||
(define/public (set-canvas x) (set! canvas x))
|
||||
|
@ -161,46 +159,46 @@
|
|||
(inner (void) on-close))
|
||||
(super-instantiate ())))
|
||||
|
||||
(define (query-mouse-posn viewport)
|
||||
(define (query-mouse-posn viewport)
|
||||
(send (viewport-canvas viewport) get-posn))
|
||||
|
||||
(define repaint
|
||||
(define repaint
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) on-paint)))
|
||||
|
||||
(define viewport-mouse-events
|
||||
(define viewport-mouse-events
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-mouse-listener)))
|
||||
|
||||
(define viewport-key-events
|
||||
(define viewport-key-events
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-key-listener)))
|
||||
|
||||
(define viewport-dc
|
||||
(define viewport-dc
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-sixlib-dc)))
|
||||
|
||||
(define viewport-buffer-dc
|
||||
(define viewport-buffer-dc
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-buffer-dc)))
|
||||
|
||||
(define viewport-bitmap
|
||||
(define viewport-bitmap
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-bitmap)))
|
||||
|
||||
(define viewport-frame
|
||||
(define viewport-frame
|
||||
(lambda (viewport)
|
||||
(send (send (viewport-canvas viewport) get-parent) get-parent)))
|
||||
|
||||
(define viewport-height
|
||||
(define viewport-height
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-sixlib-height)))
|
||||
|
||||
(define viewport-width
|
||||
(define viewport-width
|
||||
(lambda (viewport)
|
||||
(send (viewport-canvas viewport) get-sixlib-width)))
|
||||
|
||||
(define clear-viewport
|
||||
(define clear-viewport
|
||||
(lambda (viewport)
|
||||
(let* ([vdc (viewport-dc viewport)]
|
||||
[vbdc (viewport-buffer-dc viewport)])
|
||||
|
@ -210,7 +208,7 @@
|
|||
|
||||
|
||||
|
||||
(define draw-viewport
|
||||
(define draw-viewport
|
||||
(lambda (viewport)
|
||||
(let* ([dc (viewport-dc viewport)]
|
||||
[buffer-dc (viewport-buffer-dc viewport)]
|
||||
|
@ -235,7 +233,7 @@
|
|||
(send buffer-dc set-brush old-brush))]
|
||||
[() (draw-viewport/color (make-rgb 0 0 0))])))))
|
||||
|
||||
(define flip-viewport
|
||||
(define flip-viewport
|
||||
(lambda (viewport)
|
||||
(let* ([dc (viewport-dc viewport)]
|
||||
[dc2 (viewport-buffer-dc viewport)]
|
||||
|
@ -257,7 +255,7 @@
|
|||
(send dc set-brush brush)
|
||||
(send dc2 set-brush brush2))))))
|
||||
|
||||
(define close-viewport
|
||||
(define close-viewport
|
||||
(lambda (viewport)
|
||||
(set! global-viewport-list
|
||||
(let loop ([l global-viewport-list])
|
||||
|
@ -270,20 +268,20 @@
|
|||
(when (null? global-viewport-list)
|
||||
(send open-frames-timer stop))))
|
||||
|
||||
(define open-graphics
|
||||
(define open-graphics
|
||||
(lambda ()
|
||||
(set! graphics-flag #t)))
|
||||
|
||||
(define close-graphics
|
||||
(define close-graphics
|
||||
(lambda ()
|
||||
(map close-viewport global-viewport-list)
|
||||
(set! graphics-flag #f)
|
||||
(set! global-viewport-list '())
|
||||
(send open-frames-timer stop)))
|
||||
|
||||
(define graphics-open? (lambda () graphics-flag))
|
||||
(define graphics-open? (lambda () graphics-flag))
|
||||
|
||||
(define make-rgb
|
||||
(define make-rgb
|
||||
(lambda (red green blue)
|
||||
(when (or (< red 0.) (< blue 0.) (< green 0.)
|
||||
(> red 1.) (> blue 1.) (> green 1.))
|
||||
|
@ -296,30 +294,30 @@
|
|||
[nblue (convert blue)])
|
||||
(make-object mred:color% nred ngreen nblue))))
|
||||
|
||||
(define make-color make-rgb)
|
||||
(define make-color make-rgb)
|
||||
|
||||
(define (rgb-red rgb) (/ (send rgb red) 255))
|
||||
(define (rgb-blue rgb) (/ (send rgb blue) 255))
|
||||
(define (rgb-green rgb) (/ (send rgb green) 255))
|
||||
(define (rgb-red rgb) (/ (send rgb red) 255))
|
||||
(define (rgb-blue rgb) (/ (send rgb blue) 255))
|
||||
(define (rgb-green rgb) (/ (send rgb green) 255))
|
||||
|
||||
(define rgb? (lambda (object) (is-a? object mred:color%)))
|
||||
(define (color? x)
|
||||
(define rgb? (lambda (object) (is-a? object mred:color%)))
|
||||
(define (color? x)
|
||||
(or (rgb? x)
|
||||
(not (not (send mred:the-color-database find-color x)))))
|
||||
|
||||
(define change-color
|
||||
(define change-color
|
||||
(lambda (index color)
|
||||
(vector-set! global-color-vector index color)
|
||||
(vector-set! global-pen-vector index (get-pen color))
|
||||
(vector-set! global-brush-vector index (get-brush color))))
|
||||
|
||||
(define (get-color index)
|
||||
(define (get-color index)
|
||||
(cond
|
||||
[(is-a? index mred:color%) index]
|
||||
[(string? index) (make-object mred:color% index)]
|
||||
[else (vector-ref global-color-vector index)]))
|
||||
|
||||
(define get-pen
|
||||
(define get-pen
|
||||
(lambda (index)
|
||||
(cond
|
||||
[(is-a? index mred:pen%) index]
|
||||
|
@ -327,7 +325,7 @@
|
|||
(send mred:the-pen-list find-or-create-pen index 1 'solid)]
|
||||
[else (vector-ref global-pen-vector index)])))
|
||||
|
||||
(define get-brush
|
||||
(define get-brush
|
||||
(lambda (index)
|
||||
(cond
|
||||
[(is-a? index mred:brush%) index]
|
||||
|
@ -335,10 +333,10 @@
|
|||
(send mred:the-brush-list find-or-create-brush index 'solid)]
|
||||
[else (vector-ref global-brush-vector index)])))
|
||||
|
||||
(define pen? (lambda (object) (is-a? object mred:pen%)))
|
||||
(define brush? (lambda (object) (is-a? object mred:brush%)))
|
||||
(define pen? (lambda (object) (is-a? object mred:pen%)))
|
||||
(define brush? (lambda (object) (is-a? object mred:brush%)))
|
||||
|
||||
(define display-color-vector
|
||||
(define display-color-vector
|
||||
(lambda ()
|
||||
(do
|
||||
([index 0 (+ index 1)])
|
||||
|
@ -347,7 +345,7 @@
|
|||
(/ (rgb-green (get-color index)) 255)
|
||||
(/ (rgb-blue (get-color index)) 255))))))
|
||||
|
||||
(define make-font
|
||||
(define make-font
|
||||
(lambda (name)
|
||||
(cond
|
||||
[(eq? name 'large-deco)
|
||||
|
@ -361,84 +359,84 @@
|
|||
[else "no such font ~a; only 'large-deco, 'small-roman, 'medium-roman, and 'large-roman"
|
||||
name])))
|
||||
|
||||
(define custom-roman
|
||||
(define custom-roman
|
||||
(lambda (size)
|
||||
(make-object mred:font%
|
||||
size 'roman 'normal 'normal)))
|
||||
|
||||
(define custom-deco
|
||||
(define custom-deco
|
||||
(lambda (size)
|
||||
(make-object mred:font% size 'decorative 'normal 'normal)))
|
||||
|
||||
(define set-viewport-pen
|
||||
(define set-viewport-pen
|
||||
(lambda (viewport pen)
|
||||
(send (viewport-canvas viewport) remember-pen pen)
|
||||
(let ([pen (get-pen pen)])
|
||||
(send (viewport-dc viewport) set-pen pen)
|
||||
(send (viewport-buffer-dc viewport) set-pen pen))))
|
||||
|
||||
(define set-viewport-brush
|
||||
(define set-viewport-brush
|
||||
(lambda (viewport brush)
|
||||
(send (viewport-canvas viewport) remember-brush brush)
|
||||
(let ([brush (get-brush brush)])
|
||||
(send (viewport-dc viewport) set-brush brush)
|
||||
(send (viewport-buffer-dc viewport) set-brush brush))))
|
||||
|
||||
(define set-text-foreground
|
||||
(define set-text-foreground
|
||||
(lambda (viewport color)
|
||||
(let ([color (get-color color)])
|
||||
(send (viewport-dc viewport) set-text-foreground color)
|
||||
(send (viewport-buffer-dc viewport) set-text-foreground color))))
|
||||
|
||||
(define set-text-background
|
||||
(define set-text-background
|
||||
(lambda (viewport color)
|
||||
(let ([color (get-color color)])
|
||||
(send (viewport-dc viewport) set-text-background color)
|
||||
(send (viewport-buffer-dc viewport) set-text-background color))))
|
||||
|
||||
(define set-viewport-font
|
||||
(define set-viewport-font
|
||||
(lambda (viewport font)
|
||||
(send (viewport-dc viewport) set-font font)
|
||||
(send (viewport-buffer-dc viewport) set-font font)))
|
||||
|
||||
(define set-viewport-background
|
||||
(define set-viewport-background
|
||||
(lambda (viewport color)
|
||||
(send (viewport-dc viewport) set-background color)
|
||||
(send (viewport-buffer-dc viewport) set-background color)))
|
||||
|
||||
(define set-viewport-logical-function
|
||||
(define set-viewport-logical-function
|
||||
(lambda (viewport logical-function)
|
||||
(send (viewport-dc viewport) set-logical-function logical-function)
|
||||
(send (viewport-buffer-dc viewport) set-logical-function
|
||||
logical-function)))
|
||||
|
||||
(define white (make-rgb 1 1 1))
|
||||
(define black (make-rgb 0 0 0))
|
||||
(define red (make-rgb 1 0 0))
|
||||
(define green (make-rgb 0 1 0))
|
||||
(define blue (make-rgb 0 0 1))
|
||||
(define white-pen (get-pen white))
|
||||
(define black-pen (get-pen black))
|
||||
(define red-pen (get-pen red))
|
||||
(define blue-pen (get-pen blue))
|
||||
(define green-pen (get-pen green))
|
||||
(define white-brush (get-brush white))
|
||||
(define black-brush (get-brush black))
|
||||
(define red-brush (get-brush red))
|
||||
(define green-brush (get-brush green))
|
||||
(define blue-brush (get-brush blue))
|
||||
(define white (make-rgb 1 1 1))
|
||||
(define black (make-rgb 0 0 0))
|
||||
(define red (make-rgb 1 0 0))
|
||||
(define green (make-rgb 0 1 0))
|
||||
(define blue (make-rgb 0 0 1))
|
||||
(define white-pen (get-pen white))
|
||||
(define black-pen (get-pen black))
|
||||
(define red-pen (get-pen red))
|
||||
(define blue-pen (get-pen blue))
|
||||
(define green-pen (get-pen green))
|
||||
(define white-brush (get-brush white))
|
||||
(define black-brush (get-brush black))
|
||||
(define red-brush (get-brush red))
|
||||
(define green-brush (get-brush green))
|
||||
(define blue-brush (get-brush blue))
|
||||
|
||||
(define invisi-pen (send mred:the-pen-list find-or-create-pen "WHITE" 0 'transparent))
|
||||
(define invisi-brush (send mred:the-brush-list find-or-create-brush "WHITE" 'transparent))
|
||||
(define invisi-pen (send mred:the-pen-list find-or-create-pen "WHITE" 0 'transparent))
|
||||
(define invisi-brush (send mred:the-brush-list find-or-create-brush "WHITE" 'transparent))
|
||||
|
||||
(define xor-pen (send mred:the-pen-list find-or-create-pen "BLACK" 1 'xor))
|
||||
(define xor-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'xor))
|
||||
(define xor-pen (send mred:the-pen-list find-or-create-pen "BLACK" 1 'xor))
|
||||
(define xor-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'xor))
|
||||
|
||||
(define draw-it (lambda (draw flip clear) (draw)))
|
||||
(define flip-it (lambda (draw flip clear) (flip)))
|
||||
(define clear-it (lambda (draw flip clear) (clear)))
|
||||
(define draw-it (lambda (draw flip clear) (draw)))
|
||||
(define flip-it (lambda (draw flip clear) (flip)))
|
||||
(define clear-it (lambda (draw flip clear) (clear)))
|
||||
|
||||
(define make-draw-proc
|
||||
(define make-draw-proc
|
||||
(lambda (get-pen-name set-pen-name
|
||||
get-current-pen-name set-viewport-pen white-pen)
|
||||
(lambda (viewport)
|
||||
|
@ -472,7 +470,7 @@
|
|||
(when orig
|
||||
(set-viewport-pen viewport orig))))))))
|
||||
|
||||
(define make-do-line
|
||||
(define make-do-line
|
||||
(lambda (go)
|
||||
(let ([f (make-draw-proc 'get-pen 'set-pen
|
||||
'get-current-pen set-viewport-pen white-pen)])
|
||||
|
@ -500,19 +498,19 @@
|
|||
(lambda () (clear draw))))))])])
|
||||
the-function))))))
|
||||
|
||||
(define draw-line (make-do-line draw-it))
|
||||
(define (clear-line viewport)
|
||||
(define draw-line (make-do-line draw-it))
|
||||
(define (clear-line viewport)
|
||||
(let ([f ((make-do-line clear-it) viewport)])
|
||||
(rec clear-line-viewport
|
||||
(lambda (p1 p2)
|
||||
(f p1 p2)))))
|
||||
(define (flip-line viewport)
|
||||
(define (flip-line viewport)
|
||||
(let ([f ((make-do-line flip-it) viewport)])
|
||||
(rec flip-line-viewport
|
||||
(lambda (p1 p2)
|
||||
(f p1 p2)))))
|
||||
|
||||
(define (draw/clear/flip ivar)
|
||||
(define (draw/clear/flip ivar)
|
||||
(lambda (init-dc viewport p width height)
|
||||
(let ([dc (viewport-dc viewport)]
|
||||
[buffer-dc (viewport-buffer-dc viewport)])
|
||||
|
@ -521,10 +519,10 @@
|
|||
(send/proc dc ivar (posn-x p) (posn-y p) width height)
|
||||
(send/proc buffer-dc ivar (posn-x p) (posn-y p) width height))))
|
||||
|
||||
(define draw/clear/flip-rectangle (draw/clear/flip 'draw-rectangle))
|
||||
(define draw/clear/flip-ellipse (draw/clear/flip 'draw-ellipse))
|
||||
(define draw/clear/flip-rectangle (draw/clear/flip 'draw-rectangle))
|
||||
(define draw/clear/flip-ellipse (draw/clear/flip 'draw-ellipse))
|
||||
|
||||
(define (draw-arc viewport)
|
||||
(define (draw-arc viewport)
|
||||
(check-viewport 'draw-arc viewport)
|
||||
(rec draw-arc-viewport
|
||||
(case-lambda
|
||||
|
@ -547,7 +545,7 @@
|
|||
(send dc draw-arc (posn-x p) (posn-y p) width height start-radians end-radians)
|
||||
(send buffer-dc draw-arc (posn-x p) (posn-y p) width height start-radians end-radians))])))
|
||||
|
||||
(define (draw-solid-arc viewport)
|
||||
(define (draw-solid-arc viewport)
|
||||
(check-viewport 'draw-solid-arc viewport)
|
||||
(rec draw-arc-viewport
|
||||
(case-lambda
|
||||
|
@ -570,7 +568,7 @@
|
|||
(send dc draw-arc (posn-x p) (posn-y p) width height start-radians end-radians)
|
||||
(send buffer-dc draw-arc (posn-x p) (posn-y p) width height start-radians end-radians))])))
|
||||
|
||||
(define (draw-rectangle viewport)
|
||||
(define (draw-rectangle viewport)
|
||||
(check-viewport 'draw-rectangle viewport)
|
||||
(rec draw-rectangle-viewport
|
||||
(case-lambda
|
||||
|
@ -587,7 +585,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'transparent)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (draw-solid-rectangle viewport)
|
||||
(define (draw-solid-rectangle viewport)
|
||||
(check-viewport 'draw-solid-rectangle viewport)
|
||||
(rec draw-solid-rectangle-viewport
|
||||
(case-lambda
|
||||
|
@ -604,7 +602,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush (get-color color) 'solid)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (flip-rectangle viewport)
|
||||
(define (flip-rectangle viewport)
|
||||
(check-viewport 'flip-rectangle viewport)
|
||||
(rec flip-rectangle-viewport
|
||||
(case-lambda
|
||||
|
@ -621,7 +619,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'transparent)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (flip-solid-rectangle viewport)
|
||||
(define (flip-solid-rectangle viewport)
|
||||
(check-viewport 'flip-solid-rectangle viewport)
|
||||
(rec flip-solid-rectangle-viewport
|
||||
(case-lambda
|
||||
|
@ -638,7 +636,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush (get-color color) 'xor)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (draw-ellipse viewport)
|
||||
(define (draw-ellipse viewport)
|
||||
(check-viewport 'draw-ellipse viewport)
|
||||
(rec draw-ellipse-viewport
|
||||
(case-lambda
|
||||
|
@ -655,7 +653,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'transparent)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (draw-solid-ellipse viewport)
|
||||
(define (draw-solid-ellipse viewport)
|
||||
(check-viewport 'draw-solid-ellipse viewport)
|
||||
(rec draw-solid-ellipse-viewport
|
||||
(case-lambda
|
||||
|
@ -672,7 +670,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush (get-color color) 'solid)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (flip-ellipse viewport)
|
||||
(define (flip-ellipse viewport)
|
||||
(check-viewport 'flip-ellipse viewport)
|
||||
(rec flip-ellipse-viewport
|
||||
(case-lambda
|
||||
|
@ -689,7 +687,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'transparent)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (flip-solid-ellipse viewport)
|
||||
(define (flip-solid-ellipse viewport)
|
||||
(check-viewport 'flip-solid-rectangle viewport)
|
||||
(rec flip-solid-ellipse-viewport
|
||||
(case-lambda
|
||||
|
@ -706,7 +704,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush (get-color color) 'xor)))
|
||||
viewport p width height)])))
|
||||
|
||||
(define (clear-rectangle viewport)
|
||||
(define (clear-rectangle viewport)
|
||||
(check-viewport 'clear-rectangle viewport)
|
||||
(rec clear-rectangle-viewport
|
||||
(lambda (p width height)
|
||||
|
@ -720,7 +718,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'transparent)))
|
||||
viewport p width height))))
|
||||
|
||||
(define (clear-solid-rectangle viewport)
|
||||
(define (clear-solid-rectangle viewport)
|
||||
(check-viewport 'clear-solid-rectangle viewport)
|
||||
(rec clear-solid-rectangle-viewport
|
||||
(lambda (p width height)
|
||||
|
@ -734,7 +732,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "WHITE" 'solid)))
|
||||
viewport p width height))))
|
||||
|
||||
(define (clear-ellipse viewport)
|
||||
(define (clear-ellipse viewport)
|
||||
(check-viewport 'clear-ellipse viewport)
|
||||
(rec clear-ellipse-viewport
|
||||
(lambda (p width height)
|
||||
|
@ -748,7 +746,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "BLACK" 'transparent)))
|
||||
viewport p width height))))
|
||||
|
||||
(define (clear-solid-ellipse viewport)
|
||||
(define (clear-solid-ellipse viewport)
|
||||
(check-viewport 'clear-solid-ellipse viewport)
|
||||
(rec clear-solid-ellipse-viewport
|
||||
(lambda (p width height)
|
||||
|
@ -762,7 +760,7 @@
|
|||
(send dc set-brush (send mred:the-brush-list find-or-create-brush "WHITE" 'solid)))
|
||||
viewport p width height))))
|
||||
|
||||
(define make-do-pointlist
|
||||
(define make-do-pointlist
|
||||
(lambda (go name get-pen-name set-pen-name
|
||||
get-current-pen-name set-viewport-pen white-pen
|
||||
get-brush-name set-brush-name invisi-brush)
|
||||
|
@ -803,43 +801,43 @@
|
|||
(lambda () (clear draw))))))])])
|
||||
the-function))))))
|
||||
|
||||
(define make-do-polygon
|
||||
(define make-do-polygon
|
||||
(lambda (go)
|
||||
(make-do-pointlist go 'draw-polygon 'get-pen 'set-pen
|
||||
'get-current-pen set-viewport-pen white-pen
|
||||
'get-brush 'set-brush invisi-brush)))
|
||||
|
||||
(define make-do-solid-polygon
|
||||
(define make-do-solid-polygon
|
||||
(lambda (go)
|
||||
(make-do-pointlist go 'draw-polygon 'get-brush 'set-brush
|
||||
'get-current-brush set-viewport-brush white-brush
|
||||
'get-pen 'set-pen invisi-pen)))
|
||||
|
||||
(define draw-polygon (make-do-polygon draw-it))
|
||||
(define (clear-polygon viewport)
|
||||
(define draw-polygon (make-do-polygon draw-it))
|
||||
(define (clear-polygon viewport)
|
||||
(let ([f ((make-do-polygon clear-it) viewport)])
|
||||
(rec clear-polygon-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
(define (flip-polygon viewport)
|
||||
(define (flip-polygon viewport)
|
||||
(let ([f ((make-do-polygon flip-it) viewport)])
|
||||
(rec flip-polygon-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
|
||||
(define draw-solid-polygon (make-do-solid-polygon draw-it))
|
||||
(define (clear-solid-polygon viewport)
|
||||
(define draw-solid-polygon (make-do-solid-polygon draw-it))
|
||||
(define (clear-solid-polygon viewport)
|
||||
(let ([f ((make-do-solid-polygon clear-it) viewport)])
|
||||
(rec clear-solid-polygon-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
(define (flip-solid-polygon viewport)
|
||||
(define (flip-solid-polygon viewport)
|
||||
(let ([f ((make-do-solid-polygon flip-it) viewport)])
|
||||
(rec flip-solid-polygon-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
|
||||
(define make-do-pixel
|
||||
(define make-do-pixel
|
||||
(lambda (go)
|
||||
(let ([f (make-draw-proc 'get-pen 'set-pen
|
||||
'get-current-pen set-viewport-pen white-pen)])
|
||||
|
@ -866,19 +864,19 @@
|
|||
(lambda () (clear draw))))))])])
|
||||
the-function))))))
|
||||
|
||||
(define draw-pixel (make-do-pixel draw-it))
|
||||
(define (clear-pixel viewport)
|
||||
(define draw-pixel (make-do-pixel draw-it))
|
||||
(define (clear-pixel viewport)
|
||||
(let ([f ((make-do-pixel clear-it) viewport)])
|
||||
(rec clear-pixel-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
(define (flip-pixel viewport)
|
||||
(define (flip-pixel viewport)
|
||||
(let ([f ((make-do-pixel flip-it) viewport)])
|
||||
(rec flip-pixel-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
|
||||
(define string-functions
|
||||
(define string-functions
|
||||
(lambda (string-op)
|
||||
(letrec ([outer-function
|
||||
(case-lambda
|
||||
|
@ -917,19 +915,19 @@
|
|||
the-function)])])
|
||||
outer-function)))
|
||||
|
||||
(define draw-string (string-functions 'draw))
|
||||
(define (clear-string viewport)
|
||||
(define draw-string (string-functions 'draw))
|
||||
(define (clear-string viewport)
|
||||
(let ([f ((string-functions 'clear) viewport)])
|
||||
(rec clear-string-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
(define (flip-string viewport)
|
||||
(define (flip-string viewport)
|
||||
(let ([f ((string-functions 'flip) viewport)])
|
||||
(rec flip-string-viewport
|
||||
(lambda (posns offset)
|
||||
(f posns offset)))))
|
||||
|
||||
(define get-string-size
|
||||
(define get-string-size
|
||||
(case-lambda
|
||||
[(viewport) (get-string-size viewport default-font)]
|
||||
[(viewport font)
|
||||
|
@ -937,7 +935,7 @@
|
|||
(let-values ([(w h d a) (send (viewport-dc viewport) get-text-extent text font)])
|
||||
(list w h)))]))
|
||||
|
||||
(define get-color-pixel
|
||||
(define get-color-pixel
|
||||
(lambda (viewport)
|
||||
(lambda (posn)
|
||||
(let ([c (make-object mred:color%)]
|
||||
|
@ -947,7 +945,7 @@
|
|||
(error 'get-color-pixel "specified point is out-of-range"))
|
||||
c))))
|
||||
|
||||
(define get-pixel
|
||||
(define get-pixel
|
||||
(lambda (viewport)
|
||||
(lambda (posn)
|
||||
(let ([c (make-object mred:color%)]
|
||||
|
@ -961,13 +959,13 @@
|
|||
1
|
||||
0)))))
|
||||
|
||||
(define (test-pixel viewport)
|
||||
(define (test-pixel viewport)
|
||||
(lambda (color)
|
||||
(let ([c (make-object mred:color%)])
|
||||
(send (viewport-buffer-dc viewport) try-color color c)
|
||||
c)))
|
||||
|
||||
(define draw-pixmap-posn
|
||||
(define draw-pixmap-posn
|
||||
(lambda (filename [type 'unknown/mask])
|
||||
(check 'draw-pixmap-posn
|
||||
string? filename "filename"
|
||||
|
@ -987,7 +985,7 @@
|
|||
(send (viewport-dc viewport) draw-bitmap bitmap x y 'solid black-color (send bitmap get-loaded-mask))
|
||||
(send (viewport-buffer-dc viewport) draw-bitmap bitmap x y 'solid black-color (send bitmap get-loaded-mask))))))))
|
||||
|
||||
(define draw-pixmap
|
||||
(define draw-pixmap
|
||||
(lambda (viewport)
|
||||
(check 'draw-pixmap
|
||||
viewport? viewport "viewport")
|
||||
|
@ -998,7 +996,7 @@
|
|||
(orp not color?) color (format "color or ~e" #f))
|
||||
(((draw-pixmap-posn filename 'unknown) viewport) p color))))
|
||||
|
||||
(define copy-viewport
|
||||
(define copy-viewport
|
||||
(lambda (source target)
|
||||
(check 'copy-viewport
|
||||
viewport? source "viewport"
|
||||
|
@ -1009,7 +1007,7 @@
|
|||
(send target-dc draw-bitmap source-bitmap 0 0)
|
||||
(send target-buffer-dc draw-bitmap source-bitmap 0 0))))
|
||||
|
||||
(define save-pixmap
|
||||
(define save-pixmap
|
||||
(lambda (viewport)
|
||||
(check 'save-pixmap
|
||||
viewport? viewport "viewport")
|
||||
|
@ -1020,9 +1018,9 @@
|
|||
(let ([bm (viewport-bitmap viewport)])
|
||||
(send bm save-file filename kind)))))
|
||||
|
||||
(define sixlib-eventspace #f)
|
||||
(define sixlib-eventspace #f)
|
||||
|
||||
(define make-open-viewport
|
||||
(define make-open-viewport
|
||||
(lambda (name show?)
|
||||
(unless sixlib-eventspace
|
||||
(set! sixlib-eventspace
|
||||
|
@ -1085,12 +1083,12 @@
|
|||
[else (error "graphics not open")])])])
|
||||
open-viewport)))
|
||||
|
||||
(define open-viewport (make-open-viewport 'open-viewport #t))
|
||||
(define open-pixmap (make-open-viewport 'open-pixmap #f))
|
||||
(define open-viewport (make-open-viewport 'open-viewport #t))
|
||||
(define open-pixmap (make-open-viewport 'open-pixmap #f))
|
||||
|
||||
(define (default-display-is-color?) (mred:is-color-display?))
|
||||
(define (default-display-is-color?) (mred:is-color-display?))
|
||||
|
||||
(define position-display
|
||||
(define position-display
|
||||
(lambda (viewport counter)
|
||||
(cond
|
||||
[(equal? counter 0) '()]
|
||||
|
@ -1099,7 +1097,7 @@
|
|||
(position-display viewport (- counter 1)))])))
|
||||
|
||||
|
||||
(define create-cmap
|
||||
(define create-cmap
|
||||
(lambda ()
|
||||
(do ([index 0 (+ 1 index)])
|
||||
((> index 20))
|
||||
|
@ -1108,7 +1106,7 @@
|
|||
[g (- 1 r)])
|
||||
(change-color index (make-rgb r g b))))))
|
||||
|
||||
(define viewport->snip
|
||||
(define viewport->snip
|
||||
(lambda (viewport)
|
||||
(let ([orig-bitmap (send (viewport-canvas viewport) get-bitmap)]
|
||||
[orig-dc (viewport-buffer-dc viewport)])
|
||||
|
@ -1123,24 +1121,24 @@
|
|||
(send snip set-bitmap new-bitmap)
|
||||
snip)))))
|
||||
|
||||
(create-cmap)
|
||||
(create-cmap)
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; ;;;
|
||||
;;; ERROR CHECKING ;;;
|
||||
;;; ;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; ;;;
|
||||
;;; ERROR CHECKING ;;;
|
||||
;;; ;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; check-viewport : symbol TST -> void
|
||||
(define (check-viewport f-name obj)
|
||||
;; check-viewport : symbol TST -> void
|
||||
(define (check-viewport f-name obj)
|
||||
(unless (viewport? obj)
|
||||
(error f-name "expected viewport as first argument, got ~e" obj)))
|
||||
|
||||
;; (define-type arg/pred/name-list (list* (TST -> bool) TST string arg/pred/name-list))
|
||||
;; check : (symbol arg/pred/name-list *-> void)
|
||||
(define (check f-name . in-args)
|
||||
;; (define-type arg/pred/name-list (list* (TST -> bool) TST string arg/pred/name-list))
|
||||
;; check : (symbol arg/pred/name-list *-> void)
|
||||
(define (check f-name . in-args)
|
||||
(let loop ([args in-args]
|
||||
[n 0])
|
||||
(cond
|
||||
|
@ -1160,10 +1158,10 @@
|
|||
(loop (cdddr args)
|
||||
(+ n 1)))])))
|
||||
|
||||
(define (orp . preds)
|
||||
(define (orp . preds)
|
||||
(lambda (TST)
|
||||
(ormap (lambda (p) (p TST)) preds)))
|
||||
|
||||
(define (andp . preds)
|
||||
(define (andp . preds)
|
||||
(lambda (TST)
|
||||
(andmap (lambda (p) (p TST)) preds)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user