comparison man/lispref/glyphs.texi @ 442:abe6d1db359e r21-2-36

Import from CVS: tag r21-2-36
author cvs
date Mon, 13 Aug 2007 11:35:02 +0200
parents 8de8e3f6228a
children 576fb035e263
comparison
equal deleted inserted replaced
441:72a7cfa4a488 442:abe6d1db359e
5 @setfilename ../../info/glyphs.info 5 @setfilename ../../info/glyphs.info
6 @node Glyphs, Annotations, Faces and Window-System Objects, top 6 @node Glyphs, Annotations, Faces and Window-System Objects, top
7 @chapter Glyphs 7 @chapter Glyphs
8 @cindex glyphs 8 @cindex glyphs
9 9
10 A @dfn{glyph} is an object that is used for pixmaps and images of all 10 A @dfn{glyph} is an object that is used for pixmaps, widgets and
11 sorts, as well as for things that ``act'' like pixmaps, such as 11 images of all sorts, as well as for things that ``act'' like pixmaps,
12 non-textual strings (@dfn{annotations}) displayed in a buffer or in the 12 such as non-textual strings (@dfn{annotations}) displayed in a buffer or
13 margins. It is used in begin-glyphs and end-glyphs attached to extents, 13 in the margins. It is used in begin-glyphs and end-glyphs attached to
14 marginal and textual annotations, overlay arrows (@code{overlay-arrow-*} 14 extents, marginal and textual annotations, overlay arrows
15 variables), toolbar buttons, mouse pointers, frame icons, truncation and 15 (@code{overlay-arrow-*} variables), toolbar buttons, mouse pointers,
16 continuation markers, and the like. (Basically, any place there is an 16 frame icons, truncation and continuation markers, and the
17 image or something that acts like an image, there will be a glyph object 17 like. (Basically, any place there is an image or something that acts
18 representing it.) 18 like an image, there will be a glyph object representing it.)
19 19
20 The actual image that is displayed (as opposed to its position or 20 The actual image that is displayed (as opposed to its position or
21 clipping) is defined by an @dfn{image specifier} object contained 21 clipping) is defined by an @dfn{image specifier} object contained
22 within the glyph. The separation between an image specifier object 22 within the glyph. The separation between an image specifier object
23 and a glyph object is made because the glyph includes other properties 23 and a glyph object is made because the glyph includes other properties
69 into which the glyph's image can be instantiated. @var{type} should be 69 into which the glyph's image can be instantiated. @var{type} should be
70 one of @code{buffer} (used for glyphs in an extent, the modeline, the 70 one of @code{buffer} (used for glyphs in an extent, the modeline, the
71 toolbar, or elsewhere in a buffer), @code{pointer} (used for the 71 toolbar, or elsewhere in a buffer), @code{pointer} (used for the
72 mouse-pointer), or @code{icon} (used for a frame's icon), and defaults 72 mouse-pointer), or @code{icon} (used for a frame's icon), and defaults
73 to @code{buffer}. @xref{Glyph Types}. 73 to @code{buffer}. @xref{Glyph Types}.
74
75 A glyph in XEmacs does @strong{NOT} refer to a single unit of textual
76 display (the XEmacs term for this is @dfn{rune}), but rather is an
77 object encapsulating a graphical element, such as an image or widget (an
78 element such as a button or text field; @dfn{widget} is the term for
79 this under X Windows, and it's called a @dfn{control} under MS Windows).
80 This graphical element could appear in a buffer, a margin, a gutter, or
81 a toolbar, or as a mouse pointer or an icon, for example.
82
83 Creating a glyph using @code{make-glyph} does not specify @emph{where}
84 the glyph will be used, but it does specify @emph{what} the glyph will
85 look like. In particular, SPEC-LIST is used to specify this, and it's
86 used to initialize the glyph's @code{image} property, which is an image
87 specifier. (Note that @dfn{image} as used in the context of a glyph's
88 @code{image} property or in the terms @dfn{image specifier}, @dfn{image
89 instantiator}, or @dfn{image instance} does not refer to what people
90 normally think of as an image (which in XEmacs is called a
91 @dfn{pixmap}), but to any graphical element---a pixmap, a widget, or
92 even a block of text, when used in the places that call for a glyph.)
93 The format of the SPEC-LIST is typically an image instantiator (a string
94 or a vector; @ref{Image Specifiers}), but can also be a list of such
95 instantiators (each one in turn is tried until an image is successfully
96 produced), a cons of a locale (frame, buffer, etc.) and an
97 instantiator, a list of such conses, or any other form accepted by
98 @code{canonicalize-spec-list}. @xref{Specifiers}, for more information
99 about specifiers.
100
101 If you're not familiar with specifiers, you should be in order to
102 understand how glyphs work. The clearest introduction to specifiers
103 is in the Lispref manual, available under Info. (Choose
104 Help->Info->Info Contents on the menubar or type C-h i.) You can
105 also see @code{make-specifier} for a capsule summary. What's important to
106 keep in mind is that a specifier lets you set a different value for
107 any particular buffer, window, frame, device, or console. This allows
108 for a great deal of flexibility; in particular, only one global glyph
109 needs to exist for a particular purpose (e.g. the icon used to represent
110 an iconified frame, the mouse pointer used over particular areas of a
111 frame, etc.), and in these cases you do not create your own glyph, but
112 rather modify the existing one.
113
114 As well as using @var{spec-list} to initialize the glyph, you can set
115 specifications using @code{set-glyph-image}. Note that, due to a
116 possibly questionable historical design decision, a glyph itself is not
117 actually a specifier, but rather is an object containing an image
118 specifier (as well as other, seldom-used properties). Therefore, you
119 cannot set or access specifications for the glyph's image by directly
120 using @code{set-specifier}, @code{specifier-instance} or the like on the
121 glyph; instead use them on @code{(glyph-image @var{glyph})} or use the
122 convenience functions @code{set-glyph-image},
123 @code{glyph-image-instance}, and @code{glyph-image}.
124
125 Once you have created a glyph, you specify where it will be used as
126 follows:
127
128 @itemize @bullet
129 @item
130 To insert a glyph into a buffer, create an extent in the buffer and then
131 use @code{set-extent-begin-glyph} or @code{set-extent-end-glyph} to set
132 a glyph to be displayed at the corresponding edge of the extent. (It is
133 common to create zero-width extents for this purpose.)
134
135 @item
136 To insert a glyph into the left or right margin of a buffer, first
137 make sure the margin is visible by setting a value for the specifiers
138 @code{left-margin-width} or @code{right-margin-width}. (Not strictly necessary
139 when using margin glyphs with layout policy @code{whitespace}.) Then follow
140 the same procedure above for inserting a glyph in a buffer, and then
141 set a non-default layout policy for the glyph using
142 @code{set-extent-begin-glyph-layout} or @code{set-extent-end-glyph-layout}.
143 Alternatively, use the high-level annotations API (see
144 @code{make-annotation}). (In point of fact, you can also use the annotations
145 API for glyphs in a buffer, by setting a layout policy of @code{text}.)
146
147 @item
148 To insert a glyph into the modeline, just put the glyph directly as one
149 of the modeline elements. (Unfortunately you can't currently put a begin
150 glyph or end glyph on one of the modeline extents---they're ignored.)
151
152 @item
153 To insert a glyph into a toolbar, specify it as part of a toolbar
154 instantiator (typically set on the specifier @code{default-toolbar}).
155 See @code{default-toolbar} for more information. (Note that it is
156 standard practice to use a symbol in place of the glyph list in the
157 toolbar instantiator; the symbol is evalled to get the glyph list. This
158 facilitates both creating the toolbar instantiator and modifying
159 individual glyphs in a toolbar later on. For example, you can change
160 the way that the Mail toolbar button looks by modifying the value of the
161 variable @code{toolbar-mail-icon} (in general, @code{toolbar-*-icon})
162 and then calling @code{(set-specifier-dirty-flag default-toolbar)}.
163 (#### Unfortunately this doesn't quite work the way it should; the
164 change will appear in new frames, but not existing ones.
165
166 @item
167 To insert a glyph into a gutter, create or modify a gutter instantiator
168 (typically set on the specifier @code{default-gutter}). Gutter
169 instantiators consist of strings or lists of strings, so to insert a
170 glyph, create an extent over the string, and use
171 @code{set-extent-begin-glyph} or @code{set-extent-end-glyph} to set a
172 glyph to be displayed at the corresponding edge of the extent, just like
173 for glyphs in a buffer.
174
175 @item
176 To use a glyph as the icon for a frame, you do not actually create a new
177 glyph; rather, you change the specifications for the existing glyph
178 @code{frame-icon-glyph}. (Remember that, because of the specifier nature
179 of glyphs, you can set different values for any particular buffer or
180 frame.)
181
182 @item
183 To use a glyph as the mouse pointer, in general you do not create a new
184 glyph, but rather you change the specifications of various existing
185 glyphs, such as @code{text-pointer-glyph} for the pointer used over
186 text, @code{modeline-pointer-glyph} for the pointer used over the
187 modeline, etc. Do an apropos over @code{*-pointer-glyph} to find all of
188 them. (Note also that you can temporarily set the mouse pointer to some
189 specific shape by using @code{set-frame-pointer}, which takes an image
190 instance, as obtained from calling @code{glyph-image-instance} on a glyph
191 of type @code{pointer} -- either one of the above-mentioned variables or
192 one you created yourself. (See below for what it means to create a
193 glyph of type @code{pointer}.) This pointer will last only until the
194 next mouse motion event is processed or certain other things happen,
195 such as creating or deleting a window. (In fact, the above-mentioned
196 pointer glyph variables are implemented as part of the default handler
197 for mouse motion events. If you want to customize this behavior, take a
198 look at @code{mode-motion-hook}, or @code{mouse-motion-handler} if you
199 really want to get low-level.)
200
201 @item
202 To use a glyph to control the shape of miscellaneous redisplay effects
203 such as the truncation and continuation markers, set the appropriate
204 existing glyph variables, as for icons and pointers above. See
205 @code{continuation-glyph}, @code{control-arrow-glyph},
206 @code{hscroll-glyph}, @code{invisible-text-glyph},
207 @code{octal-escape-glyph}, and @code{truncation-glyph}. See also
208 @code{overlay-arrow-string}, an odd redisplay leftover which can be set
209 to a glyph you created, and will cause the glyph to be displayed on top
210 of the text position specified in the marker stored in
211 @code{overlay-arrow-position}.
212
213 @item
214 To use a glyph in a display table (i.e. to control the appearance of any
215 individual character), create the appropriate character glyphs and then
216 set a specification for the specifier @code{current-display-table},
217 which controls the appearance of characters. You can also set an
218 overriding display table for use with text displayed in a particular
219 face; see @code{set-face-display-table} and @code{make-display-table}.
220 #### Note: Display tables do not currently support general Mule
221 characters. They will be overhauled at some point to support this
222 and to provide other features required under Mule.
223
224 @item
225 To use a glyph as the background pixmap of a face: Note that the
226 background pixmap of a face is actually an image specifier -- probably
227 the only place in XEmacs where an image specifier occurs outside of a
228 glyph. Similarly to how the glyph's image specifier works, you don't
229 create your own image specifier, but rather add specifications to the
230 existing one (using @code{set-face-background-pixmap}). Note that the
231 image instance that is generated in order to actually display the
232 background pixmap is of type @code{mono-pixmap}, meaning that it's a
233 two-color image and the foreground and background of the image get
234 filled in with the corresponding colors from the face.
235 @end itemize
236
237 It is extremely rare that you will ever have to specify a value for
238 TYPE, which should be one of @code{buffer} (used for glyphs in an
239 extent, the modeline, the toolbar, or elsewhere in a buffer),
240 @code{pointer} (used for the mouse-pointer), or @code{icon} (used for a
241 frame's icon), and defaults to @code{buffer}. The only cases where it
242 needs to be specified is when creating icon or pointer glyphs, and in
243 both cases the necessary glyphs have already been created at startup and
244 are accessed through the appropriate variables,
245 e.g. @code{text-pointer-glyph} (or in general, @code{*-pointer-glyph})
246 and @code{frame-icon-glyph}. @xref{Glyph Types}.
74 @end defun 247 @end defun
75 248
76 @defun make-glyph-internal &optional type 249 @defun make-glyph-internal &optional type
77 This function creates a new, uninitialized glyph of type @var{type}. 250 This function creates a new, uninitialized glyph of type @var{type}.
78 @end defun 251 @end defun
79 252
80 @defun make-pointer-glyph &optional spec-list 253 @defun make-pointer-glyph &optional spec-list
81 This function is equivalent to calling @code{make-glyph} with a 254
82 @var{type} of @code{pointer}. 255 Return a new @code{pointer-glyph} object with the specification list
256 @var{spec-list}. This function is equivalent to calling
257 @code{make-glyph} with a @var{type} of @code{pointer}.
258
259 It is extremely unlikely that you will ever need to create a pointer
260 glyph. Instead, you probably want to be calling @code{set-glyph-image}
261 on an existing glyph, e.g. @code{text-pointer-glyph}.
83 @end defun 262 @end defun
84 263
85 @defun make-icon-glyph &optional spec-list 264 @defun make-icon-glyph &optional spec-list
86 This function is equivalent to calling @code{make-glyph} with a 265
87 @var{type} of @code{icon}. 266 Return a new @code{pointer-glyph} object with the specification list
267 @var{spec-list}. This function is equivalent to calling
268 @code{make-glyph} with a @var{type} of @code{icon}.
269
270 It is extremely unlikely that you will ever need to create a pointer
271 glyph. Instead, you probably want to be calling @code{set-glyph-image}
272 on an existing glyph, e.g. @code{text-pointer-glyph}.
88 @end defun 273 @end defun
89 274
90 @node Glyph Properties 275 @node Glyph Properties
91 @subsection Glyph Properties 276 @subsection Glyph Properties
92 277
418 Usually, an image specifier results from calling @code{glyph-image} on 603 Usually, an image specifier results from calling @code{glyph-image} on
419 a glyph. 604 a glyph.
420 @end defun 605 @end defun
421 606
422 @defun make-image-specifier spec-list 607 @defun make-image-specifier spec-list
423 This function creates a new image specifier object and initializes 608 This function creates a new image specifier object and initializes it
424 it according to @var{spec-list}. It is unlikely that you will ever 609 according to @var{spec-list}. @xref{Specifiers}.
425 want to do this, but this function is provided for completeness and 610
426 for experimentation purposes. @xref{Specifiers}. 611 Note that, in practice, you rarely, if ever, need to actually create an
612 image specifier! (This function exists mainly for completeness.) Pretty
613 much the only use for image specifiers is to control how glyphs are
614 displayed, and the image specifier associated with a glyph (the
615 @code{image} property of a glyph) is created automatically when a glyph
616 is created and need not (and cannot, for that matter) ever be changed
617 (@pxref{Glyphs}). In fact, the design decision to create a separate
618 image specifier type, rather than make glyphs themselves be specifiers,
619 is debatable---the other properties of glyphs are rarely used and could
620 conceivably have been incorporated into the glyph's instantiator. The
621 rarely used glyph types (buffer, pointer, icon) could also have been
622 incorporated into the instantiator.
427 @end defun 623 @end defun
428 624
429 Image instantiators come in many formats: @code{xbm}, @code{xpm}, 625 Image instantiators come in many formats: @code{xbm}, @code{xpm},
430 @code{gif}, @code{jpeg}, etc. This describes the format of the data 626 @code{gif}, @code{jpeg}, etc. This describes the format of the data
431 describing the image. The resulting image instances also come in many 627 describing the image. The resulting image instances also come in many
460 i.e. a format symbol followed by zero or more alternating keyword-value 656 i.e. a format symbol followed by zero or more alternating keyword-value
461 pairs. The @dfn{format} field should be a symbol, one of 657 pairs. The @dfn{format} field should be a symbol, one of
462 658
463 @table @code 659 @table @code
464 @item nothing 660 @item nothing
465 (Don't display anything; no keywords are valid for this. Can only be 661 Don't display anything; no keywords are valid for this. Can only be
466 instanced as @code{nothing}.) 662 instanced as @code{nothing}.
467 @item string 663 @item string
468 (Display this image as a text string. Can only be instanced 664 Display this image as a text string. Can only be instanced
469 as @code{text}, although support for instancing as @code{mono-pixmap} 665 as @code{text}, although support for instancing as @code{mono-pixmap}
470 should be added.) 666 should be added.
471 @item formatted-string 667 @item formatted-string
472 (Display this image as a text string with replaceable fields, 668 Display this image as a text string with replaceable fields,
473 similar to a modeline format string; not currently implemented.) 669 similar to a modeline format string; not currently implemented.
474 @item xbm 670 @item xbm
475 (An X bitmap; only if X support was compiled into this XEmacs. Can be 671 An X bitmap; only if X support was compiled into this XEmacs. Can be
476 instanced as @code{mono-pixmap}, @code{color-pixmap}, or 672 instanced as @code{mono-pixmap}, @code{color-pixmap}, or
477 @code{pointer}.) 673 @code{pointer}.
478 @item xpm 674 @item xpm
479 (An XPM pixmap; only if XPM support was compiled into this XEmacs. Can 675 An XPM pixmap; only if XPM support was compiled into this XEmacs. Can
480 be instanced as @code{color-pixmap}, @code{mono-pixmap}, or 676 be instanced as @code{color-pixmap}, @code{mono-pixmap}, or
481 @code{pointer}. XPM is an add-on library for X that was designed to 677 @code{pointer}. XPM is an add-on library for X that was designed to
482 rectify the shortcomings of the XBM format. Most implementations of X 678 rectify the shortcomings of the XBM format. Most implementations of X
483 include the XPM library as a standard part. If your vendor does not, it 679 include the XPM library as a standard part. If your vendor does not, it
484 is highly recommended that you download it and install it. You can get 680 is highly recommended that you download it and install it. You can get
485 it from the standard XEmacs FTP site, among other places.) 681 it from the standard XEmacs FTP site, among other places.
486 @item xface 682 @item xface
487 (An X-Face bitmap, used to encode people's faces in e-mail messages; 683 An X-Face bitmap, used to encode people's faces in e-mail messages;
488 only if X-Face support was compiled into this XEmacs. Can be instanced 684 only if X-Face support was compiled into this XEmacs. Can be instanced
489 as @code{mono-pixmap}, @code{color-pixmap}, or @code{pointer}.) 685 as @code{mono-pixmap}, @code{color-pixmap}, or @code{pointer}.
490 @item gif 686 @item gif
491 (A GIF87 or GIF89 image; only if GIF support was compiled into this 687 A GIF87 or GIF89 image; only if GIF support was compiled into this
492 XEmacs. Can be instanced as @code{color-pixmap}. Note that XEmacs 688 XEmacs. Can be instanced as @code{color-pixmap}. Note that XEmacs
493 includes GIF decoding functions as a standard part of it, so if you have 689 includes GIF decoding functions as a standard part of it, so if you have
494 X support, you will normally have GIF support, unless you explicitly 690 X support, you will normally have GIF support, unless you explicitly
495 disable it at configure time.) 691 disable it at configure time.
496 @item jpeg 692 @item jpeg
497 (A JPEG-format image; only if JPEG support was compiled into this 693 A JPEG-format image; only if JPEG support was compiled into this
498 XEmacs. Can be instanced as @code{color-pixmap}. If you have the JPEG 694 XEmacs. Can be instanced as @code{color-pixmap}. If you have the JPEG
499 libraries present on your system when XEmacs is built, XEmacs will 695 libraries present on your system when XEmacs is built, XEmacs will
500 automatically detect this and use them, unless you explicitly disable it 696 automatically detect this and use them, unless you explicitly disable it
501 at configure time.) 697 at configure time.
502 @item png 698 @item png
503 (A PNG/GIF24 image; only if PNG support was compiled into this XEmacs. 699 A PNG/GIF24 image; only if PNG support was compiled into this XEmacs.
504 Can be instanced as @code{color-pixmap}.) 700 Can be instanced as @code{color-pixmap}.
505 @item tiff 701 @item tiff
506 (A TIFF-format image; only if TIFF support was compiled into this XEmacs. 702 A TIFF-format image; only if TIFF support was compiled into this XEmacs.
507 Not currently implemented.)
508 @item cursor-font 703 @item cursor-font
509 (One of the standard cursor-font names, such as @samp{watch} or 704 One of the standard cursor-font names, such as @samp{watch} or
510 @samp{right_ptr} under X. Under X, this is, more specifically, any of 705 @samp{right_ptr} under X. Under X, this is, more specifically, any of
511 the standard cursor names from appendix B of the Xlib manual [also known 706 the standard cursor names from appendix B of the Xlib manual [also known
512 as the file @file{<X11/cursorfont.h>}] minus the @samp{XC_} prefix. On 707 as the file @file{<X11/cursorfont.h>}] minus the @samp{XC_} prefix. On
513 other window systems, the valid names will be specific to the type of 708 other window systems, the valid names will be specific to the type of
514 window system. Can only be instanced as @code{pointer}.) 709 window system. Can only be instanced as @code{pointer}.
515 @item font 710 @item font
516 (A glyph from a font; i.e. the name of a font, and glyph index into it 711 A glyph from a font; i.e. the name of a font, and glyph index into it
517 of the form @samp{@var{font} fontname index [[mask-font] mask-index]}. 712 of the form @samp{@var{font} fontname index [[mask-font] mask-index]}.
518 Only if X support was compiled into this XEmacs. Currently can only be 713 Only if X support was compiled into this XEmacs. Currently can only be
519 instanced as @code{pointer}, although this should probably be fixed.) 714 instanced as @code{pointer}, although this should probably be fixed.
715 @item mswindows-resource
716 An MS Windows pointer resource. Specifies a resource to retrieve
717 directly from the system (an OEM resource) or from a file, particularly
718 an executable file. If the resource is to be retrieved from a file, use
719 :file and optionally :resource-id. Otherwise use :resource-id. Always
720 specify :resource-type to specify the type (cursor, bitmap or icon) of
721 the resource. Possible values for :resource-id are listed below. Can
722 be instanced as @code{pointer} or @code{color-pixmap}.
520 @item subwindow 723 @item subwindow
521 (An embedded X window; not currently implemented.) 724 An embedded windowing system window. Can only be instanced as
725 @code{subwindow}.
726 @item button
727 A button widget; either a push button, radio button or toggle button.
728 Can only be instanced as @code{widget}.
729 @item combo-box
730 A drop list of selectable items in a widget, for editing text.
731 Can only be instanced as @code{widget}.
732 @item edit-field
733 A text editing widget. Can only be instanced as @code{widget}.
734 @item label
735 A static, text-only, widget; for displaying text. Can only be instanced
736 as @code{widget}.
737 @item layout
738 A widget for controlling the positioning of children underneath it.
739 Through the use of nested layouts, a widget hierarchy can be created
740 which can have the appearance of any standard dialog box or similar
741 arrangement; all of this is counted as one @dfn{glyph} and could appear
742 in many of the places that expect a single glyph. Can only be instanced
743 as @code{widget}.
744 @item native-layout
745 @c #### Document me better!
746 The native version of a layout widget.
747 Can only be instanced as @code{widget}.
748 @item progress-gauge
749 A sliding widget, for showing progress. Can only be instanced as
750 @code{widget}.
751 @item tab-control
752 A tab widget; a series of user selectable tabs. Can only be instanced
753 as @code{widget}.
754 @item tree-view
755 A folding widget. Can only be instanced as @code{widget}.
756 @item scrollbar
757 A scrollbar widget. Can only be instanced as @code{widget}.
522 @item autodetect 758 @item autodetect
523 (XEmacs tries to guess what format the data is in. If X support exists, 759 XEmacs tries to guess what format the data is in. If X support exists,
524 the data string will be checked to see if it names a filename. If so, 760 the data string will be checked to see if it names a filename. If so,
525 and this filename contains XBM or XPM data, the appropriate sort of 761 and this filename contains XBM or XPM data, the appropriate sort of
526 pixmap or pointer will be created. [This includes picking up any 762 pixmap or pointer will be created. [This includes picking up any
527 specified hotspot or associated mask file.] Otherwise, if @code{pointer} 763 specified hotspot or associated mask file.] Otherwise, if @code{pointer}
528 is one of the allowable image-instance types and the string names a 764 is one of the allowable image-instance types and the string names a
529 valid cursor-font name, the image will be created as a pointer. 765 valid cursor-font name, the image will be created as a pointer.
530 Otherwise, the image will be displayed as text. If no X support exists, 766 Otherwise, the image will be displayed as text. If no X support exists,
531 the image will always be displayed as text.) 767 the image will always be displayed as text.
768 @item inherit
769 Inherit from the background-pixmap property of a face. Can only be
770 instanced as @code{mono-pixmap}.
532 @end table 771 @end table
533 772
534 The valid keywords are: 773 The valid keywords are:
535 774
536 @table @code 775 @table @code
537 @item :data 776 @item :data
538 (Inline data. For most formats above, this should be a string. For 777 Inline data. For most formats above, this should be a string. For
539 XBM images, this should be a list of three elements: width, height, and 778 XBM images, this should be a list of three elements: width, height, and
540 a string of bit data. This keyword is not valid for instantiator 779 a string of bit data. This keyword is not valid for instantiator
541 format @code{nothing}.) 780 format @code{nothing}.
542 781
543 @item :file 782 @item :file
544 (Data is contained in a file. The value is the name of this file. If 783 Data is contained in a file. The value is the name of this file. If
545 both @code{:data} and @code{:file} are specified, the image is created 784 both @code{:data} and @code{:file} are specified, the image is created
546 from what is specified in @code{:data} and the string in @code{:file} 785 from what is specified in @code{:data} and the string in @code{:file}
547 becomes the value of the @code{image-instance-file-name} function when 786 becomes the value of the @code{image-instance-file-name} function when
548 applied to the resulting image-instance. This keyword is not valid for 787 applied to the resulting image-instance. This keyword is not valid for
549 instantiator formats @code{nothing}, @code{string}, 788 instantiator formats @code{nothing}, @code{string},
550 @code{formatted-string}, @code{cursor-font}, @code{font}, and 789 @code{formatted-string}, @code{cursor-font}, @code{font}, and
551 @code{autodetect}.) 790 @code{autodetect}.
552 791
553 @item :foreground 792 @item :foreground
554 @itemx :background 793 @itemx :background
555 (For @code{xbm}, @code{xface}, @code{cursor-font}, and @code{font}. 794 For @code{xbm}, @code{xface}, @code{cursor-font}, and @code{font}.
556 These keywords allow you to explicitly specify foreground and background 795 These keywords allow you to explicitly specify foreground and background
557 colors. The argument should be anything acceptable to 796 colors. The argument should be anything acceptable to
558 @code{make-color-instance}. This will cause what would be a 797 @code{make-color-instance}. This will cause what would be a
559 @code{mono-pixmap} to instead be colorized as a two-color color-pixmap, 798 @code{mono-pixmap} to instead be colorized as a two-color color-pixmap,
560 and specifies the foreground and/or background colors for a pointer 799 and specifies the foreground and/or background colors for a pointer
561 instead of black and white.) 800 instead of black and white.
562 801
563 @item :mask-data 802 @item :mask-data
564 (For @code{xbm} and @code{xface}. This specifies a mask to be used with the 803 For @code{xbm} and @code{xface}. This specifies a mask to be used with the
565 bitmap. The format is a list of width, height, and bits, like for 804 bitmap. The format is a list of width, height, and bits, like for
566 @code{:data}.) 805 @code{:data}.
567 806
568 @item :mask-file 807 @item :mask-file
569 (For @code{xbm} and @code{xface}. This specifies a file containing the 808 For @code{xbm} and @code{xface}. This specifies a file containing the
570 mask data. If neither a mask file nor inline mask data is given for an 809 mask data. If neither a mask file nor inline mask data is given for an
571 XBM image, and the XBM image comes from a file, XEmacs will look for a 810 XBM image, and the XBM image comes from a file, XEmacs will look for a
572 mask file with the same name as the image file but with @samp{Mask} or 811 mask file with the same name as the image file but with @samp{Mask} or
573 @samp{msk} appended. For example, if you specify the XBM file 812 @samp{msk} appended. For example, if you specify the XBM file
574 @file{left_ptr} [usually located in @file{/usr/include/X11/bitmaps}], 813 @file{left_ptr} [usually located in @file{/usr/include/X11/bitmaps}],
575 the associated mask file @file{left_ptrmsk} will automatically be picked 814 the associated mask file @file{left_ptrmsk} will automatically be picked
576 up.) 815 up.
577 816
578 @item :hotspot-x 817 @item :hotspot-x
579 @itemx :hotspot-y 818 @itemx :hotspot-y
580 (For @code{xbm} and @code{xface}. These keywords specify a hotspot if 819 For @code{xbm} and @code{xface}. These keywords specify a hotspot if
581 the image is instantiated as a @code{pointer}. Note that if the XBM 820 the image is instantiated as a @code{pointer}. Note that if the XBM
582 image file specifies a hotspot, it will automatically be picked up if no 821 image file specifies a hotspot, it will automatically be picked up if no
583 explicit hotspot is given.) 822 explicit hotspot is given.
584 823
585 @item :color-symbols 824 @item :color-symbols
586 (Only for @code{xpm}. This specifies an alist that maps strings that 825 Only for @code{xpm}. This specifies an alist that maps strings that
587 specify symbolic color names to the actual color to be used for that 826 specify symbolic color names to the actual color to be used for that
588 symbolic color (in the form of a string or a color-specifier object). 827 symbolic color (in the form of a string or a color-specifier object).
589 If this is not specified, the contents of @code{xpm-color-symbols} are 828 If this is not specified, the contents of @code{xpm-color-symbols} are
590 used to generate the alist.) 829 used to generate the alist.
830 @item :resource-id
831 Only for @code{mswindows-resource}. This must be either an integer
832 (which directly specifies a resource number) or a string. Valid strings
833 are
834
835 For bitmaps:
836
837 "close", "uparrow", "dnarrow", "rgarrow", "lfarrow",
838 "reduce", "zoom", "restore", "reduced", "zoomd",
839 "restored", "uparrowd", "dnarrowd", "rgarrowd", "lfarrowd",
840 "mnarrow", "combo", "uparrowi", "dnarrowi", "rgarrowi",
841 "lfarrowi", "size", "btsize", "check", "checkboxes", and
842 "btncorners".
843
844 For cursors:
845
846 "normal", "ibeam", "wait", "cross", "up", "sizenwse",
847 "sizenesw", "sizewe", "sizens", "sizeall", and "no".
848
849 For icons:
850
851 "sample", "hand", "ques", "bang", "note", and "winlogo".
852 @item :resource-type
853 Only for @code{mswindows-resource}. This must be a symbol, either
854 @code{cursor}, @code{icon}, or @code{bitmap}, specifying the type of
855 resource to be retrieved.
856 @item :face
857 Only for @code{inherit}. This specifies the face to inherit from. For
858 widgets this also specifies the face to use for display. It defaults to
859 gui-element-face.
591 @end table 860 @end table
861
862 Keywords accepted as menu item specs are also accepted by widgets.
863 These are @code{:selected}, @code{:active}, @code{:suffix},
864 @code{:keys}, @code{:style}, @code{:filter}, @code{:config},
865 @code{:included}, @code{:key-sequence}, @code{:accelerator},
866 @code{:label} and @code{:callback}.
592 867
593 If instead of a vector, the instantiator is a string, it will be 868 If instead of a vector, the instantiator is a string, it will be
594 converted into a vector by looking it up according to the specs in the 869 converted into a vector by looking it up according to the specs in the
595 @code{console-type-image-conversion-list} for the console type of 870 @code{console-type-image-conversion-list} for the console type of
596 the domain (usually a window; sometimes a frame or device) over which 871 the domain (usually a window; sometimes a frame or device) over which
769 @defun nothing-image-instance-p object 1044 @defun nothing-image-instance-p object
770 This function returns non-@code{nil} if @var{object} is an image 1045 This function returns non-@code{nil} if @var{object} is an image
771 instance of type @code{nothing}. 1046 instance of type @code{nothing}.
772 @end defun 1047 @end defun
773 1048
1049 @defun widget-image-instance-p object
1050 Return t if @var{object} is an image instance of type @code{widget}.
1051 @end defun
1052
774 @node Image Instance Functions 1053 @node Image Instance Functions
775 @subsubsection Image Instance Functions 1054 @subsubsection Image Instance Functions
776 1055
777 @defun make-image-instance data &optional device dest-types no-error 1056 @defun make-image-instance data &optional domain dest-types no-error
778 This function creates a new image-instance object. 1057 This function creates a new image-instance object.
779 1058
780 @var{data} is an image instantiator, which describes the image 1059 @var{data} is an image instantiator, which describes the image
781 (@pxref{Image Specifiers}). 1060 (@pxref{Image Specifiers}).
782 1061
788 @code{color-pixmap}, followed by @code{pointer}. For the other normal 1067 @code{color-pixmap}, followed by @code{pointer}. For the other normal
789 image formats, the most natural types are @code{color-pixmap}, followed 1068 image formats, the most natural types are @code{color-pixmap}, followed
790 by @code{mono-pixmap}, followed by @code{pointer}. For the string and 1069 by @code{mono-pixmap}, followed by @code{pointer}. For the string and
791 formatted-string formats, the most natural types are @code{text}, 1070 formatted-string formats, the most natural types are @code{text},
792 followed by @code{mono-pixmap} (not currently implemented), followed by 1071 followed by @code{mono-pixmap} (not currently implemented), followed by
793 @code{color-pixmap} (not currently implemented). The other formats can 1072 @code{color-pixmap} (not currently implemented). For MS Windows
794 only be instantiated as one type. (If you want to control more 1073 resources, the most natural type for pointer resources is
795 specifically the order of the types into which an image is instantiated, 1074 @code{pointer}, and for the others it's @code{color-pixmap}. The other
796 just call @code{make-image-instance} repeatedly until it succeeds, 1075 formats can only be instantiated as one type. (If you want to control
797 passing less and less preferred destination types each time. 1076 more specifically the order of the types into which an image is
1077 instantiated, just call @code{make-image-instance} repeatedly until it
1078 succeeds, passing less and less preferred destination types each time.
798 1079
799 If @var{dest-types} is omitted, all possible types are allowed. 1080 If @var{dest-types} is omitted, all possible types are allowed.
1081
1082 @var{domain} specifies the domain to which the image instance will be
1083 attached. This domain is termed the @dfn{governing domain}. The type
1084 of the governing domain depends on the image instantiator
1085 format. (Although, more correctly, it should probably depend on the
1086 image instance type.) For example, pixmap image instances are specific
1087 to a device, but widget image instances are specific to a particular
1088 XEmacs window because in order to display such a widget when two windows
1089 onto the same buffer want to display the widget, two separate underlying
1090 widgets must be created. (That's because a widget is actually a child
1091 window-system window, and all window-system windows have a unique
1092 existence on the screen.) This means that the governing domain for a
1093 pixmap image instance will be some device (most likely, the only
1094 existing device), whereas the governing domain for a widget image
1095 instance will be some XEmacs window.
1096
1097 If you specify an overly general @var{domain} (e.g. a frame when a
1098 window was wanted), an error is signaled. If you specify an overly
1099 specific @var{domain} (e.g. a window when a device was wanted), the
1100 corresponding general domain is fetched and used instead. For
1101 @code{make-image-instance}, it makes no difference whether you specify
1102 an overly specific domain or the properly general domain derived from
1103 it. However, it does matter when creating an image instance by
1104 instantiating a specifier or glyph (e.g. with
1105 @code{glyph-image-instance}), because the more specific domain causes
1106 spec lookup to start there and proceed to more general domains. (It
1107 would also matter when creating an image instance with an instantiator
1108 format of @code{inherit}, but we currently disallow this. #### We should
1109 fix this.)
1110 n
1111 If omitted, @var{domain} defaults to the selected window.
800 1112
801 @var{no-error} controls what happens when the image cannot be generated. 1113 @var{no-error} controls what happens when the image cannot be generated.
802 If @var{nil}, an error message is generated. If @var{t}, no messages 1114 If @var{nil}, an error message is generated. If @var{t}, no messages
803 are generated and this function returns @var{nil}. If anything else, a 1115 are generated and this function returns @var{nil}. If anything else, a
804 warning message is generated and this function returns @var{nil}. 1116 warning message is generated and this function returns @var{nil}.
817 1129
818 @defun image-instance-name image-instance 1130 @defun image-instance-name image-instance
819 This function returns the name of the given image instance. 1131 This function returns the name of the given image instance.
820 @end defun 1132 @end defun
821 1133
1134 @defun image-instance-domain image-instance
1135
1136 Return the governing domain of the given @var{image-instance}. The
1137 governing domain of an image instance is the domain that the image
1138 instance is specific to. It is @emph{NOT} necessarily the domain that
1139 was given to the call to @code{specifier-instance} that resulted in the
1140 creation of this image instance. See @code{make-image-instance} for
1141 more information on governing domains.
1142 @end defun
1143
1144
822 @defun image-instance-string image-instance 1145 @defun image-instance-string image-instance
823 This function returns the string of the given image instance. This will 1146 This function returns the string of the given image instance. This will
824 only be non-@code{nil} for text image instances. 1147 only be non-@code{nil} for text image instances.
825 @end defun 1148 @end defun
826 1149