comparison man/lispref/glyphs.texi @ 408:501cfd01ee6d r21-2-34

Import from CVS: tag r21-2-34
author cvs
date Mon, 13 Aug 2007 11:18:11 +0200
parents 2f8bb876ab1d
children de805c49cfc1
comparison
equal deleted inserted replaced
407:ed6218a7d4d3 408:501cfd01ee6d
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 instace, 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
514 @item font 710 @item font
515 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
516 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]}.
517 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
518 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}.
519 @item subwindow 723 @item subwindow
520 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}.
521 @item autodetect 758 @item autodetect
522 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,
523 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,
524 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
525 pixmap or pointer will be created. [This includes picking up any 762 pixmap or pointer will be created. [This includes picking up any
526 specified hotspot or associated mask file.] Otherwise, if @code{pointer} 763 specified hotspot or associated mask file.] Otherwise, if @code{pointer}
527 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
528 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.
529 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,
530 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}.
531 @end table 771 @end table
532 772
533 The valid keywords are: 773 The valid keywords are:
534 774
535 @table @code 775 @table @code
585 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
586 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
587 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).
588 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
589 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.
590 @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}.
591 867
592 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
593 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
594 @code{console-type-image-conversion-list} for the console type of 870 @code{console-type-image-conversion-list} for the console type of
595 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
768 @defun nothing-image-instance-p object 1044 @defun nothing-image-instance-p object
769 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
770 instance of type @code{nothing}. 1046 instance of type @code{nothing}.
771 @end defun 1047 @end defun
772 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
773 @node Image Instance Functions 1053 @node Image Instance Functions
774 @subsubsection Image Instance Functions 1054 @subsubsection Image Instance Functions
775 1055
776 @defun make-image-instance data &optional device dest-types no-error 1056 @defun make-image-instance data &optional domain dest-types no-error
777 This function creates a new image-instance object. 1057 This function creates a new image-instance object.
778 1058
779 @var{data} is an image instantiator, which describes the image 1059 @var{data} is an image instantiator, which describes the image
780 (@pxref{Image Specifiers}). 1060 (@pxref{Image Specifiers}).
781 1061
787 @code{color-pixmap}, followed by @code{pointer}. For the other normal 1067 @code{color-pixmap}, followed by @code{pointer}. For the other normal
788 image formats, the most natural types are @code{color-pixmap}, followed 1068 image formats, the most natural types are @code{color-pixmap}, followed
789 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
790 formatted-string formats, the most natural types are @code{text}, 1070 formatted-string formats, the most natural types are @code{text},
791 followed by @code{mono-pixmap} (not currently implemented), followed by 1071 followed by @code{mono-pixmap} (not currently implemented), followed by
792 @code{color-pixmap} (not currently implemented). The other formats can 1072 @code{color-pixmap} (not currently implemented). For MS Windows
793 only be instantiated as one type. (If you want to control more 1073 resources, the most natural type for pointer resources is
794 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
795 just call @code{make-image-instance} repeatedly until it succeeds, 1075 formats can only be instantiated as one type. (If you want to control
796 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.
797 1079
798 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.
799 1112
800 @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.
801 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
802 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
803 warning message is generated and this function returns @var{nil}. 1116 warning message is generated and this function returns @var{nil}.
816 1129
817 @defun image-instance-name image-instance 1130 @defun image-instance-name image-instance
818 This function returns the name of the given image instance. 1131 This function returns the name of the given image instance.
819 @end defun 1132 @end defun
820 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
821 @defun image-instance-string image-instance 1145 @defun image-instance-string image-instance
822 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
823 only be non-@code{nil} for text image instances. 1147 only be non-@code{nil} for text image instances.
824 @end defun 1148 @end defun
825 1149