File: define-application-example.sc

package info (click to toggle)
stalin 0.11-4
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 110,316 kB
  • ctags: 163,128
  • sloc: ansic: 1,757,574; lisp: 88,332; sh: 1,496; makefile: 371; sed: 100; csh: 30
file content (84 lines) | stat: -rw-r--r-- 2,486 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
(include "QobiScheme")

(define *line-segments* #f)
(define *ellipses* #f)
(define *object* #f)
(define *flag?* #f)
(define *mode* #f)
(define *k* #f)

(define-application main #f 480 5 2 6
 (lambda ()
  (set! *line-segments* '())
  (set! *ellipses* '())
  (set! *object* 'line-segment)
  (set! *flag?* #f)
  (set! *mode* 'a)
  (set! *k* 0)
  (define-button 0 0 "Help" #f help-command)
  (define-radio-buttons *object* (lambda () #f)
   (1 0 line-segment "Line")
   (2 0 ellipse "Ellipse"))
  (define-button 5 0 "Quit" #f quit)
  (define-toggle-button 0 1 "Flag" *flag?*
   (lambda () (say (format #f "Flag=~s" *flag?*))))
  (define-cycle-button 1 1 *mode*
   (lambda () (say (format #f "Mode=~s" *mode*)))
   (a "A")
   (b "B")
   (c "C"))
  (define-integer-range-buttons 2 1 3 1 *k* 0 9
   (lambda () (format #f "-K ~s" *k*))
   (lambda () (format #f "+K ~s" *k*))
   (lambda () (say (format #f "K=~s" *k*))))
  (define-key (list (control #\x) (control #\c)) "Quit" quit)
  (define-key (control #\h) "Help" help-command))
 (lambda () #f)
 (lambda () #f)
 (lambda ()
  (for-each (lambda (l)
	     (xdrawline *display* *display-pane* *thin-gc*
			(x (line-segment-p l))
			(y (line-segment-p l))
			(x (line-segment-q l))
			(y (line-segment-q l))))
	    *line-segments*)
  (for-each (lambda (c)
	     (xdrawarc *display* *display-pane* *thin-gc*
		       (x (line-segment-p c))
		       (y (line-segment-p c))
		       (- (x (line-segment-q c)) (x (line-segment-p c)))
		       (- (y (line-segment-q c)) (y (line-segment-p c)))
		       0 (* 360 64)))
	    *ellipses*)
  (define-region 0 0 *display-pane-width* *display-pane-height*
   (lambda (x1 y1)
    (case *object*
     ((line-segment)
      (let* ((result (tracking-pointer
		      #t
		      (lambda (x2 y2)
		       (xdrawline *display* *display-pane* *thin-flipping-gc*
				  x1 y1 x2 y2))))
	     (x2 (first result))
	     (y2 (second result)))
       (set! *line-segments*
	     (cons (make-line-segment (vector x1 y1) (vector x2 y2))
		   *line-segments*))
       (redraw-display-pane)))
     ((ellipse)
      (let* ((result (tracking-pointer
		      #t
		      (lambda (x2 y2)
		       (xdrawarc *display* *display-pane* *thin-flipping-gc*
				 x1 y1 (- x2 x1) (- y2 y1)
				 0 (* 360 64)))))
	     (x2 (first result))
	     (y2 (second result)))
       (set! *ellipses*
	     (cons (make-line-segment (vector x1 y1) (vector x2 y2))
		   *ellipses*))
       (redraw-display-pane)))
     (else (fuck-up)))))))

(main '())