annotate man/lispref/glyphs.texi @ 2172:3c320a47df74

[xemacs-hg @ 2004-07-09 21:50:24 by viteno] Update xemacs_extra_name.
author viteno
date Fri, 09 Jul 2004 21:50:24 +0000
parents 4657b5a54253
children c91543697b09
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @c Copyright (C) 1995, 1996 Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/glyphs.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @node Glyphs, Annotations, Faces and Window-System Objects, top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @chapter Glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @cindex glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
10 A @dfn{glyph} is an object that is used for pixmaps, widgets and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
11 images of all sorts, as well as for things that ``act'' like pixmaps,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
12 such as non-textual strings (@dfn{annotations}) displayed in a buffer or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
13 in the margins. It is used in begin-glyphs and end-glyphs attached to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
14 extents, marginal and textual annotations, overlay arrows
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
15 (@code{overlay-arrow-*} variables), toolbar buttons, mouse pointers,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
16 frame icons, truncation and continuation markers, and the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
17 like. (Basically, any place there is an image or something that acts
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
18 like an image, there will be a glyph object representing it.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 The actual image that is displayed (as opposed to its position or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 clipping) is defined by an @dfn{image specifier} object contained
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 within the glyph. The separation between an image specifier object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 and a glyph object is made because the glyph includes other properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 than just the actual image: e.g. the face it is displayed in (for text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 images), the alignment of the image (when it is in a buffer), etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 @defun glyphp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 This function returns @code{t} if @var{object} is a glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 * Glyph Functions:: Functions for working with glyphs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 * Images:: Graphical images displayed in a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 * Glyph Types:: Each glyph has a particular type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 * Mouse Pointer:: Controlling the mouse pointer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 * Redisplay Glyphs:: Glyphs controlling various redisplay functions.
2028
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
37 * Native GUI Widgets:: Complex active images treated as a single glyph.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 * Subwindows:: Inserting an externally-controlled subwindow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 into a buffer.
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
40 * Glyph Examples:: Examples of how to work with glyphs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 @node Glyph Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 @section Glyph Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 * Creating Glyphs:: Creating new glyphs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 * Glyph Properties:: Accessing and modifying a glyph's properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 * Glyph Convenience Functions::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Convenience functions for accessing particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 properties of a glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 * Glyph Dimensions:: Determining the height, width, etc. of a glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 @node Creating Glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 @subsection Creating Glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 @defun make-glyph &optional spec-list type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 This function creates a new glyph object of type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 @var{spec-list} is used to initialize the glyph's image. It is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 typically an image instantiator (a string or a vector; @ref{Image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 Specifiers}), but can also be a list of such instantiators (each one in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 turn is tried until an image is successfully produced), a cons of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 locale (frame, buffer, etc.) and an instantiator, a list of such conses,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 or any other form accepted by @code{canonicalize-spec-list}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 @xref{Specifiers}, for more information about specifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 @var{type} specifies the type of the glyph, which specifies in which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 contexts the glyph can be used, and controls the allowable image types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 into which the glyph's image can be instantiated. @var{type} should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 one of @code{buffer} (used for glyphs in an extent, the modeline, the
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
73 toolbar, or elsewhere in a frame), @code{pointer} (used for the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 mouse-pointer), or @code{icon} (used for a frame's icon), and defaults
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 to @code{buffer}. @xref{Glyph Types}.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
76
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
77 A glyph in XEmacs does @strong{NOT} refer to a single unit of textual
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
78 display (the XEmacs term for this is @dfn{rune}, and runes are confined
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
79 to the internal implementation of redisplay), but rather is an
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
80 object encapsulating a graphical element, such as an image or widget (an
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
81 element such as a button or text entry field; @dfn{widget} is the term for
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
82 this under X Windows, while @dfn{control} is the term under MS Windows).
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
83 This graphical element could appear in a buffer, a margin, a gutter, or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
84 a toolbar, or as a mouse pointer or an icon, for example.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
85
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
86 Creating a glyph using @code{make-glyph} does not specify @emph{where}
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
87 the glyph will be used, but it does specify @emph{what} the glyph will
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
88 look like. @var{spec-list} is used to specify this, and it is the
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
89 initializer for the glyph's @code{image} property, which is an image
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
90 specifier. (Note that @dfn{image} as used in the context of a glyph's
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
91 @code{image} property or in the terms @dfn{image specifier}, @dfn{image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
92 instantiator}, or @dfn{image instance} does not refer to what people
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93 normally think of as an image (which in XEmacs is called a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
94 @dfn{pixmap}), but to any graphical element---a pixmap, a widget, or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
95 even a block of text, when used in the places that call for a glyph.)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
96 The format of the @var{spec-list} is typically an image instantiator (a string
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
97 or a vector; @ref{Image Specifiers}), but can also be a list of such
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
98 instantiators (each one in turn is tried until an image is successfully
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
99 produced), a cons of a locale (frame, buffer, etc.) and an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
100 instantiator, a list of such conses, or any other form accepted by
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
101 @code{canonicalize-spec-list}.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
102
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
103 Some understanding of specifiers is necessary in working with glyphs,
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
104 because they do not behave like ordinary variables, and are accessed and
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
105 mutated with special APIs. @xref{Specifiers}, for more information
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
106 about specifiers. The docstring of
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
107 @code{make-specifier} gives a capsule summary. The most important
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
108 aspect of specifiers is that a specifier lets you set a value for
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
109 each buffer, window, frame, device, or console, or it will compute an
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
110 appropriate default if no specific value is set for a particular
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
111 @emph{locale} or @emph{domain} (display contexts; locales are used by
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
112 the programmer create an abstract link between an object such as a
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
113 buffer position and an image, while domains must be concrete enough to
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
114 enable XEmacs to identify the device type: you can't
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
115 usefully display a JPEG on stdout). Therefore only one global glyph
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
116 needs to exist for a particular purpose (e.g. the icon used to represent
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
117 an iconified frame, the mouse pointer used over particular areas of a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
118 frame, etc.), and in these cases you do not create your own glyph, but
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
119 rather modify the existing one. You can specify that a given glyph
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
120 appear as a monochrome image on monochrome displays, a color image on
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
121 color displays, and as a string on TTYs.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
122
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
123 As well as using @var{spec-list} to initialize the glyph, you can set
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
124 specifications using @code{set-glyph-image}. Due to an
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
125 arguable historical design decision, a glyph itself is not
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
126 actually a specifier, but rather is an object containing an image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
127 specifier (as well as other, seldom-used properties). Therefore, you
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
128 cannot set or access specifications for the glyph's image by directly
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
129 using @code{set-specifier}, @code{specifier-instance} or the like on the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
130 glyph; instead use them on @code{(glyph-image @var{glyph})} or use the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
131 convenience functions @code{set-glyph-image},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
132 @code{glyph-image-instance}, and @code{glyph-image}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
133
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
134 Once you have created a glyph, you specify where it will be used by
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
135 attaching it to an extent as a @emph{begin-glyph} or @emph{end-glyph}.
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
136 There are also a number of special objects whose appearance is specified
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
137 by a glyph. Most of these a global objects that you update with
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
138 @code{set-glyph-image}, such as mouse pointers and the glyph that
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
139 denotes a line truncation. Frame icons, toolbar button icons, and the
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
140 modeline are the main non-text objects which accept glyphs as elements.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
141
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
142 @itemize @bullet
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
143 @item
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
144 To insert a glyph into a buffer, create an extent in the buffer and then
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
145 use @code{set-extent-begin-glyph} or @code{set-extent-end-glyph} to set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
146 a glyph to be displayed at the corresponding edge of the extent. (It is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
147 common to create zero-width extents for this purpose.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
148
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
149 @item
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
150 To insert a glyph into the left or right margin of a buffer, first
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
151 make sure the margin is visible by setting a value for the specifiers
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
152 @code{left-margin-width} or @code{right-margin-width}. (Not strictly necessary
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
153 when using margin glyphs with layout policy @code{whitespace}.) Then follow
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
154 the same procedure above for inserting a glyph in a buffer, and then
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
155 set a non-default layout policy for the glyph using
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
156 @code{set-extent-begin-glyph-layout} or @code{set-extent-end-glyph-layout}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
157 Alternatively, use the high-level annotations API (see
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
158 @code{make-annotation}). (In fact, you can also use the annotations
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
159 API for glyphs in a buffer, by setting a layout policy of @code{text}.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
160
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
161 @item
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
162 A glyph may be displayed in the modeline by inserting the glyph as one
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
163 of the elements of the modeline format. (Unfortunately you can't
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
164 currently put a begin glyph or end glyph on one of the modeline
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
165 extents---they're ignored.)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
166
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
167 @item
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
168 To insert a glyph into a toolbar, specify it as the icon part of a toolbar
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
169 button, which in turn must be part of a toolbar instantiator (typically
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
170 set on the specifier @code{default-toolbar}).
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
171 See @code{default-toolbar} for more information. (As a convenience, you
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
172 may use a symbol in place of the glyph list in the toolbar button
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
173 instantiator; the symbol is evalled to get the glyph list. This
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
174 facilitates both creating the toolbar instantiator and modifying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
175 individual glyphs in a toolbar later on. For example, you can change
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
176 the way that the Mail toolbar button looks by modifying the value of the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
177 variable @code{toolbar-mail-icon} (in general, @code{toolbar-*-icon})
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
178 and then calling @code{(set-specifier-dirty-flag default-toolbar)}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
179 (#### Unfortunately this doesn't quite work the way it should; the
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
180 change will appear in new frames, but not existing ones, because once an
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
181 image has been displayed the pixmap replaces the symbol for those domains.)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
182
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
183 @item
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
184 To insert a glyph into a gutter, use
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
185 @code{set-extent-begin-glyph} or @code{set-extent-end-glyph} to set a
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
186 glyph to be displayed at the corresponding edge of extent in a string,
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
187 similar to the way you insert glyphs in a buffer. Then insert the
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
188 string into the gutter @ref{Specifying a Gutter}.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
189
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
190 @item To use a glyph as the icon for a frame, you do not actually create
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
191 a new glyph; rather, you change the specifications for the existing
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
192 glyph @code{frame-icon-glyph}. (This is a unique, predefined object.
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
193 Remember that, because of the specifier nature of glyphs, you can set
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
194 different values for any particular buffer or frame.)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
195
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
196 @item
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
197 To use a glyph as the mouse pointer, in general you do not create a new
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
198 glyph, but rather you change the specifications of various existing
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
199 glyphs, such as @code{text-pointer-glyph} for the pointer used over
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
200 text, @code{modeline-pointer-glyph} for the pointer used over the
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
201 modeline, etc. Do an apropos over @samp{pointer-glyph} to find all of
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
202 them. (Note also that you can temporarily set the mouse pointer to some
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
203 specific shape by using @code{set-frame-pointer}, which takes an image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
204 instance, as obtained from calling @code{glyph-image-instance} on a glyph
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
205 of type @code{pointer} -- either one of the above-mentioned variables or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
206 one you created yourself. (See below for what it means to create a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
207 glyph of type @code{pointer}.) This pointer will last only until the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
208 next mouse motion event is processed or certain other things happen,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
209 such as creating or deleting a window. (In fact, the above-mentioned
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
210 pointer glyph variables are implemented as part of the default handler
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
211 for mouse motion events. If you want to customize this behavior, take a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
212 look at @code{mode-motion-hook}, or @code{mouse-motion-handler} if you
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
213 really want to get low-level.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
214
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
215 @item
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
216 To use a glyph to control the shape of miscellaneous redisplay effects
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
217 such as the truncation and continuation markers, set the appropriate
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
218 existing glyph variables, as for icons and pointers above. See
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
219 @code{continuation-glyph}, @code{control-arrow-glyph},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
220 @code{hscroll-glyph}, @code{invisible-text-glyph},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
221 @code{octal-escape-glyph}, and @code{truncation-glyph}. See also
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
222 @code{overlay-arrow-string}, an odd redisplay leftover which can be set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
223 to a glyph you created, and will cause the glyph to be displayed on top
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
224 of the text position specified in the marker stored in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
225 @code{overlay-arrow-position}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
226
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
227 @item
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
228 To use a glyph in a display table (i.e. to control the appearance of any
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
229 individual character), create the appropriate character glyphs and then
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
230 set a specification for the specifier @code{current-display-table},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
231 which controls the appearance of characters. You can also set an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
232 overriding display table for use with text displayed in a particular
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
233 face; see @code{set-face-display-table} and @code{make-display-table}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
234 #### Note: Display tables do not currently support general Mule
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
235 characters. They will be overhauled at some point to support this
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
236 and to provide other features required under Mule.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
237
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
238 @item
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
239 Glyphs are not actually used as the background pixmaps of faces, but the
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
240 API is similar. The
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
241 background pixmap of a face is actually an image specifier -- probably
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
242 the only place in XEmacs where an image specifier occurs outside of a
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
243 glyph. If you would like to use a glyph's image as a background pixmap,
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
244 you can extract it with @code{glyph-image}, and then add it to a face.
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
245 @xref{Face Convenience Functions}.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
246 @end itemize
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
247
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
248 It is extremely rare that you will ever have to specify a value for
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
249 @var{type}, which should be one of @code{buffer} (used for glyphs in an
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
250 extent, the modeline, the toolbar, or elsewhere in a buffer),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
251 @code{pointer} (used for the mouse-pointer), or @code{icon} (used for a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
252 frame's icon), and defaults to @code{buffer}. The only cases where it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
253 needs to be specified is when creating icon or pointer glyphs, and in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
254 both cases the necessary glyphs have already been created at startup and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
255 are accessed through the appropriate variables,
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
256 e.g. @code{text-pointer-glyph} (or in general, any @samp{*-pointer-glyph})
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
257 and @code{frame-icon-glyph}. @xref{Glyph Types}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 @defun make-glyph-internal &optional type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 This function creates a new, uninitialized glyph of type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 @defun make-pointer-glyph &optional spec-list
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
265
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
266 Return a new @code{pointer-glyph} object with the specification list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
267 @var{spec-list}. This function is equivalent to calling
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
268 @code{make-glyph} with a @var{type} of @code{pointer}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
269
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
270 It is extremely unlikely that you will ever need to create a pointer
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
271 glyph. Instead, you probably want to be calling @code{set-glyph-image}
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
272 on an existing glyph, e.g. @code{text-pointer-glyph}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 @defun make-icon-glyph &optional spec-list
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
276
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
277 Return a new @code{pointer-glyph} object with the specification list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
278 @var{spec-list}. This function is equivalent to calling
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
279 @code{make-glyph} with a @var{type} of @code{icon}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
280
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
281 It is extremely unlikely that you will ever need to create a pointer
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
282 glyph. Instead, you probably want to be calling @code{set-glyph-image}
2127
4657b5a54253 [xemacs-hg @ 2004-06-14 10:24:44 by stephent]
stephent
parents: 2028
diff changeset
283 on the existing glyph, @code{frame-icon-glyph}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 @node Glyph Properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 @subsection Glyph Properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 Each glyph has a list of properties, which control all of the aspects of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 the glyph's appearance. The following symbols have predefined meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 @item image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 The image used to display the glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 @item baseline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 Percent above baseline that glyph is to be displayed. Only for glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 displayed inside of a buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 @item contrib-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 Whether the glyph contributes to the height of the line it's on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 Only for glyphs displayed inside of a buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 @item face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 Face of this glyph (@emph{not} a specifier).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 @defun set-glyph-property glyph property value &optional locale tag-set how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 This function changes a property of a @var{glyph}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 For built-in properties, the actual value of the property is a specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 and you cannot change this; but you can change the specifications within
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 the specifier, and that is what this function will do. For user-defined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 properties, you can use this function to either change the actual value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 of the property or, if this value is a specifier, change the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 specifications within it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 If @var{property} is a built-in property, the specifications to be added
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 to this property can be supplied in many different ways:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 If @var{value} is a simple instantiator (e.g. a string naming a pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 filename) or a list of instantiators, then the instantiator(s) will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 added as a specification of the property for the given @var{locale}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 (which defaults to @code{global} if omitted).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 If @var{value} is a list of specifications (each of which is a cons of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 locale and a list of instantiators), then @var{locale} must be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 @code{nil} (it does not make sense to explicitly specify a locale in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 this case), and specifications will be added as given.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 If @var{value} is a specifier (as would be returned by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 @code{glyph-property} if no @var{locale} argument is given), then some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 or all of the specifications in the specifier will be added to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 property. In this case, the function is really equivalent to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 @code{copy-specifier} and @var{locale} has the same semantics (if it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 a particular locale, the specification for the locale will be copied; if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 a locale type, specifications for all locales of that type will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 copied; if @code{nil} or @code{all}, then all specifications will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 copied).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 @var{how-to-add} should be either @code{nil} or one of the symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 @code{prepend}, @code{append}, @code{remove-tag-set-prepend},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 @code{remove-tag-set-append}, @code{remove-locale},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 @code{remove-locale-type}, or @code{remove-all}. See
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 @code{copy-specifier} and @code{add-spec-to-specifier} for a description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 of what each of these means. Most of the time, you do not need to worry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 about this argument; the default behavior usually is fine.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 In general, it is OK to pass an instance object (e.g. as returned by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 @code{glyph-property-instance}) as an instantiator in place of an actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 instantiator. In such a case, the instantiator used to create that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 instance object will be used (for example, if you set a font-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 object as the value of the @code{font} property, then the font name used
2028
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
359 to create that object will be used instead). In some cases, however,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 doing this conversion does not make sense, and this will be noted in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 documentation for particular types of instance objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 If @var{property} is not a built-in property, then this function will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 simply set its value if @var{locale} is @code{nil}. However, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 @var{locale} is given, then this function will attempt to add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 @var{value} as the instantiator for the given @var{locale}, using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 @code{add-spec-to-specifier}. If the value of the property is not a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 specifier, it will automatically be converted into a @code{generic}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 @defun glyph-property glyph property &optional locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 This function returns @var{glyph}'s value of the given @var{property}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 If @var{locale} is omitted, the @var{glyph}'s actual value for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 @var{property} will be returned. For built-in properties, this will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 a specifier object of a type appropriate to the property (e.g. a font or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 color specifier). For other properties, this could be anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 If @var{locale} is supplied, then instead of returning the actual value,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 the specification(s) for the given locale or locale type will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 returned. This will only work if the actual value of @var{property} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 a specifier (this will always be the case for built-in properties, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 may or may not apply to user-defined properties). If the actual value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 of @var{property} is not a specifier, this value will simply be returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 regardless of @var{locale}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 The return value will be a list of instantiators (e.g. vectors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 specifying pixmap data), or a list of specifications, each of which is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 cons of a locale and a list of instantiators. Specifically, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 @var{locale} is a particular locale (a buffer, window, frame, device, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 @code{global}), a list of instantiators for that locale will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 returned. Otherwise, if @var{locale} is a locale type (one of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 symbols @code{buffer}, @code{window}, @code{frame}, or @code{device}),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 the specifications for all locales of that type will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 Finally, if @var{locale} is @code{all}, the specifications for all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 locales of all types will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 The specifications in a specifier determine what the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 @var{property} will be in a particular @dfn{domain} or set of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 circumstances, which is typically a particular Emacs window along with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 the buffer it contains and the frame and device it lies within. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 value is derived from the instantiator associated with the most specific
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 locale (in the order buffer, window, frame, device, and @code{global})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 that matches the domain in question. In other words, given a domain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 (i.e. an Emacs window, usually), the specifier for @var{property} will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 first be searched for a specification whose locale is the buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 contained within that window; then for a specification whose locale is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 the window itself; then for a specification whose locale is the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 that the window is contained within; etc. The first instantiator that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 is valid for the domain (usually this means that the instantiator is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 recognized by the device [i.e. the X server or TTY device] that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 domain is on). The function @code{glyph-property-instance} actually does
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 all this, and is used to determine how to display the glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 @defun glyph-property-instance glyph property &optional domain default no-fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 This function returns the instance of @var{glyph}'s @var{property} in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 specified @var{domain}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 Under most circumstances, @var{domain} will be a particular window, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 the returned instance describes how the specified property actually is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 displayed for that window and the particular buffer in it. Note that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 this may not be the same as how the property appears when the buffer is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 displayed in a different window or frame, or how the property appears in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 the same window if you switch to another buffer in that window; and in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 those cases, the returned instance would be different.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 The returned instance is an image-instance object, and you can query it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 using the appropriate image instance functions. For example, you could use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 @code{image-instance-depth} to find out the depth (number of color
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 planes) of a pixmap displayed in a particular window. The results might
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 be different from the results you would get for another window (perhaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 the user specified a different image for the frame that window is on; or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 perhaps the same image was specified but the window is on a different X
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 server, and that X server has different color capabilities from this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 one).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 @var{domain} defaults to the selected window if omitted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 @var{domain} can be a frame or device, instead of a window. The value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 returned for such a domain is used in special circumstances when a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 more specific domain does not apply; for example, a frame value might be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 used for coloring a toolbar, which is conceptually attached to a frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 rather than a particular window. The value is also useful in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 determining what the value would be for a particular window within the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 frame or device, if it is not overridden by a more specific
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 specification.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 If @var{property} does not name a built-in property, its value will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 simply be returned unless it is a specifier object, in which case it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 will be instanced using @code{specifier-instance}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 Optional arguments @var{default} and @var{no-fallback} are the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 in @code{specifier-instance}. @xref{Specifiers}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 @defun remove-glyph-property glyph property &optional locale tag-set exact-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 This function removes a property from a glyph. For built-in properties,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 this is analogous to @code{remove-specifier}. @xref{Specifiers,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 remove-specifier-p}, for the meaning of the @var{locale}, @var{tag-set},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 and @var{exact-p} arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @node Glyph Convenience Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 @subsection Glyph Convenience Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 The following functions are provided for working with specific
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 properties of a glyph. Note that these are exactly like calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 the general functions described above and passing in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 appropriate value for @var{property}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 Remember that if you want to determine the ``value'' of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 specific glyph property, you probably want to use the @code{*-instance}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 functions. For example, to determine whether a glyph contributes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 to its line height, use @code{glyph-contrib-p-instance}, not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 @code{glyph-contrib-p}. (The latter will return a boolean specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 or a list of specifications, and you probably aren't concerned with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 these.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 @defun glyph-image glyph &optional locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 This function is equivalent to calling @code{glyph-property} with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 a property of @code{image}. The return value will be an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 specifier if @var{locale} is @code{nil} or omitted; otherwise,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 it will be a specification or list of specifications.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 @defun set-glyph-image glyph spec &optional locale tag-set how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 This function is equivalent to calling @code{set-glyph-property} with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 a property of @code{image}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 @defun glyph-image-instance glyph &optional domain default no-fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 This function returns the instance of @var{glyph}'s image in the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 @var{domain}, and is equivalent to calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 @code{glyph-property-instance} with a property of @code{image}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 return value will be an image instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 Normally @var{domain} will be a window or @code{nil} (meaning the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 selected window), and an instance object describing how the image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 appears in that particular window and buffer will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 @defun glyph-contrib-p glyph &optional locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 This function is equivalent to calling @code{glyph-property} with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 a property of @code{contrib-p}. The return value will be a boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 specifier if @var{locale} is @code{nil} or omitted; otherwise,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 it will be a specification or list of specifications.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 @defun set-glyph-contrib-p glyph spec &optional locale tag-set how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 This function is equivalent to calling @code{set-glyph-property} with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 a property of @code{contrib-p}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @defun glyph-contrib-p-instance glyph &optional domain default no-fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 This function returns whether the glyph contributes to its line height
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 in the given @var{domain}, and is equivalent to calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 @code{glyph-property-instance} with a property of @code{contrib-p}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 return value will be either @code{nil} or @code{t}. (Normally @var{domain}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 will be a window or @code{nil}, meaning the selected window.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 @defun glyph-baseline glyph &optional locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 This function is equivalent to calling @code{glyph-property} with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 property of @code{baseline}. The return value will be a specifier if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 @var{locale} is @code{nil} or omitted; otherwise, it will be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 specification or list of specifications.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 @defun set-glyph-baseline glyph spec &optional locale tag-set how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 This function is equivalent to calling @code{set-glyph-property} with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 a property of @code{baseline}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 @defun glyph-baseline-instance glyph &optional domain default no-fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 This function returns the instance of @var{glyph}'s baseline value in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 the given @var{domain}, and is equivalent to calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 @code{glyph-property-instance} with a property of @code{baseline}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 return value will be an integer or @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 Normally @var{domain} will be a window or @code{nil} (meaning the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 selected window), and an instance object describing the baseline value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 appears in that particular window and buffer will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 @defun glyph-face glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 This function returns the face of @var{glyph}. (Remember, this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 not a specifier, but a simple property.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 @defun set-glyph-face glyph face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 This function changes the face of @var{glyph} to @var{face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 @node Glyph Dimensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 @subsection Glyph Dimensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @defun glyph-width glyph &optional window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 This function returns the width of @var{glyph} on @var{window}. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 may not be exact as it does not take into account all of the context
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 that redisplay will.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 @defun glyph-ascent glyph &optional window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 This function returns the ascent value of @var{glyph} on @var{window}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 This may not be exact as it does not take into account all of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 context that redisplay will.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 @defun glyph-descent glyph &optional window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 This function returns the descent value of @var{glyph} on @var{window}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 This may not be exact as it does not take into account all of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 context that redisplay will.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 @defun glyph-height glyph &optional window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 This function returns the height of @var{glyph} on @var{window}. (This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 is equivalent to the sum of the ascent and descent values.) This may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 not be exact as it does not take into account all of the context that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 redisplay will.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 @node Images
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 @section Images
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 * Image Specifiers:: Specifying how an image will appear.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 * Image Instantiator Conversion::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 Conversion is applied to image instantiators
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 at the time they are added to an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 image specifier or at the time they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 are passed to @code{make-image-instance}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 * Image Instances:: What an image specifier gets instanced as.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 @node Image Specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 @subsection Image Specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 @cindex image specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 An image specifier is used to describe the actual image of a glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 It works like other specifiers (@pxref{Specifiers}), in that it contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 a number of specifications describing how the image should appear in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 variety of circumstances. These specifications are called @dfn{image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 instantiators}. When XEmacs wants to display the image, it instantiates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 the image into an @dfn{image instance}. Image instances are their own
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 primitive object type (similar to font instances and color instances),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 describing how the image appears in a particular domain. (On the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 hand, image instantiators, which are just descriptions of how the image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 should appear, are represented using strings or vectors.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 @defun image-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 This function returns non-@code{nil} if @var{object} is an image specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 Usually, an image specifier results from calling @code{glyph-image} on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 a glyph.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 @defun make-image-specifier spec-list
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
619 This function creates a new image specifier object and initializes it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
620 according to @var{spec-list}. @xref{Specifiers}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
621
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
622 Note that, in practice, you rarely, if ever, need to actually create an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
623 image specifier! (This function exists mainly for completeness.) Pretty
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
624 much the only use for image specifiers is to control how glyphs are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
625 displayed, and the image specifier associated with a glyph (the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
626 @code{image} property of a glyph) is created automatically when a glyph
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
627 is created and need not (and cannot, for that matter) ever be changed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
628 (@pxref{Glyphs}). In fact, the design decision to create a separate
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
629 image specifier type, rather than make glyphs themselves be specifiers,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
630 is debatable---the other properties of glyphs are rarely used and could
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
631 conceivably have been incorporated into the glyph's instantiator. The
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
632 rarely used glyph types (buffer, pointer, icon) could also have been
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
633 incorporated into the instantiator.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 Image instantiators come in many formats: @code{xbm}, @code{xpm},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 @code{gif}, @code{jpeg}, etc. This describes the format of the data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 describing the image. The resulting image instances also come in many
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
639 types---@code{mono-pixmap}, @code{color-pixmap}, @code{text},
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 @code{pointer}, etc. This refers to the behavior of the image and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 sorts of places it can appear. (For example, a color-pixmap image has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 fixed colors specified for it, while a mono-pixmap image comes in two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 unspecified shades ``foreground'' and ``background'' that are determined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 from the face of the glyph or surrounding text; a text image appears as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 a string of text and has an unspecified foreground, background, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 font; a pointer image behaves like a mono-pixmap image but can only be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 used as a mouse pointer [mono-pixmap images cannot be used as mouse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 pointers]; etc.) It is important to keep the distinction between image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 instantiator format and image instance type in mind. Typically, a given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 image instantiator format can result in many different image instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 types (for example, @code{xpm} can be instanced as @code{color-pixmap},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @code{mono-pixmap}, or @code{pointer}; whereas @code{cursor-font} can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 instanced only as @code{pointer}), and a particular image instance type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 can be generated by many different image instantiator formats (e.g.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 @code{color-pixmap} can be generated by @code{xpm}, @code{gif},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 @code{jpeg}, etc.).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 @xref{Image Instances}, for a more detailed discussion of image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 instance types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 An image instantiator should be a string or a vector of the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 @code{[@var{format} @var{:keyword} @var{value} ...]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 i.e. a format symbol followed by zero or more alternating keyword-value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 pairs. The @dfn{format} field should be a symbol, one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 @item nothing
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
672 Don't display anything; no keywords are valid for this. Can only be
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
673 instanced as @code{nothing}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 @item string
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
675 Display this image as a text string. Can only be instanced
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 as @code{text}, although support for instancing as @code{mono-pixmap}
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
677 should be added.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 @item formatted-string
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
679 Display this image as a text string with replaceable fields,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
680 similar to a modeline format string; not currently implemented.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 @item xbm
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
682 An X bitmap; only if X support was compiled into this XEmacs. Can be
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 instanced as @code{mono-pixmap}, @code{color-pixmap}, or
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
684 @code{pointer}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 @item xpm
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
686 An XPM pixmap; only if XPM support was compiled into this XEmacs. Can
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 be instanced as @code{color-pixmap}, @code{mono-pixmap}, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 @code{pointer}. XPM is an add-on library for X that was designed to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 rectify the shortcomings of the XBM format. Most implementations of X
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 include the XPM library as a standard part. If your vendor does not, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 is highly recommended that you download it and install it. You can get
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
692 it from the standard XEmacs FTP site, among other places.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 @item xface
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
694 An X-Face bitmap, used to encode people's faces in e-mail messages;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 only if X-Face support was compiled into this XEmacs. Can be instanced
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
696 as @code{mono-pixmap}, @code{color-pixmap}, or @code{pointer}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 @item gif
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
698 A GIF87 or GIF89 image; only if GIF support was compiled into this
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 XEmacs. Can be instanced as @code{color-pixmap}. Note that XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 includes GIF decoding functions as a standard part of it, so if you have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 X support, you will normally have GIF support, unless you explicitly
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
702 disable it at configure time.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 @item jpeg
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
704 A JPEG-format image; only if JPEG support was compiled into this
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 XEmacs. Can be instanced as @code{color-pixmap}. If you have the JPEG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 libraries present on your system when XEmacs is built, XEmacs will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 automatically detect this and use them, unless you explicitly disable it
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
708 at configure time.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 @item png
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
710 A PNG/GIF24 image; only if PNG support was compiled into this XEmacs.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
711 Can be instanced as @code{color-pixmap}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 @item tiff
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
713 A TIFF-format image; only if TIFF support was compiled into this XEmacs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 @item cursor-font
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
715 One of the standard cursor-font names, such as @samp{watch} or
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 @samp{right_ptr} under X. Under X, this is, more specifically, any of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 the standard cursor names from appendix B of the Xlib manual [also known
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 as the file @file{<X11/cursorfont.h>}] minus the @samp{XC_} prefix. On
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 other window systems, the valid names will be specific to the type of
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
720 window system. Can only be instanced as @code{pointer}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 @item font
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
722 A glyph from a font; i.e. the name of a font, and glyph index into it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 of the form @samp{@var{font} fontname index [[mask-font] mask-index]}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 Only if X support was compiled into this XEmacs. Currently can only be
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
725 instanced as @code{pointer}, although this should probably be fixed.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
726 @item mswindows-resource
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
727 An MS Windows pointer resource. Specifies a resource to retrieve
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
728 directly from the system (an OEM resource) or from a file, particularly
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
729 an executable file. If the resource is to be retrieved from a file, use
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
730 :file and optionally :resource-id. Otherwise use :resource-id. Always
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
731 specify :resource-type to specify the type (cursor, bitmap or icon) of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
732 the resource. Possible values for :resource-id are listed below. Can
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
733 be instanced as @code{pointer} or @code{color-pixmap}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 @item subwindow
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
735 An embedded windowing system window. Can only be instanced as
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
736 @code{subwindow}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
737 @item button
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
738 A button widget; either a push button, radio button or toggle button.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
739 Can only be instanced as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
740 @item combo-box
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
741 A drop list of selectable items in a widget, for editing text.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
742 Can only be instanced as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
743 @item edit-field
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
744 A text editing widget. Can only be instanced as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
745 @item label
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
746 A static, text-only, widget; for displaying text. Can only be instanced
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
747 as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
748 @item layout
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
749 A widget for controlling the positioning of children underneath it.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
750 Through the use of nested layouts, a widget hierarchy can be created
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
751 which can have the appearance of any standard dialog box or similar
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
752 arrangement; all of this is counted as one @dfn{glyph} and could appear
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
753 in many of the places that expect a single glyph. Can only be instanced
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
754 as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
755 @item native-layout
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
756 @c #### Document me better!
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
757 The native version of a layout widget.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
758 Can only be instanced as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
759 @item progress-gauge
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
760 A sliding widget, for showing progress. Can only be instanced as
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
761 @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
762 @item tab-control
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
763 A tab widget; a series of user selectable tabs. Can only be instanced
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
764 as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
765 @item tree-view
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
766 A folding widget. Can only be instanced as @code{widget}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
767 @item scrollbar
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
768 A scrollbar widget. Can only be instanced as @code{widget}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 @item autodetect
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
770 XEmacs tries to guess what format the data is in. If X support exists,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 the data string will be checked to see if it names a filename. If so,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 and this filename contains XBM or XPM data, the appropriate sort of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 pixmap or pointer will be created. [This includes picking up any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 specified hotspot or associated mask file.] Otherwise, if @code{pointer}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 is one of the allowable image-instance types and the string names a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 valid cursor-font name, the image will be created as a pointer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 Otherwise, the image will be displayed as text. If no X support exists,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
778 the image will always be displayed as text.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
779 @item inherit
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
780 Inherit from the background-pixmap property of a face. Can only be
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
781 instanced as @code{mono-pixmap}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 The valid keywords are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 @item :data
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
788 Inline data. For most formats above, this should be a string. For
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 XBM images, this should be a list of three elements: width, height, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 a string of bit data. This keyword is not valid for instantiator
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
791 format @code{nothing}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 @item :file
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
794 Data is contained in a file. The value is the name of this file. If
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 both @code{:data} and @code{:file} are specified, the image is created
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 from what is specified in @code{:data} and the string in @code{:file}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 becomes the value of the @code{image-instance-file-name} function when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 applied to the resulting image-instance. This keyword is not valid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 instantiator formats @code{nothing}, @code{string},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 @code{formatted-string}, @code{cursor-font}, @code{font}, and
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
801 @code{autodetect}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 @item :foreground
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 @itemx :background
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
805 For @code{xbm}, @code{xface}, @code{cursor-font}, and @code{font}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 These keywords allow you to explicitly specify foreground and background
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 colors. The argument should be anything acceptable to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @code{make-color-instance}. This will cause what would be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 @code{mono-pixmap} to instead be colorized as a two-color color-pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 and specifies the foreground and/or background colors for a pointer
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
811 instead of black and white.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 @item :mask-data
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
814 For @code{xbm} and @code{xface}. This specifies a mask to be used with the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 bitmap. The format is a list of width, height, and bits, like for
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
816 @code{:data}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 @item :mask-file
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
819 For @code{xbm} and @code{xface}. This specifies a file containing the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 mask data. If neither a mask file nor inline mask data is given for an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 XBM image, and the XBM image comes from a file, XEmacs will look for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 mask file with the same name as the image file but with @samp{Mask} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 @samp{msk} appended. For example, if you specify the XBM file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 @file{left_ptr} [usually located in @file{/usr/include/X11/bitmaps}],
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 the associated mask file @file{left_ptrmsk} will automatically be picked
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
826 up.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 @item :hotspot-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 @itemx :hotspot-y
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
830 For @code{xbm} and @code{xface}. These keywords specify a hotspot if
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 the image is instantiated as a @code{pointer}. Note that if the XBM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 image file specifies a hotspot, it will automatically be picked up if no
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
833 explicit hotspot is given.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 @item :color-symbols
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
836 Only for @code{xpm}. This specifies an alist that maps strings that
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 specify symbolic color names to the actual color to be used for that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 symbolic color (in the form of a string or a color-specifier object).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 If this is not specified, the contents of @code{xpm-color-symbols} are
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
840 used to generate the alist.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
841 @item :resource-id
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
842 Only for @code{mswindows-resource}. This must be either an integer
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
843 (which directly specifies a resource number) or a string. Valid strings
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
844 are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
845
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
846 For bitmaps:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
847
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
848 "close", "uparrow", "dnarrow", "rgarrow", "lfarrow",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
849 "reduce", "zoom", "restore", "reduced", "zoomd",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
850 "restored", "uparrowd", "dnarrowd", "rgarrowd", "lfarrowd",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
851 "mnarrow", "combo", "uparrowi", "dnarrowi", "rgarrowi",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
852 "lfarrowi", "size", "btsize", "check", "checkboxes", and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
853 "btncorners".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
854
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
855 For cursors:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
856
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
857 "normal", "ibeam", "wait", "cross", "up", "sizenwse",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
858 "sizenesw", "sizewe", "sizens", "sizeall", and "no".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
859
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
860 For icons:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
861
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
862 "sample", "hand", "ques", "bang", "note", and "winlogo".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
863 @item :resource-type
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
864 Only for @code{mswindows-resource}. This must be a symbol, either
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
865 @code{cursor}, @code{icon}, or @code{bitmap}, specifying the type of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
866 resource to be retrieved.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
867 @item :face
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
868 Only for @code{inherit}. This specifies the face to inherit from. For
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
869 widgets this also specifies the face to use for display. It defaults to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
870 gui-element-face.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
873 Keywords accepted as menu item specs are also accepted by widgets.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
874 These are @code{:selected}, @code{:active}, @code{:suffix},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
875 @code{:keys}, @code{:style}, @code{:filter}, @code{:config},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
876 @code{:included}, @code{:key-sequence}, @code{:accelerator},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
877 @code{:label} and @code{:callback}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
878
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 If instead of a vector, the instantiator is a string, it will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 converted into a vector by looking it up according to the specs in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 @code{console-type-image-conversion-list} for the console type of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 the domain (usually a window; sometimes a frame or device) over which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 the image is being instantiated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 If the instantiator specifies data from a file, the data will be read in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 at the time that the instantiator is added to the image specifier (which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 may be well before the image is actually displayed), and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 instantiator will be converted into one of the inline-data forms, with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 the filename retained using a @code{:file} keyword. This implies that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 the file must exist when the instantiator is added to the image, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 does not need to exist at any other time (e.g. it may safely be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 temporary file).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
894 @defun valid-image-instantiator-format-p format &optional locale
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 This function returns non-@code{nil} if @var{format} is a valid image
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
896 instantiator format.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
897
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
898 If @var{locale} is non-@code{nil} then the format is checked in that locale.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
899 If @var{locale} is @code{nil} the current console is used.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
900
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
901 Note that the return value for many formats listed above depends on
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
902 whether XEmacs was compiled with support for that format.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 @defun image-instantiator-format-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 This function return a list of valid image-instantiator formats.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 @defvar xpm-color-symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 This variable holds definitions of logical color-names used when reading
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 XPM files. Elements of this list should be of the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 @code{(@var{color-name} @var{form-to-evaluate})}. The @var{color-name}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 should be a string, which is the name of the color to define; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 @var{form-to-evaluate} should evaluate to a color specifier object, or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 string to be passed to @code{make-color-instance} (@pxref{Colors}). If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 a loaded XPM file references a symbolic color called @var{color-name},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 it will display as the computed color instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 The default value of this variable defines the logical color names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 @samp{"foreground"} and @samp{"background"} to be the colors of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 @code{default} face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 @defvar x-bitmap-file-path
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
925 A list of the directories in which X bitmap files may be found. If @code{nil},
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 this is initialized from the @samp{"*bitmapFilePath"} resource. This is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 used by the @code{make-image-instance} function (however, note that if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 the environment variable @samp{XBMLANGPATH} is set, it is consulted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 first).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 @node Image Instantiator Conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 @subsection Image Instantiator Conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 @cindex image instantiator conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 @cindex conversion of image instantiators
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 @defun set-console-type-image-conversion-list console-type list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 This function sets the image-conversion-list for consoles of the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 @var{console-type}. The image-conversion-list specifies how image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 instantiators that are strings should be interpreted. Each element of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 the list should be a list of two elements (a regular expression string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 and a vector) or a list of three elements (the preceding two plus an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 integer index into the vector). The string is converted to the vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 associated with the first matching regular expression. If a vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 index is specified, the string itself is substituted into that position
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 in the vector.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 Note: The conversion above is applied when the image instantiator is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 added to an image specifier, not when the specifier is actually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 instantiated. Therefore, changing the image-conversion-list only affects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 newly-added instantiators. Existing instantiators in glyphs and image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 specifiers will not be affected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 @defun console-type-image-conversion-list console-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 This function returns the image-conversion-list for consoles of the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 @var{console-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 @node Image Instances
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 @subsection Image Instances
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 @cindex image instances
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 Image-instance objects encapsulate the way a particular image (pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 etc.) is displayed on a particular device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 In most circumstances, you do not need to directly create image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 instances; use a glyph instead. However, it may occasionally be useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 to explicitly create image instances, if you want more control over the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 instantiation process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 @defun image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 This function returns non-@code{nil} if @var{object} is an image instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 * Image Instance Types:: Each image instances has a particular type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 * Image Instance Functions:: Functions for working with image instances.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 @node Image Instance Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 @subsubsection Image Instance Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 @cindex image instance types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 Image instances come in a number of different types. The type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 of an image instance specifies the nature of the image: Whether
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 it is a text string, a mono pixmap, a color pixmap, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 The valid image instance types are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 @item nothing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 Nothing is displayed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 @item text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 Displayed as text. The foreground and background colors and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 font of the text are specified independent of the pixmap. Typically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 these attributes will come from the face of the surrounding text,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 unless a face is specified for the glyph in which the image appears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 @item mono-pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 Displayed as a mono pixmap (a pixmap with only two colors where the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 foreground and background can be specified independent of the pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 typically the pixmap assumes the foreground and background colors of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 the text around it, unless a face is specified for the glyph in which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 the image appears).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 @item color-pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 Displayed as a color pixmap.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 @item pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 Used as the mouse pointer for a window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 @item subwindow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 A child window that is treated as an image. This allows (e.g.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 another program to be responsible for drawing into the window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 Not currently implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 @defun valid-image-instance-type-p type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 This function returns non-@code{nil} if @var{type} is a valid image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 instance type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @defun image-instance-type-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 This function returns a list of the valid image instance types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 @defun image-instance-type image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 This function returns the type of the given image instance. The return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 value will be one of @code{nothing}, @code{text}, @code{mono-pixmap},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 @code{color-pixmap}, @code{pointer}, or @code{subwindow}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 @defun text-image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 instance of type @code{text}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 @defun mono-pixmap-image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 instance of type @code{mono-pixmap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @defun color-pixmap-image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 instance of type @code{color-pixmap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 @defun pointer-image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 instance of type @code{pointer}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 @defun subwindow-image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 instance of type @code{subwindow}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 @defun nothing-image-instance-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 instance of type @code{nothing}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1065 @defun widget-image-instance-p object
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1066 Return @code{t} if @var{object} is an image instance of type @code{widget}.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1067 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1068
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 @node Image Instance Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 @subsubsection Image Instance Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1072 @defun make-image-instance data &optional domain dest-types noerror
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 This function creates a new image-instance object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 @var{data} is an image instantiator, which describes the image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 (@pxref{Image Specifiers}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 @var{dest-types} should be a list of allowed image instance types that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 can be generated. The @var{dest-types} list is unordered. If multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 destination types are possible for a given instantiator, the ``most
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 natural'' type for the instantiator's format is chosen. (For XBM, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 most natural types are @code{mono-pixmap}, followed by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 @code{color-pixmap}, followed by @code{pointer}. For the other normal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 image formats, the most natural types are @code{color-pixmap}, followed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 by @code{mono-pixmap}, followed by @code{pointer}. For the string and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 formatted-string formats, the most natural types are @code{text},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 followed by @code{mono-pixmap} (not currently implemented), followed by
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1088 @code{color-pixmap} (not currently implemented). For MS Windows
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1089 resources, the most natural type for pointer resources is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1090 @code{pointer}, and for the others it's @code{color-pixmap}. The other
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1091 formats can only be instantiated as one type. (If you want to control
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1092 more specifically the order of the types into which an image is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1093 instantiated, just call @code{make-image-instance} repeatedly until it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1094 succeeds, passing less and less preferred destination types each time.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 If @var{dest-types} is omitted, all possible types are allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1098 @var{domain} specifies the domain to which the image instance will be
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1099 attached. This domain is termed the @dfn{governing domain}. The type
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1100 of the governing domain depends on the image instantiator
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1101 format. (Although, more correctly, it should probably depend on the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1102 image instance type.) For example, pixmap image instances are specific
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1103 to a device, but widget image instances are specific to a particular
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1104 XEmacs window because in order to display such a widget when two windows
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1105 onto the same buffer want to display the widget, two separate underlying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1106 widgets must be created. (That's because a widget is actually a child
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1107 window-system window, and all window-system windows have a unique
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1108 existence on the screen.) This means that the governing domain for a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1109 pixmap image instance will be some device (most likely, the only
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1110 existing device), whereas the governing domain for a widget image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1111 instance will be some XEmacs window.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1112
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1113 If you specify an overly general @var{domain} (e.g. a frame when a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1114 window was wanted), an error is signaled. If you specify an overly
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1115 specific @var{domain} (e.g. a window when a device was wanted), the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1116 corresponding general domain is fetched and used instead. For
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1117 @code{make-image-instance}, it makes no difference whether you specify
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1118 an overly specific domain or the properly general domain derived from
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1119 it. However, it does matter when creating an image instance by
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1120 instantiating a specifier or glyph (e.g. with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1121 @code{glyph-image-instance}), because the more specific domain causes
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1122 spec lookup to start there and proceed to more general domains. (It
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1123 would also matter when creating an image instance with an instantiator
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1124 format of @code{inherit}, but we currently disallow this. #### We should
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1125 fix this.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1126 n
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1127 If omitted, @var{domain} defaults to the selected window.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1128
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1129 @var{noerror} controls what happens when the image cannot be generated.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1130 If @code{nil}, an error message is generated. If @code{t}, no messages
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1131 are generated and this function returns @code{nil}. If anything else, a
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1132 warning message is generated and this function returns @code{nil}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 @defun colorize-image-instance image-instance foreground background
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 This function makes the image instance be displayed in the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 colors. Image instances come in two varieties: bitmaps, which are 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 bit deep which are rendered in the prevailing foreground and background
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 colors; and pixmaps, which are of arbitrary depth (including 1) and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 which have the colors explicitly specified. This function converts a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 bitmap to a pixmap. If the image instance was a pixmap already,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 nothing is done (and @code{nil} is returned). Otherwise @code{t} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 @defun image-instance-name image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 This function returns the name of the given image instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1150 @defun image-instance-domain image-instance
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1151
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1152 Return the governing domain of the given @var{image-instance}. The
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1153 governing domain of an image instance is the domain that the image
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1154 instance is specific to. It is @emph{NOT} necessarily the domain that
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1155 was given to the call to @code{specifier-instance} that resulted in the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1156 creation of this image instance. See @code{make-image-instance} for
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1157 more information on governing domains.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1158 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1159
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1160
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 @defun image-instance-string image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 This function returns the string of the given image instance. This will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 only be non-@code{nil} for text image instances.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 @defun image-instance-file-name image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 This function returns the file name from which @var{image-instance} was
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 read, if known.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 @defun image-instance-mask-file-name image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 This function returns the file name from which @var{image-instance}'s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 mask was read, if known.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 @defun image-instance-depth image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 This function returns the depth of the image instance. This is 0 for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 mono pixmap, or a positive integer for a color pixmap.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 @defun image-instance-height image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 This function returns the height of the image instance, in pixels.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 @defun image-instance-width image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 This function returns the width of the image instance, in pixels.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 @defun image-instance-hotspot-x image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 This function returns the X coordinate of the image instance's hotspot,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 if known. This is a point relative to the origin of the pixmap. When
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 an image is used as a mouse pointer, the hotspot is the point on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 image that sits over the location that the pointer points to. This is,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 for example, the tip of the arrow or the center of the crosshairs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 This will always be @code{nil} for a non-pointer image instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 @defun image-instance-hotspot-y image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 This function returns the Y coordinate of the image instance's hotspot,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 if known.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 @defun image-instance-foreground image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 This function returns the foreground color of @var{image-instance}, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 applicable. This will be a color instance or @code{nil}. (It will only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 be non-@code{nil} for colorized mono pixmaps and for pointers.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 @defun image-instance-background image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 This function returns the background color of @var{image-instance}, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 applicable. This will be a color instance or @code{nil}. (It will only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 be non-@code{nil} for colorized mono pixmaps and for pointers.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 @node Glyph Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 @section Glyph Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 Each glyph has a particular type, which controls how the glyph's image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 is generated. Each glyph type has a corresponding list of allowable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 image instance types that can be generated. When you call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 @code{glyph-image-instance} to retrieve the image instance of a glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 XEmacs does the equivalent of calling @code{make-image-instance} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 passing in @var{dest-types} the list of allowable image instance types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 for the glyph's type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 @code{buffer} glyphs can be used as the begin-glyph or end-glyph of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 extent, in the modeline, and in the toolbar. Their image can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 instantiated as @code{nothing}, @code{mono-pixmap}, @code{color-pixmap},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 @code{text}, and @code{subwindow}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 @code{pointer} glyphs can be used to specify the mouse pointer. Their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 image can be instantiated as @code{pointer}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 @code{icon} glyphs can be used to specify the icon used when a frame is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 iconified. Their image can be instantiated as @code{mono-pixmap} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 @code{color-pixmap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 @defun glyph-type glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 This function returns the type of the given glyph. The return value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 will be a symbol, one of @code{buffer}, @code{pointer}, or @code{icon}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 @defun valid-glyph-type-p glyph-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 Given a @var{glyph-type}, this function returns non-@code{nil} if it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 valid.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 @defun glyph-type-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 This function returns a list of valid glyph types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 @defun buffer-glyph-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 This function returns non-@code{nil} if @var{object} is a glyph of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 @code{buffer}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 @defun icon-glyph-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 This function returns non-@code{nil} if @var{object} is a glyph of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 @code{icon}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 @defun pointer-glyph-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 This function returns non-@code{nil} if @var{object} is a glyph of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 @code{pointer}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 @node Mouse Pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 @section Mouse Pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 @cindex mouse cursor
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 @cindex cursor (mouse)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 @cindex pointer (mouse)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 @cindex mouse pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 The shape of the mouse pointer when over a particular section of a frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 is controlled using various glyph variables. Since the image of a glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 is a specifier, it can be controlled on a per-buffer, per-frame, per-window,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 or per-device basis.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 You should use @code{set-glyph-image} to set the following variables,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 @emph{not} @code{setq}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 @defvr Glyph text-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 This variable specifies the shape of the mouse pointer when over text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 @defvr Glyph nontext-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 This variable specifies the shape of the mouse pointer when over a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 buffer, but not over text. If unspecified in a particular domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 @code{text-pointer-glyph} is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 @defvr Glyph modeline-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 This variable specifies the shape of the mouse pointer when over the modeline.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 If unspecified in a particular domain, @code{nontext-pointer-glyph} is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 @defvr Glyph selection-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304 This variable specifies the shape of the mouse pointer when over a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 selectable text region. If unspecified in a particular domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 @code{text-pointer-glyph} is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 @defvr Glyph gc-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 This variable specifies the shape of the mouse pointer when a garbage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 collection is in progress. If the selected window is on a window system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 and this glyph specifies a value (i.e. a pointer image instance) in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 domain of the selected window, the pointer will be changed as specified
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 during garbage collection. Otherwise, a message will be printed in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 echo area, as controlled by @code{gc-message}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 @defvr Glyph busy-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 This variable specifies the shape of the mouse pointer when XEmacs is busy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 If unspecified in a particular domain, the pointer is not changed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 when XEmacs is busy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324 @defvr Glyph menubar-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325 This variable specifies the shape of the mouse pointer when over the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 menubar. If unspecified in a particular domain, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 window-system-provided default pointer is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 @defvr Glyph scrollbar-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 This variable specifies the shape of the mouse pointer when over a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 scrollbar. If unspecified in a particular domain, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 window-system-provided default pointer is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 @defvr Glyph toolbar-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 This variable specifies the shape of the mouse pointer when over a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 toolbar. If unspecified in a particular domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 @code{nontext-pointer-glyph} is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 Internally, these variables are implemented in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 @code{default-mouse-motion-handler}, and thus only take effect when the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 mouse moves. That function calls @code{set-frame-pointer}, which sets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345 the current mouse pointer for a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 @defun set-frame-pointer frame image-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 This function sets the mouse pointer of @var{frame} to the given pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 image instance. You should not call this function directly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 (If you do, the pointer will change again the next time the mouse moves.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 @node Redisplay Glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 @section Redisplay Glyphs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 @defvr Glyph truncation-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 This variable specifies what is displayed at the end of truncated lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 @defvr Glyph continuation-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 This variable specifies what is displayed at the end of wrapped lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 @defvr Glyph octal-escape-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 This variable specifies what to prefix character codes displayed in octal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 with.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 @defvr Glyph hscroll-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 This variable specifies what to display at the beginning of horizontally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 scrolled lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 @defvr Glyph invisible-text-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 This variable specifies what to use to indicate the presence of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 invisible text. This is the glyph that is displayed when an ellipsis is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 called for, according to @code{selective-display-ellipses} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 @code{buffer-invisibility-spec}). Normally this is three dots (``...'').
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 @defvr Glyph control-arrow-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 This variable specifies what to use as an arrow for control characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384
2028
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1385 @node Native GUI Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1386 @section Native GUI Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1387 @cindex native widget
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1388
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1389 A ``native widget'' is a primitive GUI object defined either by the host
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1390 GUI platform or an external toolkit, and accessed from Lisp as a
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1391 ``glyph.''
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1392
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1393 @menu
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1394 * Introduction to Widgets:: Native widgets provide tight integration of
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1395 GUI features with the platform GUI.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1396 * Lisp API to Native Widgets:: Native widgets are glyphs.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1397 * Layouts:: Specifying composite widgets from Lisp.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1398 * Primitive Widgets:: Catalogue of available native widgets.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1399 @end menu
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1400
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1401 @node Introduction to Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1402 @subsection Introduction to Native Widgets and Subwindow Glyphs
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1403
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1404 Traditionally Emacsen have hidden the GUI apparatus from the Lisp
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1405 programmer, but in XEmacs 21.4 the ability to embed autonomous GUI
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1406 objects, called @dfn{native widgets}, in text was added to Lisp. They
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1407 are handled as @emph{glyphs}. Unlike traditional XEmacs
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1408 glyphs such images and strings, native widgets are opaque to XEmacs, and
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1409 must be able to redraw themselves because they are implemented as
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1410 subwindows, not as graphics drawn by XEmacs into the text window.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1411
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1412 Primitive widgets are coded in C using the underlying GUI toolkit, and
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1413 thus are beyond the scope of the @emph{XEmacs Lisp Reference Manual}.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1414 However, composite widgets can be created in Lisp using ``layouts,''
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1415 which are horizontal or vertical arrays of subwidgets. For example, the
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1416 search dialog is formatted using layouts.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1417
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1418 @node Lisp API to Native Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1419 @subsection Lisp API to Native Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1420
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1421 Native widgets are manipulated as @emph{glyphs} (@pxref{Glyphs}). Thus
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1422 they are created using @code{make-glyph}, with a format of one of the
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1423 widget types and a @code{:data} property specific to the widget being
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1424 instanced.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1425
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1426 However, there is a technical difference between widgets and other kinds
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1427 of glyphs that is theoretically important, which is that because widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1428 are active (that is, they can respond to user input events themselves),
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1429 it is possible for the user to become aware that two appearances of the
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1430 ``same'' glyph are actually separate instances. For example, if a user
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1431 changes an image glyph from red to blue, and the buffer containing the
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1432 glyph appears in more than one window, the user will perceive all the
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1433 appearances to change from red to blue simultaneously. However, suppose
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1434 the glyph is a button glyph (@emph{e.g.}, as used in the Customize
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1435 buffer for the Set, Save, and Done buttons). Then if the Customize
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1436 buffer appears in several windows at the same time, and the user clicks
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1437 on the button, she will only perceive the button to be depressed in the
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1438 window where she clicked the button.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1439
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1440 It seems from this example that it is unlikely to be a problem in
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1441 practice. When the user is faced with an active widget, it seems likely
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1442 that attention will focus on the widget being manipulated, and having
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1443 other instances of the widget respond simultaneously might be more
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1444 disconcerting than the actual case.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1445
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1446 @node Layouts
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1447 @subsection Layouts
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1448
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1449 An XEmacs @dfn{layout} is a one-dimensional array of glyphs. It is a
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1450 widget for controlling the positioning of children underneath it.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1451 Through the use of nested layouts, a widget hierarchy can be created
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1452 which can have the appearance of any standard dialog box or similar
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1453 arrangement; all of this is counted as one "glyph" and could appear in
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1454 many of the places that expect a single glyph.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1455
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1456 (There are also @dfn{native layouts}, but I don't know what these are or
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1457 how they are used.)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1458
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1459 A layout descriptor is an image instantiator, @emph{i.e.}, a vector of
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1460 the form @samp{[FORMAT KEY-1 VALUE-1 KEY-2 VALUE-2 ...]} with format
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1461 @code{layout}, and properties
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1462
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1463 @c #### need defaults for these
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1464 @table @code
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1465 @item :orientation
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1466 Specifies the orientation of the contained array of glyphs. The value
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1467 must be one of the symbols @code{horizontal} or @code{vertical}.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1468
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1469 @item :horizontally-justify
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1470 Specifies the horizontal justification of the items in the array. The
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1471 value must be one of the symbols @code{:right}, @code{:center}, or
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1472 @code{:left}.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1473
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1474 @item :vertically-justify
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1475 Specifies the vertical justification of the items in the array. The
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1476 value must be one of the symbols @code{:center}, @code{:center}, or
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1477 @code{:bottom}.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1478
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1479 @item :justify
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1480 Specifies justification. #### not understood.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1481
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1482 @item :border
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1483 A glyph to place in the border. The value must be an image
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1484 instantiator.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1485
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1486 @item :items
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1487 The glyphs controlled by the layout. The value must be a list of image
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1488 instantiators.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1489 @end table
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1490
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1491 Here is the specification of the search dialog widget created by
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1492 @code{make-search-dialog} in the @file{dialog-items} library, which
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1493 makes use of recursive layouts.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1494
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1495 @example
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1496 (make-glyph
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1497 `[layout
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1498 :orientation horizontal
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1499 :vertically-justify top
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1500 :horizontally-justify center
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1501 :border [string :data "Search"]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1502 :items
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1503 ([layout :orientation vertical
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1504 :justify top ; implies left also
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1505 :items
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1506 ([string :data "Search for:"]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1507 [button :descriptor "Match Case"
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1508 :style toggle
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1509 :selected (not case-fold-search)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1510 :callback (setq case-fold-search
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1511 (not case-fold-search))]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1512 [button :descriptor "Regular Expression"
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1513 :style toggle
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1514 :selected search-dialog-regexp
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1515 :callback (setq search-dialog-regexp
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1516 (not search-dialog-regexp))]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1517 [button :descriptor "Forwards"
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1518 :style radio
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1519 :selected search-dialog-direction
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1520 :callback (setq search-dialog-direction t)]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1521 [button :descriptor "Backwards"
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1522 :style radio
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1523 :selected (not search-dialog-direction)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1524 :callback (setq search-dialog-direction nil)]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1525 )]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1526 [layout :orientation vertical
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1527 :vertically-justify top
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1528 :horizontally-justify right
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1529 :items
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1530 ([edit-field :width 15 :descriptor "" :active t
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1531 :initial-focus t]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1532 [button :width 10 :descriptor "Find Next"
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1533 :callback-ex
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1534 (lambda (image-instance event)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1535 (search-dialog-callback ,parent
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1536 image-instance
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1537 event))]
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1538 [button :width 10 :descriptor "Cancel"
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1539 :callback-ex
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1540 (lambda (image-instance event)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1541 (isearch-dehighlight)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1542 (delete-frame
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1543 (event-channel event)))])])])
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1544 @end example
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1545
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1546 @node Primitive Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1547 @subsection Primitive Widgets
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1548
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1549 @c #### the following table should be replaced with a menu of nodes
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1550 @table @code
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1551 @item button
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1552 A button widget; either a push button, radio button or toggle
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1553 button.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1554
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1555 @item combo-box
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1556 A drop list of selectable items in a widget, for editing text.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1557
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1558 @item edit-field
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1559 A text editing widget.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1560
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1561 @item label
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1562 A static, text-only, widget; for displaying text.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1563
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1564 @item progress-gauge
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1565 A sliding widget, for showing progress.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1566
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1567 @item tab-control
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1568 A tab widget; a series of user selectable tabs.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1569
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1570 @item tree-view
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1571 A folding widget.
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1572
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1573 @item scrollbar
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1574 A scrollbar widget. (#### Probably not the same as the scrollbar
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1575 controlling an Emacs window.)
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1576 @end table
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1577
2ba4f06a264d [xemacs-hg @ 2004-04-19 08:02:27 by stephent]
stephent
parents: 1137
diff changeset
1578
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 @node Subwindows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 @section Subwindows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 Subwindows are not currently implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 @defun subwindowp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 This function returns non-@code{nil} if @var{object} is a subwindow.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 @end defun
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1587
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1588 @node Glyph Examples
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1589 @section Glyph Examples
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1590
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1591 For many applications, displaying graphics is a simple process: you
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1592 create a glyph, and then you insert it into a buffer.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1593
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1594 The easiest way to create a glyph is to use a file that contains a
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1595 graphical image, such as a JPEG, TIFF, or PNG file:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1596
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1597 @lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1598 ;; Create a glyph from a JPEG file:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1599 (setq foo (make-glyph [jpeg :file "/tmp/file1.jpg"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1600 @end lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1601
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1602 @lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1603 ;; Create a glyph from a XPM file:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1604 (setq foo (make-glyph [xpm :file "/tmp/file2.xpm"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1605 @end lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1606
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1607 @lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1608 ;; Create a glyph from a PNG file:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1609 (setq foo (make-glyph [png :file "/tmp/file3.png"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1610 @end lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1611
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1612 @lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1613 ;; Create a glyph from a TIFF file:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1614 (setq foo (make-glyph [tiff :file "/tmp/file4.tiff"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1615 @end lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1616
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1617 The parameters passed to @code{make-glyph} are called "Image
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1618 Specifiers", and can handle more image types than those shown above.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1619 You can also put the raw image data into a string (e.g., if you put the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1620 contents of a JPEG file into a string), and use that to create a glyph.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1621 @xref{Image Specifiers}, for more information.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1622
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1623 @quotation
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1624 @strong{Caution}: In order for XEmacs to read a particular graphics file
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1625 format, support for that format must have been compiled into XEmacs.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1626 It's possible, although somewhat unlikely, for XEmacs to have been
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1627 compiled without support for any of the various graphics file formats.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1628 To see what graphics formats your particular version of XEmacs supports,
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1629 use @kbd{M-x describe-installation}.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1630
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1631 To programmatically query whether or not a particular file format is
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1632 supported, you can use the @code{featurep} function, with one of:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1633 @code{gif}, @code{tiff}, @code{jpeg}, @code{xpm}, @code{xbm},
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1634 @code{png}, or @code{xface}. For an up-to-date list, @ref{Image
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1635 Specifiers}. Example:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1636
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1637 @example
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1638 ;; Returns `t' if TIFF is supported:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1639 (featurep 'tiff)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1640 @end example
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1641
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1642 Another example is:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1643
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1644 @example
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1645 ;; Returns a list of `t' or `nil', depending on whether or not the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1646 ;; corresponding feature is supported:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1647 (mapcar #'(lambda (format-symbol) (featurep format-symbol))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1648 '(gif tiff jpeg xpm png))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1649 @end example
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1650
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1651 @end quotation
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1652
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1653 Once you have a glyph, you can then insert it into a buffer. Example:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1654
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1655 @lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1656 ;; Use this function to insert a glyph at the left edge of point in the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1657 ;; current buffer. Any existing glyph at this location is replaced.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1658 (defun insert-glyph (gl)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1659 "Insert a glyph at the left edge of point."
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 707
diff changeset
1660 (let ( (prop 'myimage) ;; myimage is an arbitrary name, chosen
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1661 ;; to (hopefully) not conflict with any
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1662 ;; other properties. Change it if
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1663 ;; necessary.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1664 extent )
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1665 ;; First, check to see if one of our extents already exists at
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1666 ;; point. For ease-of-programming, we are creating and using our
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1667 ;; own extents (multiple extents are allowed to exist/overlap at the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1668 ;; same point, and it's quite possible for other applications to
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1669 ;; embed extents in the current buffer without your knowledge).
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1670 ;; Basically, if an extent, with the property stored in "prop",
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1671 ;; exists at point, we assume that it is one of ours, and we re-use
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1672 ;; it (this is why it is important for the property stored in "prop"
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1673 ;; to be unique, and only used by us).
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1674 (if (not (setq extent (extent-at (point) (current-buffer) prop)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1675 (progn
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1676 ;; If an extent does not already exist, create a zero-length
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1677 ;; extent, and give it our special property.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1678 (setq extent (make-extent (point) (point) (current-buffer)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1679 (set-extent-property extent prop t)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1680 ))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1681 ;; Display the glyph by storing it as the extent's "begin-glyph".
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1682 (set-extent-property extent 'begin-glyph gl)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1683 ))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1684
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1685 ;; You can then use this function like:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1686 (insert-glyph (make-glyph [jpeg :file "/tmp/file1.jpg"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1687 ;; This will insert the glyph at point.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1688
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1689 ;; Here's an example of how to insert two glyphs side-by-side, at point
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1690 ;; (using the above code):
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1691 (progn
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1692 (insert-glyph (make-glyph [jpeg :file "/tmp/file1.jpg"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1693 ;; Create a new extent at point. We can't simply call "insert-glyph",
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1694 ;; as "insert-glyph" will simply replace the first glyph with the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1695 ;; second.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1696 (setq extent (make-extent (point) (point) (current-buffer)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1697 ;; Here, we're only setting the 'myimage property in case we need
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1698 ;; to later identify/locate/reuse this particular extent.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1699 (set-extent-property extent 'myimage t)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1700 (set-extent-property extent 'begin-glyph
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1701 (make-glyph [jpeg :file "/tmp/file2.jpg"]))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1702 )
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1703
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1704 @end lisp
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1705
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1706 Here are the gory details:
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1708 @itemize @bullet
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1709
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1710 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1711 Glyphs are displayed by attaching them to extents (see @ref{Extents}),
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1712 either to the beginning or the end of extents.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1713
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1714 Note that extents can be used for many things, and not just for
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1715 displaying images (although, in the above example, we are creating our
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1716 own extent for the sole purpose of displaying an image). Also, note
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1717 that multiple extents are allowed to exist at the same position, and
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1718 they can overlap.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1719
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1720 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1721 Glyphs are often displayed inside the text area (alongside text). This
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1722 is the default.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1723
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1724 Although glyphs can also be displayed in the margins, how to do this
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1725 will not be described here. For more information on this, see
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1726 @ref{Annotation Basics} (look for information on "layout types") and
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1727 @ref{Extent Properties} (look for @code{begin-glyph-layout} and
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1728 @code{end-glyph-layout}).
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1729
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1730 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1731 The easiest way to insert a glyph into text is to create a zero-length
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1732 extent at the point where you want the glyph to appear.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1733
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1734 Note that zero-length extents are attached to the character to the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1735 right of the extent; deleting this character will also delete the extent.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1736
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1737 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1738 It's often a good idea to assign a unique property to the newly-created
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1739 extent, in case you later want to locate it, and replace any existing
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1740 glyph with a different one (or just delete the existing one). In the
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1741 above example, we are using "myimage" as our (hopefully) unique property
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1742 name.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1743
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1744 If you need to locate all of the extents, you'll have to use functions
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1745 like @code{extent-list} or @code{next-extent}, or provide additional
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1746 parameters to the @code{extent-at} function. Assigning a unique
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1747 property to the extent makes it easy to locate your extents; for
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1748 example, @code{extent-list} can return only those extents with a
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1749 particular property. @xref{Finding Extents}, and @ref{Mapping Over
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1750 Extents}, for more information.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1751
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1752 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1753 Glyphs are displayed by assigning then to the @code{begin-glyph} or
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1754 @code{end-glyph} property of the extent. For zero-length extents, it
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1755 doesn't really matter if you assign the glyph to the @code{begin-glyph}
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1756 or @code{end-glyph} property, as they are both at the same location;
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1757 however, for non-zero-length extents (extents that cover one or more
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1758 characters of text), it does matter which one you use.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1759
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1760 Assigning @code{nil} to the @code{begin-glyph} or @code{end-glyph}
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1761 property will delete any existing glyph. In this case, you may also
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1762 want to delete the extent, assuming that the extent is used for no other
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1763 purpose.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1764
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1765 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1766 If you happen to insert two glyphs, side-by-side, note that the example
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1767 @code{insert-glyph} function will have trouble, if it's again used at
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1768 the same point (it can only locate one of the two extents).
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1769 @xref{Finding Extents}, and @ref{Mapping Over Extents}, for more
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1770 information on locating extents in a buffer.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1771
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1772 @item
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1773 Among other things, glyphs provide a way of displaying graphics
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1774 alongside text. Note, however, that glyphs only provide a way of
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1775 displaying graphics; glyphs are not actually part of the text, and are
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1776 only displayed alongside the text. If you save the text in the buffer,
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1777 the graphics are not saved. The low-level glyph code does not provide a
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1778 way of saving graphics with the text. If you need to save graphics and
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1779 text, you have to write your own code to do this, and this topic is
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1780 outside the scope of this discussion.
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1781
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
1782 @end itemize