dc<%>: add alignment scale

Partly reverts d8a438231f by making the alignment scale always default
to 1, but allows the "fix" (for programs that was drawing to a bitmap
with backing scale 2 to be like drawing with scale 2 into a bitmap
with backing scale 1) by setting the alignment scale to 2 for a
drawing destination that has a backing scale of 2.

original commit: 582e992501c8e6833a82412235731a9d0416b3b9
This commit is contained in:
Matthew Flatt 2014-01-05 14:52:28 -07:00
parent 54f8bf10a5
commit 392291938f

View File

@ -14,11 +14,6 @@
(lambda (f)
(collection-file-path f "icons")))
(define local-path
(let ([d (current-load-relative-directory)])
(lambda (f)
(build-path d f))))
(define (get-icon)
(make-object bitmap% (sys-path "mred.xbm") 'xbm))
@ -234,6 +229,7 @@
[cyan? #f]
[multi-page? #f]
[smoothing 'unsmoothed]
[align-scale 1.0]
[save-filename #f]
[save-file-format #f]
[clip 'none]
@ -247,7 +243,7 @@
(send hp3 stretchable-height #f)
(make-object button% "What Should I See?" hp0
(lambda (b e)
(show-instructions (local-path "draw-info.txt"))))
(show-instructions (collection-file-path "draw-info.txt" "tests/gracket"))))
(let ([canvas
(make-object
(class canvas%
@ -1130,6 +1126,7 @@
(send dc set-scale xscale yscale)
(send dc set-origin offset offset)))
(send dc set-smoothing smoothing)
(send dc set-alignment-scale align-scale)
(send dc set-background
(if cyan?
@ -1328,18 +1325,36 @@
(set! serialize-record? (= 8 (send self get-selection)))
(set! use-bad? (< 9 (send self get-selection)))
(send canvas refresh)))
(make-object button% "PS" hp
(make-object choice% #f
'("MrEd XOR" "PLT Middle" "PLT ^ MrEd" "MrEd ^ PLT" "MrEd ^ MrEd"
"MrEd~ Opaque" "MrEd ^ MrEd~" "M^M~ Opaque" "M^M~ Red" "M^M~ Rd Opq"
"PLT^PLT")
hp
(lambda (self event)
(send canvas on-paint 'ps)))
(make-object button% "PDF" hp
(send canvas set-mask-ex-mode
(list-ref '(mred plt plt-mask mred^plt mred^mred
mred~ mred^mred~ opaque-mred^mred~
red-mred^mred~ opaque-red-mred^mred~
plt^plt)
(send self get-selection)))))
(make-object check-box% "Kern" hp
(lambda (self event)
(send canvas on-paint 'pdf)))
(make-object button% "SVG" hp
(send canvas set-kern (send self get-value))))
(make-object check-box% "Cyan" hp
(lambda (self event)
(send canvas on-paint 'svg)))
(make-object check-box% "Multiple Pages" hp
(lambda (self event)
(set! multi-page? (send self get-value))))
(set! cyan? (send self get-value))
(send canvas refresh)))
(send (make-object check-box% "Icons" hp2
(lambda (self event)
(send canvas set-bitmaps (send self get-value))))
set-value #t)
(send (make-object check-box% "Stipples" hp2
(lambda (self event)
(send canvas set-stipples (send self get-value))))
set-value #t)
(make-object check-box% "Pixset" hp2
(lambda (self event)
(send canvas set-pixel-copy (send self get-value))))
(make-object button% "Save" hp
(lambda (b e)
(unless use-bitmap?
@ -1356,42 +1371,17 @@
(set! save-filename f)
(set! save-file-format format)
(send canvas refresh))))))
(make-object check-box% "Cyan" hp
(lambda (self event)
(set! cyan? (send self get-value))
(send canvas refresh)))
(send (make-object check-box% "Icons" hp2
(lambda (self event)
(send canvas set-bitmaps (send self get-value))))
set-value #t)
(send (make-object check-box% "Stipples" hp2
(lambda (self event)
(send canvas set-stipples (send self get-value))))
set-value #t)
(make-object check-box% "Pixset" hp2
(lambda (self event)
(send canvas set-pixel-copy (send self get-value))))
(make-object choice% #f '("Unsmoothed" "Smoothed" "Aligned") hp2.5
(lambda (self event)
(set! smoothing (list-ref '(unsmoothed smoothed aligned)
(send self get-selection)))
(send canvas refresh)))
(make-object choice% #f '("Align 1.0" "Align 2.0" "Align 3.0" "Align 0.5") hp2.5
(lambda (self event)
(set! align-scale (list-ref '(1.0 2.0 3.0 0.5)
(send self get-selection)))
(send canvas refresh)))
(make-object button% "Clock" hp2.5 (lambda (b e) (do-clock #f)))
(make-object choice% #f
'("MrEd XOR" "PLT Middle" "PLT ^ MrEd" "MrEd ^ PLT" "MrEd ^ MrEd"
"MrEd~ Opaque" "MrEd ^ MrEd~" "M^M~ Opaque" "M^M~ Red" "M^M~ Rd Opq"
"PLT^PLT")
hp2.5
(lambda (self event)
(send canvas set-mask-ex-mode
(list-ref '(mred plt plt-mask mred^plt mred^mred
mred~ mred^mred~ opaque-mred^mred~
red-mred^mred~ opaque-red-mred^mred~
plt^plt)
(send self get-selection)))))
(make-object check-box% "Kern" hp2.5
(lambda (self event)
(send canvas set-kern (send self get-value))))
(make-object choice% "Clip"
'("None" "Rectangle" "Rectangle2" "Octagon"
"Circle" "Wedge" "Round Rectangle" "Lambda" "A"
@ -1436,6 +1426,15 @@
(make-object check-box% "Cvs Gray" hp3
(lambda (self event)
(send canvas set-canvas-gray (send self get-value))))
(make-object button% "PS" hp3
(lambda (self event)
(send canvas on-paint 'ps)))
(make-object button% "PDF" hp3
(lambda (self event)
(send canvas on-paint 'pdf)))
(make-object button% "SVG" hp3
(lambda (self event)
(send canvas on-paint 'svg)))
(let ([clock (lambda (clip?)
(thread (lambda ()
(set! clock-clip? clip?)
@ -1456,6 +1455,9 @@
(send canvas refresh))))])
(set! do-clock clock)
(make-object button% "Clip Clock" hp2.75 (lambda (b e) (clock #t)))
(make-object check-box% "Multiple Pages" hp2.75
(lambda (self event)
(set! multi-page? (send self get-value))))
(make-object button% "Print" hp4 (lambda (self event) (send canvas on-paint 'print)))
(make-object button% "Print Setup" hp4 (lambda (b e) (let ([c (get-page-setup-from-user)])
(when c