fix argument checking of style-delta% constructor and set-delta

svn: r15386
This commit is contained in:
Matthew Flatt 2009-07-05 12:47:19 +00:00
parent a0c67cb369
commit 9c488a73c3

View File

@ -6,8 +6,6 @@
"private.ss"
"wx.ss")
(define font-directory #f)
(provide mult-color<%>
add-color<%>
style-delta%
@ -155,6 +153,8 @@
(define (alignment-delta? s)
(memq s '(base top bottom center)))
(define not-supplied (string->uninterned-symbol "[not-supplied]"))
(defclass style-delta% object%
(field-properties [[family-delta? family] 'base]
[[(make-or-false string?) face] #f]
@ -189,14 +189,33 @@
(send foreground-mult set 1.0 1.0 1.0)
(init [change-command 'change-nothing]
[param 0])
[param not-supplied])
(super-new)
(set-delta change-command param)
(do-set-delta change-command param
(lambda () (init-name 'style-delta%)))
(def/public (set-delta [symbol? [change-command 'change-nothing]]
[any? [param 0]])
[any? [param not-supplied]])
(do-set-delta change-command param (lambda () (method-name 'style-delta% 'set-delta))))
(define/private (do-set-delta change-command param get-who)
(define (check-no-param)
(unless (eq? param not-supplied)
(raise-mismatch-error (get-who)
(format "no extra argument expected for '~a command: " change-command)
param)))
(define (check-param pred)
(unless (pred param)
(if (eq? param not-supplied)
(raise-mismatch-error (get-who)
"missing argument for command: "
change-command)
(raise-mismatch-error (get-who)
(format "bad argument for '~a command: " change-command)
param))))
(case change-command
[(change-nothing)
(check-no-param)
(set! family 'base)
(set! face #f)
(set! size-mult 1)
@ -222,57 +241,75 @@
(set! alignment-on 'base)
(set! alignment-off 'base)]
[(change-style)
(check-param style-delta?)
(set! style-on param)
(set! style-off 'base)]
[(change-weight)
(check-param weight-delta?)
(set! weight-on param)
(set! weight-off 'base)]
[(change-smoothing)
(check-param smoothing-delta?)
(set! smoothing-on param)
(set! smoothing-off 'base)]
[(change-underline)
(check-param bool?)
(set! underlined-on param)
(set! underlined-off (not param))]
[(change-size-in-pixels)
(check-param bool?)
(set! size-in-pixels-on param)
(set! size-in-pixels-off (not param))]
[(change-size)
(check-param exact-integer?)
(set! size-mult 0)
(set! size-add param)]
[(change-family)
(check-param family-delta?)
(set! family param)
(set! face #f)]
[(change-alignment)
(check-param alignment-delta?)
(set! alignment-on param)
(set! alignment-off 'base)]
[(change-bold)
(check-no-param)
(set! weight-on 'bold)
(set! weight-off 'base)]
[(change-italic)
(check-no-param)
(set! style-on 'italic)
(set! style-off 'base)]
[(change-toggle-style)
(check-param style-delta?)
(set! style-on param)
(set! style-off param)]
[(change-toggle-weight)
(check-param weight-delta?)
(set! weight-on param)
(set! weight-off param)]
[(change-toggle-smoothing)
(check-param smoothing-delta?)
(set! smoothing-on param)
(set! smoothing-off param)]
[(change-toggle-underline)
(check-no-param)
(set! underlined-on #t)
(set! underlined-off #t)]
[(change-toggle-size-in-pixels)
(check-no-param)
(set! size-in-pixels-on #t)
(set! size-in-pixels-off #t)]
[(change-bigger)
(check-param exact-integer?)
(set! size-mult 1)
(set! size-add param)]
[(change-smaller)
(check-param exact-integer?)
(set! size-mult 1)
(set! size-add (- param))]
[(change-normal)
(check-no-param)
(set! family 'default)
(set! face #f)
(set! size-mult 0)
@ -291,10 +328,15 @@
(set! alignment-off 'base)
(set-delta 'change-normal-color)]
[(change-normal-color)
(check-no-param)
(send foreground-mult set 0 0 0)
(send foreground-add set 0 0 0)
(send background-mult set 0 0 0)
(send background-add set 255 255 255)])
(send background-add set 255 255 255)]
[else
(raise-type-error (get-who)
"change-command symbol"
change-command)])
this)
(def/public (set-delta-face [string? name] [symbol? [fam 'default]])