Supplying 'nw (northwest), 'ne (northeast), 'sw (southwest), or 'se (southeast) in style extends the cloud to better cover the corner within its bounding box in the corresponding direction. The 'square style is a shorthand for all of those combined. The 'wide style increases the number of bumps along the cloud’s top and bottom edges.
Changed in version 1.6 of package pict-lib: Added style.
(standard-fish w h [ #:direction direction #:color color #:eye-color eye-color #:open-mouth open-mouth]) → pict? w : real? h : real? direction : (or/c 'left 'right) = 'left color : (or/c string? (is-a?/c color%)) = "blue" eye-color : (or/c string? (is-a?/c color%) #f) = "black" open-mouth : (or/c boolean? real?) = #f
The open-mouth argument can be either #f (mouth closed), #t (mouth fully open), or a number: 0.0 is closed, 1.0 is fully open, and numbers in between are partially open.
> (standard-fish 100 50) > (standard-fish 100 50 #:direction 'right #:color "chocolate") > (standard-fish 100 50 #:eye-color "saddlebrown" #:color "salmon") > (standard-fish 100 50 #:open-mouth #t #:color "olive")
The style can include any of the following:
include a Racket logo on the machine’s screen
put 1s and 0s on the machine’s screen
like 'binary, and also give the machine horns and a tail
(thermometer [ #:height-% height-% #:color-% color-% #:ticks ticks #:start-color start-color #:end-color end-color #:top-circle-diameter top-circle-diameter #:bottom-circle-diameter bottom-circle-diameter #:stem-height stem-height #:mercury-inset mercury-inset]) → pict? height-% : (between/c 0 1) = 1 color-% : (between/c 0 1) = height-% ticks : exact-nonnegative-integer? = 4 start-color : (or/c string? (is-a?/c color%)) = "lightblue" end-color : (or/c string? (is-a?/c color%)) = "lightcoral" top-circle-diameter : (>/c 0) = 40 bottom-circle-diameter : (>/c 0) = 80 stem-height : (>/c 0) = 180 mercury-inset : (>/c 0) = 8
The mercury is drawn the same way, but by creating the three components inset from the versions that draw the boundary of the thermometer. This inset is controlled by the mercury-inset argument.
The height of the mercury in the thermometer is controlled by the height-% argument. Its color is interpolated between the start-color and end-color, as determined by the color-% argument.
Finally, some number of ticks are drawn, based on the ticks argument.
> (thermometer #:stem-height 90 #:bottom-circle-diameter 40 #:top-circle-diameter 20 #:mercury-inset 4)
(standard-cat width height #:left-ear-extent left-ear-extent #:left-ear-arc left-ear-arc #:left-ear-angle left-ear-angle #:right-ear-extent right-ear-extent #:right-ear-arc right-ear-arc #:right-ear-angle right-ear-angle #:fur-color fur-color #:fur-border-color fur-border-color #:lip-color lip-color #:lip-border-color lip-border-color #:lip-border-width lip-border-width #:eye-color eye-color #:nose-color nose-color #:nose nose #:happy? happy? #:eyes eyes #:left-eye left-eye #:right-eye right-eye #:whisker-length whisker-length #:whisker-droop whisker-droop #:whisker-width whisker-width #:whisker-color whisker-color #:whisker-inset? whisker-inset? #:border-width border-width) → pict? width : positive? height : positive? left-ear-extent : (>=/c 0) left-ear-arc : (real-in 0 (* 2 pi)) left-ear-angle : (real-in 0 (* 2 pi)) right-ear-extent : (>=/c 0) right-ear-arc : (real-in 0 (* 2 pi)) right-ear-angle : (real-in 0 (* 2 pi)) fur-color : (or/c #f string? (is-a?/c color%)) fur-border-color : (or/c #f string? (is-a?/c color%)) lip-color : (or/c #f string? (is-a?/c color%)) lip-border-color : (or/c string? (is-a?/c color%)) lip-border-width : (or/c #f (real-in 0 255)) eye-color : (or/c #f string? (is-a?/c color%)) nose-color : (or/c #f string? (is-a?/c color%)) nose : pict? happy? : any/c eyes : (or/c #f pict?) left-eye : (if eyes (or/c #f pict?) pict?) right-eye : (if eyes (or/c #f pict?) pict?) whisker-length : positive? whisker-droop : real? whisker-width : (or/c #f (real-in 0 255)) whisker-color : (or/c string? (is-a?/c color%)) whisker-inset? : any/c border-width : (or/c #f (real-in 0 255))
The whisker-width argument can be either #f (no whiskers) or a real between 0 and 255 to specify pen width. Similarly for border-width, there can be no border around the cat face or a custom-width border.
Each cat ear can have a custom extent (length), an arc length (width), and angle (position on head). There are constraints on the ear arc lengths and angles to prevent overlap. The default ear angle is dependent on the ear arc length to make the default positioning sensible. The default ear extent is 1/4 the height of the cat face.
> (standard-cat 100 90) > (standard-cat 100 90 #:happy? #t) > (standard-cat 100 90 #:left-ear-arc (* pi 1/8) #:right-ear-extent 30)
Added in version 1.10 of package pict-lib.
The spike argument indicates the corner from which a spike protrudes from the balloon (i.e., the spike that points to whatever the balloon is about). For example, 'n means “north,”, which is a spike in the top middle of the balloon.
The dx and dy arguments specify how far the spike should protrude. For a 'w spike, dx should be negative, etc.
The color argument is the background color for the balloon.
The corner-radius argument determines the radius of the circle used to round the balloon’s corners. As usual, if it is less than 1, then it acts as a ratio of the balloon’s width or height.
The result is a balloon, not a pict. The balloon-pict function extracts a pict whose bounding box does not include the spike, but includes the rest of the image, and the balloon-point-x and balloon-point-y functions extract the location of the spike point. More typically, the pin-balloon function is used to add a balloon to a pict.
balloon : balloon? base : pict? x : real? y : real? (pin-balloon balloon base at-pict find) → pict? balloon : balloon? base : pict? at-pict : pict-path? find : (pict? pict-path? . -> . (values real? real?))
The resulting pict has the same bounding box, descent, and ascent as base, even if the balloon extends beyond the bounding box.
> (define a-pict (standard-fish 70 40))
> (pin-balloon (balloon 40 30 5 'se 5 5) (cc-superimpose (blank 300 150) a-pict) a-pict lc-find)
> (pin-balloon (wrap-balloon (text "Hello!") 'sw -5 3) (cc-superimpose (blank 300 150) a-pict) a-pict rt-find)
v : any/c (make-balloon pict x y) → balloon? pict : pict? x : real? y : real? (balloon-pict balloon) → pict? balloon : balloon? (balloon-point-x balloon) → real? balloon : balloon? (balloon-point-y balloon) → real? balloon : balloon?
Added in version 1.9 of package pict-lib.
eyebrow-kind : (or/c 'none 'normal 'worried 'angry)
(or/c 'plain 'smaller 'narrow 'medium 'large 'huge 'grimace 'oh 'tongue) frown? : any/c color : (or/c string (is-a?/c color%)) eye-inset : real? eyebrow-dy : real? pupil-dx : real? pupil-dy : real? eyebrow-on? : any/c = #t mouth-on? : any/c = #t eye-on? : any/c = #t tongue-on? : any/c = #t face-bg-on? : any/c = #t teeth-on? : any/c = #t
eyebrow-kind determines the eyebrow shape.
mouth-kind determines the mouth shape, combined with frown?.
frown? determines whether the mouth is up or down.
color determines the face color.
eye-inset adjusts the eye size; recommend values are between 0 and 10.
eyebrow-dy adjusts the eyebrows; recommend values: between -5 and 5.
pupil-dx adjusts the pupil; recommend values are between -10 and 10.
pupil-dy adjusts the pupil; recommend values are between -15 and 15.
The #:eyebrow-shading? through #:face-background-shading? arguments control whether a shading is used for on a particular feature in the face (shading tends to look worse than just anti-aliasing when the face is small). The #:teeth? argument controls the visibility of the teeth for some mouth shapes.
|(require pict/flash)||package: pict-lib|
(filled-flash width height [ n-points spike-fraction rotation]) → pict? width : real? height : real? n-points : exact-positive-integer? = 10 spike-fraction : (real-in 0 1) = 0.25 rotation : real? = 0
The height and width arguments determine the size of the oval in which the flash is drawn, prior to rotation. The actual height and width may be smaller if points is not a multiple of 4, and the actual height and width will be different if the flash is rotated.
The n-points argument determines the number of points on the flash.
The spike-fraction argument determines how big the flash spikes are compared to the bounding oval.
The rotation argument specifies an angle in radians for counter-clockwise rotation.
The flash is drawn in the default color.
(outline-flash width height [ n-points spike-fraction rotation]) → pict? width : real? height : real? n-points : exact-positive-integer? = 10 spike-fraction : (real-in 0 1) = 0.25 rotation : real? = 0
Embedded picts within stx are used directly. Row elements are combined using and operator like htl-append, so use code-align (see below) as necessary to add an ascent to ascentless picts. More precisely, creation of a line of code uses pict-last to determine the end point of the element most recently added to a line; the main effect is that closing parentheses are attached in the right place when a multi-line pict is embedded in stx.
An identifier that starts with _ is italicized in the pict, and the _ is dropped, unless the code-italic-underscore-enabled parameter is set to #f. Also, unless code-scripts-enabled is set to #f, _ and ^ in the middle of a word create superscripts and subscripts, respectively (like TeX); for example foo^4_ok is displayed as the identifier foo with a 4 superscript and an ok subscript.
Further, uses of certain identifiers in stx typeset specially:
(code:comment s ...) —
produces a comment block, with each s on its own line, where each s must be a string or a pict.
(code:contract datum ...) —
like code:line, but every datum is colored as a comment, and a ; is prefixed to every line.
(code:template datum ...) —
like code:line, but a ; is prefixed to every line.
typesets as a vertical bar (for no particularly good reason).
(code datum ...)
(current-code-tt proc) → void? proc : (string? . -> . pict?)
This procedure is not used to typeset subscripts or other items that require font changes, where current-code-font is used directly.
(get-current-code-font-size proc) → void? proc : (-> exact-nonnegative-integer?)
(current-reader-forms syms) → void? syms : (listof symbol?)
(current-keyword-list names) → void? names : (listof string?)
(current-const-list names) → void? names : (listof string?)
(current-literal-list names) → void? names : (listof string?)
(code-colorize-quote-enabled on?) → void? on? : any/c
(code-italic-underscore-enabled on?) → void? on? : any/c
The resulting code-id syntactic form takes a sequence of datums:
(code-id datum ...)
It produces a pict that typesets the sequence. Source-location information for the datum determines the layout of code in the resulting pict. The code-id is expanded in such a way that source location is preserved during compilation (so typeset-code-id receives a syntax object with source locations intact).
If a datum contains (escape-id expr)—
If a datum contains (transform-id datum ...) or transform-id for a transform-id that is bound as syntax to a code transformer, then the (transform-id datum ...) or transform-id may be replaced with an escaped expression, depending on the code transformer’s result.
For code transformer created with (make-code-transformer proc), proc takes a syntax object representing the use of an identifier bound to the transformer, and it produces an expression whose value replaces the identifier use within a code form or a form defined via define-code. Like a macro transformer, a code transformer is triggered either by a use of the bound identifier in an “application” position, in which case the transformer receives the entire “application” form, or the identifier by itself can also trigger the transformer. The code transformer’s proc can return #f, in which case the use of the identifier is left untransformed; if the identifier was used in an “application” position, the transformer proc will be called again for the identifier use by itself.
(make-code-transformer (lambda (use-stx) (if (identifier? use-stx) stx #f)))
A structure type with the prop:code-transformer property implements a code transformer. The property value must be a procedure of one argument, which receives the structure and returns a procedure that is like a proc passed to make-code-transformer, except that the property value takes the structure instance as an argument before the syntax object to transform.
> (let-syntax ([bag (make-code-transformer #'(code hat))] [copy (make-code-transformer (syntax-rules () [(_ c) (code (* 2 c))]))]) (inset (frame (code ((copy cat) in the bag))) 2))
(define-exec-code (pict-id runnable-id string-id) datum ...)
Meanwhile, runnable-id is bound to a syntax object that wraps the datums in a begin. In this case, _s are removed from the datums, but not the following expression. Thus, an _ identifier is used to comment out an expression from the pict, but have it present in the syntax object for evaluation.
(define-exec-code/scale scale-expr (pict-id runnable-id string-id) datum ...)
(codeblock-pict code-string [ #:keep-lang-line? keep?]) → pict? code-string : string? keep? : any/c = #t
When keep? is #f, the first #lang line is removed from the pict.
> (codeblock-pict #:keep-lang-line? #f (string-join '("#lang 2d racket" "(require 2d/cond)" "(define (same? a b)" " #2dcond" " ╔═════════════╦═══════════════════════╦═════════════╗" " ║ ║ (pair? a) ║ (number? a) ║" " ╠═════════════╬═══════════════════════╬═════════════╣" " ║ (pair? b) ║ (and (same? (car a) ║ #f ║" " ║ ║ (car b)) ║ ║" " ║ ║ (same? (cdr a) ║ ║" " ║ ║ (cdr b))) ║ ║" " ╠═════════════╬═══════════════════════╬═════════════╣" " ║ (number? b) ║ #f ║ (= a b) ║" " ╚═════════════╩═══════════════════════╩═════════════╝)") "\n"))
The default value maps the standard set of token classes (as recognized by DrRacket) to the corresponding colors used by code. Specifically, it maps
'no-color, 'parenthesis, and 'hash-colon-keyword to (current-base-color),
'symbol to (current-id-color),
'keyword to (current-keyword-color),
'string and 'constant to (current-literal-color),
'comment to (current-comment-color),
'white-space to "white",
and everything else to "black".
It is usually sufficient to adjust the individual color parameters also used by code, but current-token-class->color allows for more fine-grained control over how codeblock-pict interprets token classes.
Added in version 1.8 of package pict-lib.