1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- ;; Frames: Fenster mit Rahmen drum
- ;; ,open threads rendezvous rendezvous-channels rendezvous-async-channels \
- ;; toy-geometry toy-display-system toy-window-system define-record-types
- (define-record-type frame :frame
- (really-make-frame widget-env highlight-channel)
- frame?
- (widget-env frame-widget-env)
- (highlight-channel frame-highlight-channel))
- (define frame-border 8)
- (define (make-frame realize widget-env)
- (let* ((frame-bitmap (widget-env-bitmap widget-env))
- (outer-rectangle (bitmap-rectangle frame-bitmap))
- (frame-rectangle
- (make-rectangle 0 0
- (- (rectangle-width outer-rectangle) 1)
- (- (rectangle-height outer-rectangle) 1)))
- (highlight-rectangle
- (make-rectangle 1 1
- (- (rectangle-width outer-rectangle) 3)
- (- (rectangle-height outer-rectangle) 3)))
- (child-rectangle
- (make-rectangle frame-border frame-border
- (- (rectangle-width outer-rectangle)
- (* 2 frame-border))
- (- (rectangle-height outer-rectangle)
- (* 2 frame-border))))
- (child-mouse-channel (make-channel))
- (child-widget-env
- (make-widget-env (make-bitmap frame-bitmap child-rectangle)
- child-mouse-channel
- (widget-env-keyboard-channel widget-env)
- (widget-env-control-in-channel widget-env)
- (widget-env-control-out-channel widget-env)))
-
-
- (highlight-channel (make-channel))
- (draw-highlight
- (lambda (rator)
- (bitmap-draw-rectangle frame-bitmap rator highlight-rectangle)))
- (mouse-translation
- (make-point frame-border frame-border)))
- (bitmap-clear frame-bitmap)
- (bitmap-draw-rectangle frame-bitmap 'set frame-rectangle)
-
- (spawn
- (lambda ()
- (let loop ()
- (send child-mouse-channel
- (mouse-message-translate
- mouse-translation
- (receive (widget-env-mouse-channel widget-env))))
- (loop))))
- (spawn
- (lambda ()
- (let loop ((highlight? #f))
- (let ((new-highlight? (receive highlight-channel)))
- (cond
- ((and highlight? (not new-highlight?))
- (draw-highlight 'clear))
- ((and (not highlight?) new-highlight?)
- (draw-highlight 'copy)))
- (loop new-highlight?)))))
- (values (really-make-frame widget-env highlight-channel)
- (realize child-widget-env))))
- (define (frame=? frame-1 frame-2)
- (eq? frame-1 frame-2))
- (define (frame-highlight! frame highlight?)
- (send (frame-highlight-channel frame) highlight?))
- ;; Test
- (define (test-frame-with-button)
- (make-frame
- (lambda (widget-env)
- (make-button "Click me!"
- (lambda ()
- (display "Click! Click!")
- (newline))
- widget-env))
- (make-window-system "Button/Frame Test" 320 200)))
|