racket/collects/scriblib/scribblings/gui-eval.scrbl

81 lines
3.6 KiB
Racket

#lang scribble/manual
@(require (for-label scribble/eval scriblib/gui-eval))
@title[#:tag "gui-eval"]{Writing Examples with Pict Results}
@defmodule[scriblib/gui-eval]{The
@schememodname[scriblib/gui-eval] library support example
evaluations with results that are @schememodname[slideshow] picts.}
The trick is that @schememodname[racket/gui] is not generally
available when rendering documentation, because it requires a GUI
context. The picture output is rendered to an image file when the
@envvar{MREVAL} environment variable is set, so run the enclosing
document once with the environment varibale to generate the
images. Future runs (with the environment variable unset) use the
generated image.
@deftogether[(
@defform*[((gui-interaction datum ...)
(gui-interaction
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ...))
]
@defform*[((gui-interaction-eval datum ...)
(gui-interaction-eval
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ... ))]
@defform*[((gui-interaction-eval-show datum ...)
(gui-interaction-eval-show
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ...))]
@defform*[((gui-schemeblock+eval datum ...)
(gui-schemeblock+eval
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ...))]
@defform*[((gui-schememod+eval datum ...)
(gui-schememod+eval
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ...))]
@defform*[((gui-def+int datum ...)
(gui-def+int
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ...))]
@defform*[((gui-defs+int datum ...)
(gui-defs+int
#:eval+opts the-eval get-predicate? get-render
get-get-width get-get-height
datum ...))]
)]{
The first option of each of the above is
like @scheme[interaction], etc., but actually evaluating the forms
only when the @envvar{MREVAL} environment variable is set, and then in
an evaluator that is initialized with @schememodname[racket/gui/base]
and @schememodname[slideshow].
The second option of each allows you to specify your own evaluator via
the @scheme[the-eval] argument and then to specify four thunks that
return functions for finding and rendering graphical objects:
@itemize[
@item{@scheme[get-predicate? : (-> (-> any/c boolean?))]
Determines if a value is a graphical object (and thus handled by the other operations)}
@item{@scheme[get-render : (-> (-> any/c (is-a?/c dc<%>) number? number? void?))]
Draws a graphical object (only called if the predicate returned @scheme[#t]; the first
argument will be the value for which the predicate holds).}
@item{@scheme[get-get-width : (-> (-> any/c number?))]
Gets the width of a graphical object (only called if the predicate returned @scheme[#t]; the first
argument will be the value for which the predicate holds).}
@item{@scheme[get-get-height : (-> (-> any/c number?))]
Gets the height of a graphical object (only called if the predicate returned @scheme[#t]; the first
argument will be the value for which the predicate holds).}
]
}