racket/collects/scribblings/draw/font-name-directory-intf.scrbl
Matthew Flatt 2bdcdbb197 racket/draw, racket/gui: modernize contracts, mostly in documentation
Use `or/c' instead of `one-of/c', `#f' instead of `false/c'.
2012-04-06 18:51:10 -06:00

155 lines
5.8 KiB
Racket

#lang scribble/doc
@(require "common.rkt" scribble/bnf)
@definterface/title[font-name-directory<%> ()]{
There is one @racket[font-name-directory<%>] object:
@racket[the-font-name-directory]. It implements a mapping from font
specifications (face, family, style, and weight) to information for
rendering text on a specific device. Programmers rarely need to
directly invoke methods of @racket[the-font-name-directory]. It is
used automatically when drawing text to a @racket[dc<%>]
object. Nevertheless, @racket[the-font-name-directory] is available
so that programmers can query or modify the mapping manually. A
programmer may also need to understand how the face-and-family
mapping works.
To extract mapping information from @racket[the-font-name-directory],
first obtain a @defterm{font ID}, which is an index based on a family
and optional face string. Font IDs are returned by
@method[font-name-directory<%> find-or-create-font-id] and
@method[font-name-directory<%> get-font-id] . A Font ID can be
combined with a weight and style to obtain a specific mapping value
via @method[font-name-directory<%> get-screen-name] or
@method[font-name-directory<%> get-post-script-name].
For a family without a face string, the corresponding font ID has a
useful built-in mapping for every platform and device. For a family with a
face string, @racket[the-font-name-directory] interprets the string
(in a platform-specific way) to generate a mapping for
drawing (to a canvas's @racket[dc<%>], a @racket[bitmap-dc%], or a
@racket[printer-dc%]).
Currently, on all platforms, a face string is interpreted as a
@hyperlink["http://www.pango.org"]{Pango} font description when it
contains a comma, otherwise it is treated as a family name. A
face can thus be just a family name such as @racket["Helvetica"], a family
followed by a comma and font modifiers as in @racket["Helvetica, Bold"], or a sequence of comma-separated
familie names followed by space-separated font options as an
@racket["Helvetica, Arial, bold italic"]. Any size in a font
description is overridden by a given @racket[font%]'s size. Any
(slant) style or weight options in a font description are overridden
by a non-@racket['normal] value for a given @racket[font%]'s style or
weight, respectively.
@defmethod[(find-family-default-font-id [family (or/c 'default 'decorative 'roman 'script
'swiss 'modern 'symbol 'system)])
exact-integer?]{
Gets the font ID representing the default font for a family. See
@racket[font%] for information about font families.
}
@defmethod[(find-or-create-font-id [name string?]
[family (or/c 'default 'decorative 'roman 'script
'swiss 'modern 'symbol 'system)])
exact-integer?]{
Gets the face name for a font ID, initializing the mapping for
the face name if necessary.
Font ID are useful only as mapping indices for
@indexed-racket[the-font-name-directory].
}
@defmethod[(get-face-name [font-id exact-integer?])
(or/c string? #f)]{
Gets the face name for a font ID. If the font ID corresponds to
the default font for a particular family, @racket[#f] is returned.
}
@defmethod[(get-family [font-id exact-integer?])
(or/c 'default 'decorative 'roman 'script
'swiss 'modern 'symbol 'system)]{
Gets the family for a font ID. See
@racket[font%] for information about font families.
}
@defmethod[(get-font-id [name string?]
[family (or/c 'default 'decorative 'roman 'script
'swiss 'modern 'symbol 'system)])
exact-integer?]{
Gets the font ID for a face name paired with a default family. If the
mapping for the given pair is not already initialized, @racket[0] is
returned. See also @method[font-name-directory<%>
find-or-create-font-id].
Font ID are useful only as mapping indices for
@indexed-racket[the-font-name-directory].
}
@defmethod[(get-post-script-name [font-id exact-integer?]
[weight (or/c 'normal 'bold 'light)]
[style (or/c 'normal 'italic 'slant)])
(or/c string? #f)]{
Gets a PostScript font description for a font ID, weight, and style
combination.
See @racket[font%] for information about @racket[weight] and
@racket[style].
}
@defmethod[(get-screen-name [font-id exact-integer?]
[weight (or/c 'normal 'bold 'light)]
[style (or/c 'normal 'italic 'slant)])
(or/c string? #f)]{
Gets a platform-dependent screen font description (used for drawing to a
canvas's @racket[dc<%>], a @racket[bitmap-dc%], or a
@racket[printer-dc%]) for a font ID, weight, and style combination.
See @racket[font%] for information about @racket[weight] and
@racket[style].
}
@defmethod[(set-post-script-name [font-id exact-integer?]
[weight (or/c 'normal 'bold 'light)]
[style (or/c 'normal 'italic 'slant)]
[name string?])
void?]{
Sets a PostScript font description for a font ID, weight, and style
combination. See also @method[font-name-directory<%>
get-post-script-name].
See @racket[font%] for information about @racket[weight] and @racket[style].
}
@defmethod[(set-screen-name [font-id exact-integer?]
[weight (or/c 'normal 'bold 'light)]
[style (or/c 'normal 'italic 'slant)]
[name string?])
void?]{
Sets a platform-dependent screen font description (used for drawing to a
canvas's @racket[dc<%>], a @racket[bitmap-dc%], or a
@racket[printer-dc%]) for a font ID, weight, and style combination.
See @racket[font%] for information about @racket[weight] and
@racket[style].
}}