diff options
Diffstat (limited to 'Xlibscm.texi')
-rw-r--r-- | Xlibscm.texi | 1955 |
1 files changed, 1955 insertions, 0 deletions
diff --git a/Xlibscm.texi b/Xlibscm.texi new file mode 100644 index 0000000..59e6c3c --- /dev/null +++ b/Xlibscm.texi @@ -0,0 +1,1955 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename Xlibscm.info +@settitle Xlibscm +@include version.txi +@setchapternewpage on +@c Choices for setchapternewpage are {on,off,odd}. +@paragraphindent 0 +@defcodeindex ft +@syncodeindex ft cp +@c %**end of header + +@dircategory The Algorithmic Language Scheme +@direntry +* Xlibscm: (Xlibscm). SCM Language X Interface. +@end direntry + +@iftex +@finalout +@c DL: lose the egregious vertical whitespace, esp. around examples +@c but paras in @defun-like things don't have parindent +@parskip 4pt plus 1pt +@end iftex + +@titlepage +@title Xlibscm +@subtitle SCM Language X Interface +@subtitle Version @value{SCMVERSION} +@author by Aubrey Jaffer + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1990-1999 Free Software Foundation + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the author. +@end titlepage + +@node Top, Xlibscm, (dir), (dir) + + +@ifinfo +This manual documents the X - SCM Language X Interface. The most recent +information about SCM can be found on SCM's @dfn{WWW} home page: + +@center @url{http://swissnet.ai.mit.edu/~jaffer/SCM.html} + + +Copyright (C) 1990-1999 Free Software Foundation + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the author. +@end ifinfo + +@menu +* Xlibscm:: +* Display:: +* Screen:: +* Window:: +* Window Visibility:: +* Graphics Context:: +* Cursor:: +* Colormap:: +* Rendering:: +* Event:: +* Index:: +@end menu + +@node Xlibscm, Display, Top, Top +@chapter Xlibscm + +@dfn{Xlibscm} is a SCM interface to @dfn{X}. +@cindex X +The +@ifset html +<A HREF="http://www.x.org/"> +@end ifset +X Window System +@ifset html +</A> +@end ifset +is a network-transparent window system that was +designed at MIT. +@ifset html +<A HREF="scm_toc.html"> +@end ifset +SCM +@ifset html +</A> +@end ifset +is a portable Scheme implementation written in C. +The interface can be compiled into SCM or, on those platforms supporting +dynamic linking, compiled separately and loaded with @code{(require +'Xlib)}. +@ftindex Xlib + +@iftex +@noindent +The most recent information about SCM can be found on SCM's @dfn{WWW} +home page: +@center @url{http://swissnet.ai.mit.edu/~jaffer/SCM.html} +@end iftex + +Much of this X documentation is dervied from: + +@center Xlib - C Language X Interface +@center X Consortium Standard +@center X Version 11, Release 6.3 + +The X Window System is a trademark of X Consortium, Inc. + +TekHVC is a trademark of Tektronix, Inc. + + + +Copyright (C) 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X +Consortium + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from +the X Consortium. + + + + +Copyright (C) 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright (C) 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright +notice and this permission notice appear in all copies, and that the +names of Digital and Tektronix not be used in in advertising or +publicity pertaining to this documentation without specific, written +prior permission. Digital and Tektronix makes no representations about +the suitability of this documentation for any purpose. It is provided +``as is'' without express or implied warranty. + + +@node Display, Screen, Xlibscm, Top +@chapter Display + +@defun x:open-display display-name +@var{display-name} Specifies the hardware display name, which determines +the display and communications domain to be used. On a POSIX-conformant +system, if the display-name is #f, it defaults to the value of the +@var{DISPLAY} environment variable. + +The encoding and interpretation of @var{display-name} is +implementation-dependent. On POSIX-conformant systems, the +@var{display-name} or @var{DISPLAY} environment variable can be a string +in the format: + +@defspec hostname:number.screen-number + +@var{hostname} specifies the name of the host machine on which the +display is physically attached. Follow the @var{hostname} with either a +single colon (:) or a double colon (::). + +@var{number} specifies the number of the display server on that host +machine. You may optionally follow this display number with a period +(.). A single CPU can have more than one display. Multiple displays +are usually numbered starting with zero. + +@var{screen-number} specifies the screen to be used on that server. +Multiple screens can be controlled by a single X server. The +@var{screen-number} sets an internal variable that can be accessed by +using the x:default-screen procedure. +@end defspec +@end defun + +@defun x:close display +@var{display} specifies the connection to the X server. + +The @code{x:close} function closes the connection to the X server for +the @var{display} specified and destroys all windows, resource IDs +(Window, Font, Pixmap, Colormap, Cursor, and GContext), or other +resources that the client has created on this display, unless the +close-down mode of the resource has been changed (see +@code{x:set-close-down-mode}). Therefore, these windows, resource IDs, +and other resources should not be used again or an error will be +generated. Before exiting, you should call @var{x:close-display} or +@var{x:flush} explicitly so that any pending errors are reported. +@end defun + +@defun x:protocol-version display +Returns cons of the major version number (11) of the X protocol +associated with the connected @var{display} and the minor protocol +revision number of the X server. +@end defun + +@defun x:server-vendor display +Returns a string that provides some identification of the owner of the X +server implementation. The contents of the string are +implementation-dependent. +@end defun + +@defun x:vendor-release display +Returns a number related to a vendor's release of the X server. +@end defun + + +@node Screen, Window, Display, Top +@chapter Screen + +A display consists of one or more @dfn{Screen}s. Each screen has a +@dfn{root-window}, @dfn{default-graphics-context}, @dfn{default-visual}, +and @dfn{colormap}. + +@defun x:screen-count display +Returns the number of available screens. +@end defun + +@defun x:default-screen display +Returns the default screen number specified by the @code{x:open-display} +function. Use this screen number in applications which will use only a +single screen. +@end defun + +@defun x:root-window display screen-number +@defunx x:root-window display +@var{screen-number}, if givien, specifies the appropriate screen number +on the host server. Otherwise the default-screen for @var{display} is +used. + +Returns the root window for the specified @var{screen-number}. Use +@code{x:root-window} for functions that need a drawable of a particular +screen or for creating top-level windows. + +@defunx x:root-window window +Returns the root window for the specified @var{window}'s screen. +@end defun + +@defun x:default-colormap display screen-number +@defunx x:default-colormap display +@defunx x:default-colormap window +Returns the default colormap of the specified screen. +@end defun + +@defun x:default-gc display screen-number +@defunx x:default-gc display +@defunx x:default-gc window +Returns the default graphics-context of the specified screen. +@end defun + +@defun x:default-depths display screen-number +@defunx x:default-depths display +@defunx x:default-depths window +Returns a vector of depths supported by the specified screen. +@end defun + +The @dfn{Visual} type describes possible colormap depths and +arrangements. + +@defun x:default-visual display screen-number +@defunx x:default-visual display +@defunx x:default-visual window +Returns the default Visual type for the specified screen. + +@cindex visual +@cindex Visual +@end defun + +@defun x:make-visual display depth class +@defunx x:make-visual window depth class + +The integer @var{depth} specifies the number of bits per pixel. +The @var{class} argument specifies one of the possible +visual classes for a screen: +@itemize @bullet +@item x:Static-Gray +@item x:Static-Color +@item x:True-Color +@item x:Gray-Scale +@item x:Pseudo-Color +@item x:Direct-Color +@end itemize + +@code{X:make-visual} returns a visual type for the screen specified by +@var{display} or @var{window} if successful; #f if not. + +@end defun + +@defun x:screen-cells display screen-number +@defunx x:screen-cells display +@defunx x:screen-cells window +Returns the number of entries in the default colormap. +@end defun + +@defun x:screen-depth display screen-number +@defunx x:screen-depth display +@defunx x:screen-depth window +Returns the depth of the root window of the specified screen. + +@cindex depth +The @dfn{depth} of a window or pixmap is the number of bits per pixel it has. +The @dfn{depth} of a graphics context is the depth of the drawables it can be +used in conjunction with graphics output. +@end defun + +@defun x:screen-size display screen-number +@defunx x:screen-size display +@defunx x:screen-size window +Returns a list of integer height and width of the screen in pixels. +@end defun + +@defun x:screen-dimensions display screen-number +@defunx x:screen-dimensions display +@defunx x:screen-dimensions window +Returns a list of integer height and width of the screen in millimeters. +@end defun + +@defun x:screen-white display screen-number +@defunx x:screen-white display +@defunx x:screen-white window +Returns the white pixel value of the specified screen. +@end defun + +@defun x:screen-black display screen-number +@defunx x:screen-black display +@defunx x:screen-black window +Returns the black pixel value of the specified screen. +@end defun + + +@node Window, Window Visibility, Screen, Top +@chapter Window + +@cindex Drawable +@cindex drawable +A @dfn{Drawable} is either a window or pixmap. + +@defun x:create-window window position size border-width depth class visual field-name value @dots{} +Creates and returns an unmapped Input-Output subwindow for a specified +parent @var{window} and causes the X server to generate a CreateNotify +event. The created window is placed on top in the stacking order with +respect to siblings. Any part of the window that extends outside its +parent @var{window} is clipped. The @var{border-width} for an +x:Input-Only window must be zero. + +The coordinate system has the X axis horizontal and the Y axis vertical +with the origin [0, 0] at the upper-left corner. Coordinates are +integral, in terms of pixels, and coincide with pixel centers. Each +window and pixmap has its own coordinate system. For a window, the +origin is inside the border at the inside, upper-left corner. + +@var{Class} can be x:Input-Output, x:Input-Only, or x:Copy-From-Parent. +For class x:Input-Output, the @var{visual} type and @var{depth} must be +a combination supported for the screen. The @var{depth} need not be the +same as the parent, but the parent must not be a window of class +x:Input-Only. For an x:Input-Only window, the @var{depth} must be zero, +and the @var{visual} must be one supported by the screen. + +The returned window will have the attributes specified by +@var{field-name}s and @var{value}. + +@defunx x:create-window window position size border-width border background +The returned window inherits its depth, class, and visual from its +parent. All other window attributes, except @var{background} and +@var{border}, have their default values. +@end defun + +@defun x:create-pixmap drawable size depth +@defunx x:create-pixmap display size depth + +@var{size} is a list, vector, or pair of nonzero integers specifying the width +and height desired in the new pixmap. + +@var{x:create-pixmap} returns a new pixmap of the width, height, and +@var{depth} specified. It is valid to pass an x:Input-Only window to the +drawable argument. The @var{depth} argument must be one of the depths +supported by the screen of the specified @var{drawable}. +@end defun + +@defun x:close window +Destroys the specified @var{window} as well as all of its subwindows and +causes the X server to generate a DestroyNotify event for each window. +The window should not be used again. If the window specified by the +@var{window} argument is mapped, it is unmapped automatically. The +ordering of the DestroyNotify events is such that for any given window +being destroyed, DestroyNotify is generated on any inferiors of the +window before being generated on the window itself. The ordering among +siblings and across subhierarchies is not otherwise constrained. If the +@var{window} you specified is a root window, an error is signaled. +Destroying a mapped @var{window} will generate x:Expose events on other +windows that were obscured by the window being destroyed. +@end defun + +@defun x:close pixmap +Deletes the association between the @var{pixmap} and its storage. The X +server frees the pixmap storage when there are no references to it. +@end defun + +@defun x:window-geometry drawable +Returns a list of: + +@table @asis +@item coordinates +@code{cons} of x and y coordinates that define the location of the +@var{drawable}. For a window, these coordinates specify the upper-left +outer corner relative to its parent's origin. For pixmaps, these +coordinates are always zero. +@item size +@code{cons} of the @var{drawable}'s dimensions (width and height). For +a window, these dimensions specify the inside size, not including the +border. +@item border-width +The border width in pixels. If the @var{drawable} is a pixmap, this is +zero. +@item depth +The depth of the @var{drawable} (bits per pixel for the object). +@end table +@end defun + +@defun x:window-set! window field-name value @dots{} +Changes the components specified by @var{field-name}s for the specified +@var{window}. The restrictions are the same as for +@code{x:create-window}. The order in which components are verified and +altered is server dependent. If an error occurs, a subset of the +components may have been altered. +@end defun + +@heading Window Attributes + +@noindent +The @code{x:create-window} and @code{x:window-set!} procedures take five +and one argument (respectively) followed by pairs of arguments, where +the first is one of the property-name symbols (or its top-level value) +listed below; and the second is the value to associate with that +property. + +@defvr Attribute x:CW-Back-Pixmap +Sets the background pixmap of the @var{window} to the specified pixmap. +The background pixmap can immediately be freed if no further explicit +references to it are to be made. If x:Parent-Relative is specified, the +background pixmap of the window's parent is used, or on the root window, +the default background is restored. It is an error to perform this +operation on an x:Input-Only window. If the background is set to #f or +None, the window has no defined background. +@end defvr + +@defvr Attribute x:CW-Back-Pixel +Sets the background of the @var{window} to the specified pixel value. +Changing the background does not cause the @var{window} contents to be +changed. It is an error to perform this operation on an x:Input-Only +window. +@end defvr + +@defvr Attribute x:CW-Border-Pixmap +Sets the border pixmap of the @var{window} to the pixmap you specify. +The border pixmap can be freed if no further explicit references to it +are to be made. If you specify x:Copy-From-Parent, a copy of the parent +window's border pixmap is used. It is an error to perform this +operation on an x:Input-Only @var{window}. +@end defvr + +@defvr Attribute x:CW-Border-Pixel +Sets the border of the @var{window} to the pixel @var{value}. It is an +error to perform this operation on an x:Input-Only window. +@end defvr + +@defvr Attribute x:CW-Bit-Gravity +@defvrx Attribute x:CW-Win-Gravity +The bit gravity of a window defines which region of the window should be +retained when an x:Input-Output window is resized. The default value +for the bit-gravity attribute is x:Forget-Gravity. The window gravity +of a window allows you to define how the x:Input-Output or x:Input-Only +window should be repositioned if its parent is resized. The default +value for the win-gravity attribute is x:North-West-Gravity. + +If the inside width or height of a window is not changed and if the +window is moved or its border is changed, then the contents of the +window are not lost but move with the window. Changing the inside width +or height of the window causes its contents to be moved or lost +(depending on the bit-gravity of the window) and causes children to be +reconfigured (depending on their win-gravity). For a change of width +and height, the (x, y) pairs are defined: + +@multitable @columnfractions .5 .5 +@item Gravity Direction +@tab Coordinates +@item x:North-West-Gravity +@tab (0, 0) +@item x:North-Gravity +@tab (Width/2, 0) +@item x:North-East-Gravity +@tab (Width, 0) +@item x:West-Gravity +@tab (0, Height/2) +@item x:Center-Gravity +@tab (Width/2, Height/2) +@item x:East-Gravity +@tab (Width, Height/2) +@item x:South-West-Gravity +@tab (0, Height) +@item x:South-Gravity +@tab (Width/2, Height) +@item x:South-East-Gravity +@tab (Width, Height) +@end multitable + +When a window with one of these bit-gravity values is resized, the +corresponding pair defines the change in position of each pixel in the +window. When a window with one of these win-gravities has its parent +window resized, the corresponding pair defines the change in position of +the window within the parent. When a window is so repositioned, a +x:Gravity-Notify event is generated (see section 10.10.5). + +A bit-gravity of x:Static-Gravity indicates that the contents or origin +should not move relative to the origin of the root window. If the +change in size of the window is coupled with a change in position (x, +y), then for bit-gravity the change in position of each pixel is (-x, +-y), and for win-gravity the change in position of a child when its +parent is so resized is (-x, -y). Note that x:Static-Gravity still only +takes effect when the width or height of the window is changed, not when +the window is moved. + +A bit-gravity of x:Forget-Gravity indicates that the window's contents +are always discarded after a size change, even if a backing store or +save under has been requested. The window is tiled with its background +and zero or more x:Expose events are generated. If no background is +defined, the existing screen contents are not altered. Some X servers +may also ignore the specified bit-gravity and always generate x:Expose +events. + +The contents and borders of inferiors are not affected by their parent's +bit-gravity. A server is permitted to ignore the specified bit-gravity +and use x:Forget-Gravity instead. + +A win-gravity of x:Unmap-Gravity is like x:North-West-Gravity (the +window is not moved), except the child is also unmapped when the parent +is resized, and an x:Unmap-Notify event is generated. +@end defvr + +@defvr Attribute x:CW-Backing-Store +Some implementations of the X server may choose to maintain the contents +of x:Input-Output windows. If the X server maintains the contents of a +window, the off-screen saved pixels are known as backing store. The +backing store advises the X server on what to do with the contents of a +window. The backing-store attribute can be set to x:Not-Useful +(default), x:When-Mapped, or x:Always. A backing-store attribute of +x:Not-Useful advises the X server that maintaining contents is +unnecessary, although some X implementations may still choose to +maintain contents and, therefore, not generate x:Expose events. A +backing-store attribute of x:When-Mapped advises the X server that +maintaining contents of obscured regions when the window is mapped would +be beneficial. In this case, the server may generate an x:Expose event +when the window is created. A backing-store attribute of x:Always +advises the X server that maintaining contents even when the window is +unmapped would be beneficial. Even if the window is larger than its +parent, this is a request to the X server to maintain complete contents, +not just the region within the parent window boundaries. While the X +server maintains the window's contents, x:Expose events normally are not +generated, but the X server may stop maintaining contents at any time. + +When the contents of obscured regions of a window are being maintained, +regions obscured by noninferior windows are included in the destination +of graphics requests (and source, when the window is the source). +However, regions obscured by inferior windows are not included. +@end defvr + +@defvr Attribute x:CW-Backing-Planes +@defvrx Attribute x:CW-Backing-Pixel +You can set backing planes to indicate (with bits set to 1) which bit +planes of an x:Input-Output window hold dynamic data that must be +preserved in backing store and during save unders. The default value +for the backing-planes attribute is all bits set to 1. You can set +backing pixel to specify what bits to use in planes not covered by +backing planes. The default value for the backing-pixel attribute is +all bits set to 0. The X server is free to save only the specified bit +planes in the backing store or the save under and is free to regenerate +the remaining planes with the specified pixel value. Any extraneous +bits in these values (that is, those bits beyond the specified depth of +the window) may be simply ignored. If you request backing store or save +unders, you should use these members to minimize the amount of +off-screen memory required to store your window. +@end defvr + +@defvr Attribute x:CW-Override-Redirect +To control window placement or to add decoration, a window manager often +needs to intercept (redirect) any map or configure request. Pop-up +windows, however, often need to be mapped without a window manager +getting in the way. To control whether an x:Input-Output or +x:Input-Only window is to ignore these structure control facilities, use +the override-redirect flag. + +The override-redirect flag specifies whether map and configure requests +on this window should override a x:Substructure-Redirect-Mask on the +parent. You can set the override-redirect flag to #t or #f (default). +Window managers use this information to avoid tampering with pop-up +windows. +@end defvr + +@defvr Attribute x:CW-Save-Under +Some server implementations may preserve contents of x:Input-Output windows +under other x:Input-Output windows. This is not the same as preserving the +contents of a window for you. You may get better visual appeal if +transient windows (for example, pop-up menus) request that the system +preserve the screen contents under them, so the temporarily obscured +applications do not have to repaint. + +You can set the save-under flag to True or False (default). If +save-under is True, the X server is advised that, when this window is +mapped, saving the contents of windows it obscures would be beneficial. +@end defvr + +@defvr Attribute x:CW-Event-Mask +The event mask defines which events the client is interested in for this +x:Input-Output or x:Input-Only window (or, for some event types, +inferiors of this window). The event mask is the bitwise inclusive OR +of zero or more of the valid event mask bits. You can specify that no +maskable events are reported by setting x:No-Event-Mask (default). + +The following table lists the event mask constants you can pass to the +event-mask argument and the circumstances in which you would want to +specify the event mask: + +@multitable @columnfractions .45 .55 +@item Event Mask +@tab Circumstances +@item x:No-Event-Mask +@tab No events wanted +@item x:Key-Press-Mask +@tab Keyboard down events wanted +@item x:Key-Release-Mask +@tab Keyboard up events wanted +@item x:Button-Press-Mask +@tab Pointer button down events wanted +@item x:Button-Release-Mask +@tab Pointer button up events wanted +@item x:Enter-Window-Mask +@tab Pointer window entry events wanted +@item x:Leave-Window-Mask +@tab Pointer window leave events wanted +@item x:Pointer-Motion-Mask +@tab Pointer motion events wanted +@item x:Pointer-Motion-Hint-Mask +@tab +If x:Pointer-Motion-Hint-Mask is selected in combination with one or +more motion-masks, the X server is free to send only one x:Motion-Notify +event (with the is_hint member of the X:Pointer-Moved-Event structure +set to x:Notify-Hint) to the client for the event window, until either +the key or button state changes, the pointer leaves the event window, or +the client calls X:Query-Pointer or X:Get-Motion-Events. The server +still may send x:Motion-Notify events without is_hint set to +x:Notify-Hint. +@item x:Button1-Motion-Mask +@tab Pointer motion while button 1 down +@item x:Button2-Motion-Mask +@tab Pointer motion while button 2 down +@item x:Button3-Motion-Mask +@tab Pointer motion while button 3 down +@item x:Button4-Motion-Mask +@tab Pointer motion while button 4 down +@item x:Button5-Motion-Mask +@tab Pointer motion while button 5 down +@item x:Button-Motion-Mask +@tab Pointer motion while any button down +@item x:Keymap-State-Mask +@tab Keyboard state wanted at window entry and focus in +@item x:Exposure-Mask +@tab Any exposure wanted +@item x:Visibility-Change-Mask +@tab Any change in visibility wanted +@item x:Structure-Notify-Mask +@tab Any change in window structure wanted +@item x:Resize-Redirect-Mask +@tab Redirect resize of this window +@item x:Substructure-Notify-Mask +@tab Substructure notification wanted +@item x:Substructure-Redirect-Mask +@tab Redirect structure requests on children +@item x:Focus-Change-Mask +@tab Any change in input focus wanted +@item x:Property-Change-Mask +@tab Any change in property wanted +@item x:Colormap-Change--Mask +@tab Any change in colormap wanted +@item x:Owner-Grab-Button--Mask +@tab Automatic grabs should activate with owner_events set to True +@end multitable + +@end defvr + +@defvr Attribute x:CW-Dont-Propagate +The do-not-propagate-mask attribute defines which events should not be +propagated to ancestor windows when no client has the event type +selected in this x:Input-Output or x:Input-Only window. The +do-not-propagate-mask is the bitwise inclusive OR of zero or more of the +following masks: x:Key-Press, x:Key-Release, x:Button-Press, +x:Button-Release, x:Pointer-Motion, x:Button1Motion, x:Button2Motion, +x:Button3Motion, x:Button4Motion, x:Button5Motion, and x:Button-Motion. +You can specify that all events are propagated by setting +x:No-Event-Mask (default). +@end defvr + +@defvr Attribute x:CW-Colormap +The colormap attribute specifies which colormap best reflects the true +colors of the x:Input-Output window. The colormap must have the same +visual type as the window. X servers capable of supporting multiple +hardware colormaps can use this information, and window managers can use +it for calls to X:Install-Colormap. You can set the colormap attribute +to a colormap or to x:Copy-From-Parent (default). + +If you set the colormap to x:Copy-From-Parent, the parent window's +colormap is copied and used by its child. However, the child window +must have the same visual type as the parent. The parent window must +not have a colormap of x:None. The colormap is copied by sharing the +colormap object between the child and parent, not by making a complete +copy of the colormap contents. Subsequent changes to the parent +window's colormap attribute do not affect the child window. +@end defvr + +@defvr Attribute x:CW-Cursor +The cursor attribute specifies which cursor is to be used when the +pointer is in the x:Input-Output or x:Input-Only window. You can set +the cursor to a cursor or x:None (default). + +If you set the cursor to x:None, the parent's cursor is used when the +pointer is in the x:Input-Output or x:Input-Only window, and any change +in the parent's cursor will cause an immediate change in the displayed +cursor. On the root window, the default cursor is restored. +@end defvr + + +@node Window Visibility, Graphics Context, Window, Top +@chapter Window Visibility + +@noindent +In X parlance, a window which is hidden even when not obscured by other +windows is @dfn{unmapped}; one which +@cindex map +@cindex unmap +@cindex mapped +@cindex unmapped +shows is @dfn{mapped}. It is an unfortunate name-collision with Scheme, +and is ingrained in the attribute names. + +@defun x:map-window window +Maps the @var{window} and all of its subwindows that have had map +requests. Mapping a window that has an unmapped ancestor does not +display the window but marks it as eligible for display when the +ancestor becomes mapped. Such a window is called unviewable. When all +its ancestors are mapped, the window becomes viewable and will be +visible on the screen if it is not obscured by another window. This +function has no effect if the @var{window} is already mapped. + +If the override-redirect of the window is False and if some other client +has selected x:Substructure-Redirect-Mask on the parent window, then the X +server generates a MapRequest event, and the @code{x:map-window} +function does not map the @var{window}. Otherwise, the @var{window} is +mapped, and the X server generates a MapNotify event. + +If the @var{window} becomes viewable and no earlier contents for it are +remembered, the X server tiles the @var{window} with its background. If +the window's background is undefined, the existing screen contents are +not altered, and the X server generates zero or more x:Expose events. If +backing-store was maintained while the @var{window} was unmapped, no +x:Expose events are generated. If backing-store will now be maintained, a +full-window exposure is always generated. Otherwise, only visible +regions may be reported. Similar tiling and exposure take place for any +newly viewable inferiors. + +If the window is an Input-Output window, @code{x:map-window} generates +x:Expose events on each Input-Output window that it causes to be displayed. +If the client maps and paints the window and if the client begins +processing events, the window is painted twice. To avoid this, first +ask for x:Expose events and then map the window, so the client processes +input events as usual. The event list will include x:Expose for each +window that has appeared on the screen. The client's normal response to +an x:Expose event should be to repaint the window. This method usually +leads to simpler programs and to proper interaction with window +managers. +@end defun + +@defun x:map-raised window +This procedure is similar to @code{x:map-window} in that it maps the +@var{window} and all of its subwindows that have had map requests. +However, it also raises the specified @var{window} to the top of the +stack. +@end defun + +@defun x:map-subwindows window +Maps all subwindows of a specified @var{window} in top-to-bottom +stacking order. The X server generates x:Expose events on each newly +displayed window. This may be much more efficient than mapping many +windows one at a time because the server needs to perform much of the +work only once, for all of the windows, rather than for each window. +@end defun + +@defun x:unmap-window window +Unmaps the specified @var{window} and causes the X server to generate an +UnmapNotify event. If the specified @var{window} is already unmapped, +@code{x:unmap-window} has no effect. Normal exposure processing on +formerly obscured windows is performed. Any child window will no longer +be visible until another map call is made on the parent. In other +words, the subwindows are still mapped but are not visible until the +parent is mapped. Unmapping a @var{window} will generate x:Expose events +on windows that were formerly obscured by it. +@end defun + +@defun x:unmap-subwindows window +Unmaps all subwindows for the specified @var{window} in bottom-to-top +stacking order. It causes the X server to generate an UnmapNotify event +on each subwindow and x:Expose events on formerly obscured windows. Using +this function is much more efficient than unmapping multiple windows one +at a time because the server needs to perform much of the work only +once, for all of the windows, rather than for each window. +@end defun + +@node Graphics Context, Cursor, Window Visibility, Top +@chapter Graphics Context + +@noindent +Most attributes of graphics operations are stored in @dfn{GC}s. These +include line width, line style, plane mask, foreground, background, +tile, stipple, clipping region, end style, join style, and so on. +Graphics operations (for example, drawing lines) use these values to +determine the actual drawing operation. + +@defun x:create-gc drawable field-name value @dots{} +Creates and returns graphics context. The graphics context can be used +with any destination drawable having the same root and depth as the +specified @var{drawable}. +@end defun + +@defun x:gc-set! graphics-context field-name value @dots{} +Changes the components specified by @var{field-name}s for the specified +@var{graphics-context}. The restrictions are the same as for +@code{x:create-gc}. The order in which components are verified and +altered is server dependent. If an error occurs, a subset of the +components may have been altered. +@end defun + +@defun x:copy-gc-fields! gcontext-src gcontext-dst field-name @dots{} +Copies the components specified by @var{field-name}s from +@var{gcontext-src} to @var{gcontext-dst}. @var{Gcontext-src} and +@var{gcontext-dst} must have the same root and depth. +@end defun + +@defun x:gc-ref graphics-context field-name @dots{} +Returns a list of the components specified by @var{field-name}s @dots{} +from the specified @var{graphics-context}. +@end defun + +@heading GC Attributes + +@noindent +Both @code{x:create-gc} and @code{x:change-gc} take one argument +followed by pairs of arguments, where the first is one of the +property-name symbols (or its top-level value) listed below; and the +second is the value to associate with that property. + +@defvr Attribute x:GC-Function +The function attributes of a GC are used when you update a section of a +drawable (the destination) with bits from somewhere else (the source). +The function in a GC defines how the new destination bits are to be +computed from the source bits and the old destination bits. x:G-Xcopy is +typically the most useful because it will work on a color display, but +special applications may use other functions, particularly in concert +with particular planes of a color display. The 16 functions are: + +@format +@t{ +x:G-Xclear 0 +x:G-Xand (AND src dst) +x:G-Xand-Reverse (AND src (NOT dst)) +x:G-Xcopy src +x:G-Xand-Inverted (AND (NOT src) dst) +x:G-Xnoop dst +x:G-Xxor (XOR src dst) +x:G-Xor (OR src dst) +x:G-Xnor (AND (NOT src) (NOT dst)) +x:G-Xequiv (XOR (NOT src) dst) +x:G-Xinvert (NOT dst) +x:G-Xor-Reverse (OR src (NOT dst)) +x:G-Xcopy-Inverted (NOT src) +x:G-Xor-Inverted (OR (NOT src) dst) +x:G-Xnand (OR (NOT src) (NOT dst)) +x:G-Xset 1} +@end format +@end defvr + +@defvr Attribute x:GC-Plane-Mask + +Many graphics operations depend on either pixel values or planes in a +GC. The planes attribute is an integer which specifies which planes of +the destination are to be modified, one bit per plane. A monochrome +display has only one plane and will be the least significant bit of the +integer. As planes are added to the display hardware, they will occupy +more significant bits in the plane mask. + +In graphics operations, given a source and destination pixel, the result +is computed bitwise on corresponding bits of the pixels. That is, a +Boolean operation is performed in each bit plane. The plane-mask +restricts the operation to a subset of planes. @code{x:All-Planes} can be +used to refer to all planes of the screen simultaneously. The result is +computed by the following: + +@format +(OR (AND (FUNC src dst) plane-mask) (AND dst (NOT plane-mask))) +@end format + +Range checking is not performed on a plane-mask value. It is simply +truncated to the appropriate number of bits. +@end defvr + +@defvr Attribute x:GC-Foreground +@defvrx Attribute x:GC-Background +Range checking is not performed on the values for foreground or +background. They are simply truncated to the appropriate number of +bits. + +Note that foreground and background are not initialized to any values +likely to be useful in a window. +@end defvr + +@defvr Attribute x:GC-Line-Width +The line-width is measured in pixels and either can be greater than or +equal to one (wide line) or can be the special value zero (thin line). + +Thin lines (zero line-width) are one-pixel-wide lines drawn using an +unspecified, device-dependent algorithm. There are only two constraints +on this algorithm. + +@itemize @bullet +@item +If a line is drawn unclipped from [x1,y1] to [x2,y2] and if another line +is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy], a point [x,y] is +touched by drawing the first line if and only if the point [x+dx,y+dy] +is touched by drawing the second line. + +@item +The effective set of points comprising a line cannot be affected by +clipping. That is, a point is touched in a clipped line if and only if +the point lies inside the clipping region and the point would be touched +by the line when drawn unclipped. +@end itemize + +A wide line drawn from [x1,y1] to [x2,y2] always draws the same pixels +as a wide line drawn from [x2,y2] to [x1,y1], not counting cap-style and +join-style. It is recommended that this property be true for thin +lines, but this is not required. A line-width of zero may differ from a +line-width of one in which pixels are drawn. This permits the use of +many manufacturers' line drawing hardware, which may run many times +faster than the more precisely specified wide lines. + +In general, drawing a thin line will be faster than drawing a wide line +of width one. However, because of their different drawing algorithms, +thin lines may not mix well aesthetically with wide lines. If it is +desirable to obtain precise and uniform results across all displays, a +client should always use a line-width of one rather than a linewidth of +zero. +@end defvr + +@defvr Attribute x:GC-Line-Style +The line-style defines which sections of a line are drawn: + +@table @t +@item x:Line-Solid +The full path of the line is drawn. +@item x:Line-Double-Dash +The full path of the line is drawn, but the even dashes are filled +differently from the odd dashes (see fill-style) with x:Cap-Butt style used +where even and odd dashes meet. +@item x:Line-On-Off-Dash +Only the even dashes are drawn, and cap-style applies to all internal +ends of the individual dashes, except x:Cap-Not-Last is treated as x:Cap-Butt. +@end table +@end defvr + +@defvr Attribute x:GC-Cap-Style + +The cap-style defines how the endpoints of a path are drawn: + +@table @t +@item x:Cap-Not-Last +This is equivalent to x:Cap-Butt except that for a line-width of zero the +final endpoint is not drawn. +@item x:Cap-Butt +The line is square at the endpoint (perpendicular to the slope of the +line) with no projection beyond. +@item x:Cap-Round +The line has a circular arc with the diameter equal to the line-width, +centered on the endpoint. (This is equivalent to x:Cap-Butt for line-width +of zero). +@item x:Cap-Projecting +The line is square at the end, but the path continues beyond the +endpoint for a distance equal to half the line-width. (This is +equivalent to x:Cap-Butt for line-width of zero). +@end table +@end defvr + +@defvr Attribute x:GC-Join-Style + +The join-style defines how corners are drawn for wide lines: + +@table @t +@item x:Join-Miter +The outer edges of two lines extend to meet at an angle. However, if +the angle is less than 11 degrees, then a x:Join-Bevel join-style is used +instead. +@item x:Join-Round +The corner is a circular arc with the diameter equal to the +line-width, centered on the x:Join-point. +@item x:Join-Bevel +The corner has x:Cap-Butt endpoint styles with the triangular notch filled. +@end table +@end defvr + +@defvr Attribute x:GC-Fill-Style + +The fill-style defines the contents of the source for line, text, and +fill requests. For all text and fill requests (for example, +X:Draw-Text, X:Fill-Rectangle, X:Fill-Polygon, and X:Fill-Arc); for line +requests with linestyle x:Line-Solid (for example, X:Draw-Line, +X:Draw-Segments, X:Draw-Rectangle, X:Draw-Arc); and for the even dashes +for line requests with line-style x:Line-On-Off-Dash or +x:Line-Double-Dash, the following apply: + +@table @t +@item x:Fill-Solid +Foreground +@item x:Fill-Tiled +Tile +@item x:Fill-Opaque-Stippled +A tile with the same width and height as stipple, but with background +everywhere stipple has a zero and with foreground everywhere stipple has +a one +@item x:Fill-Stippled +Foreground masked by stipple +@end table + +When drawing lines with line-style x:Line-Double-Dash, the odd dashes +are controlled by the fill-style in the following manner: + +@table @t +@item x:Fill-Solid +Background +@item x:Fill-Tiled +Same as for even dashes +@item x:Fill-Opaque-Stippled +Same as for even dashes +@item x:Fill-Stippled +Background masked by stipple +@end table +@end defvr + +@defvr Attribute x:GC-Fill-Rule +The fill-rule defines what pixels are inside (drawn) for paths given in +X:Fill-Polygon requests and can be set to x:Even-Odd-Rule or +x:Winding-Rule. + +@table @t +@item x:Even-Odd-Rule +A point is inside if an infinite ray with the point as +origin crosses the path an odd number of times. +@item x:Winding-Rule +A point is inside if an infinite ray with the point as origin crosses an +unequal number of clockwise and counterclockwise directed path segments. +@end table + +A clockwise directed path segment is one that crosses the ray from left +to right as observed from the point. A counterclockwise segment is one +that crosses the ray from right to left as observed from the point. The +case where a directed line segment is coincident with the ray is +uninteresting because you can simply choose a different ray that is not +coincident with a segment. + +For both x:Even-Odd-Rule and x:Winding-Rule, a point is infinitely +small, and the path is an infinitely thin line. A pixel is inside if +the center point of the pixel is inside and the center point is not on +the boundary. If the center point is on the boundary, the pixel is +inside if and only if the polygon interior is immediately to its right +(x increasing direction). Pixels with centers on a horizontal edge are +a special case and are inside if and only if the polygon interior is +immediately below (y increasing direction). +@end defvr + +@defvr Attribute x:GC-Tile +@defvrx Attribute x:GC-Stipple +The tile/stipple represents an infinite two-dimensional plane, with the +tile/stipple replicated in all dimensions. + +The tile pixmap must have the same root and depth as the GC, or an error +results. The stipple pixmap must have depth one and must have the same +root as the GC, or an error results. For stipple operations where the +fill-style is x:Fill-Stippled but not x:Fill-Opaque-Stippled, the +stipple pattern is tiled in a single plane and acts as an additional +clip mask to be ANDed with the clip-mask. Although some sizes may be +faster to use than others, any size pixmap can be used for tiling or +stippling. +@end defvr + +@defvr Attribute x:GC-Tile-Stip-X-Origin +@defvrx Attribute x:GC-Tile-Stip-Y-Origin +When the tile/stipple plane is superimposed on a drawable for use in a +graphics operation, the upper-left corner of some instance of the +tile/stipple is at the coordinates within the drawable specified by the +tile/stipple origin. The tile/stipple origin is interpreted relative to +the origin of whatever destination drawable is specified in a graphics +request. +@end defvr + +@defvr Attribute x:GC-Font +The font to be used for drawing text. +@end defvr + +@defvr Attribute x:GC-Subwindow-Mode +You can set the subwindow-mode to x:Clip-By-Children or +x:Include-Inferiors. +@table @t +@item x:Clip-By-Children +Both source and destination windows are additionally clipped by all +viewable Input-Output children. +@item x:Include-Inferiors +Neither source nor destination window is clipped by inferiors. This +will result in including subwindow contents in the source and drawing +through subwindow boundaries of the destination. The use of +@code{x:Include-Inferiors} on a window of one depth with mapped +inferiors of differing depth is not illegal, but the semantics are +undefined by the core protocol. +@end table +@end defvr + +@defvr Attribute x:GC-Graphics-Exposures +The graphics-exposure flag controls x:Graphics-Expose event generation +for X:Copy-Area and X:Copy-Plane requests (and any similar requests +defined by extensions). +@end defvr + +@defvr Attribute x:GC-Clip-X-Origin +@defvrx Attribute x:GC-Clip-Y-Origin +The clip-mask origin is interpreted relative to the origin of whatever +destination drawable is specified in a graphics request. +@end defvr + +@defvr Attribute x:GC-Clip-Mask +The clip-mask restricts writes to the destination drawable. If the +clip-mask is set to a pixmap, it must have depth one and have the same +root as the GC, or an error results. If clip-mask is set to +@cindex x:None +@cindex none +@dfn{x:None}, the pixels are always drawn regardless of the clip origin. +The clip-mask also can be set by calling @code{X:Set-Region}. Only +pixels where the clip-mask has a bit set to 1 are drawn. Pixels are not +drawn outside the area covered by the clip-mask or where the clip-mask +has a bit set to 0. The clip-mask affects all graphics requests. The +clip-mask does not clip sources. The clip-mask origin is interpreted +relative to the origin of whatever destination drawable is specified in +a graphics request. +@end defvr + +@defvr Attribute x:GC-Dash-Offset +Defines the phase of the pattern, specifying how many pixels into the +dash-list the pattern should actually begin in any single graphics +request. Dashing is continuous through path elements combined with a +join-style but is reset to the dash-offset between each sequence of +joined lines. + +The unit of measure for dashes is the same for the ordinary +coordinate system. Ideally, a dash length is measured along +the slope of the line, but implementations are only required +to match this ideal for horizontal and vertical lines. +Failing the ideal semantics, it is suggested that the length +be measured along the major axis of the line. The major +axis is defined as the x axis for lines drawn at an angle of +between -45 and +45 degrees or between 135 and 225 degrees +from the x axis. For all other lines, the major axis is the +y axis. +@end defvr + +@defvr Attribute x:GC-Dash-List +There must be at least one element in the specified @var{dash-list}. +The initial and alternating elements (second, fourth, and so on) of the +@var{dash-list} are the even dashes, and the others are the odd dashes. +Each element specifies a dash length in pixels. All of the elements +must be nonzero. Specifying an odd-length list is equivalent to +specifying the same list concatenated with itself to produce an +even-length list. +@end defvr + +@defvr Attribute x:GC-Arc-Mode +The arc-mode controls filling in the X:Fill-Arcs function and can be set +to x:Arc-Pie-Slice or x:Arc-Chord. +@table @t +@item x:Arc-Pie-Slice +The arcs are pie-slice filled. +@item x:Arc-Chord +The arcs are chord filled. +@end table +@end defvr + + +@node Cursor, Colormap, Graphics Context, Top +@chapter Cursor + +@defun x:create-cursor display shape +X provides a set of standard cursor shapes in a special font named +@cindex cursor +@dfn{cursor}. Applications are encouraged to use this interface for +their cursors because the font can be customized for the individual +display type. The @var{shape} argument specifies which glyph of the standard +fonts to use. + +The hotspot comes from the information stored in the cursor font. The +initial colors of a cursor are a black foreground and a white background +(see X:Recolor-Cursor). The names of all cursor shapes are defined with +the prefix XC: in @file{x11.scm}. + +@defunx x:create-cursor source-font source-char mask-font mask-char fgc bgc +Creates a cursor from the source and mask bitmaps obtained from the +specified font glyphs. The integer @var{source-char} must be a defined +glyph in @var{source-font}. The integer @var{mask-char} must be a +defined glyph in @var{mask-font}. The origins of the @var{source-char} +and @var{mask-char} glyphs are positioned coincidently and define the +hotspot. The @var{source-char} and @var{mask-char} need not have the +same bounding box metrics, and there is no restriction on the placement +of the hotspot relative to the bounding boxes. + +@defunx x:create-cursor source-font source-char #f #f fgc bgc +If @var{mask-font} and @var{mask-char} are #f, all pixels of the source +are displayed. + +@defunx x:create-cursor source-pixmap mask-pixmap fgc bgc origin +@var{mask-pixmap} must be the same size as the pixmap defined by the +@var{source-pixmap} argument. The foreground and background RGB values +must be specified using @var{foreground-color} and +@var{background-color}, even if the X server only has a x:Static-Gray or +x:Gray-Scale screen. The hotspot must be a point within the +@var{source-pixmap}. + +@code{X:Create-Cursor} creates and returns a cursor. The +@var{foreground-color} is used for the pixels set to 1 in the source, +and the @var{background-color} is used for the pixels set to 0. Both +source and mask must have depth one but can have any root. The +@var{mask-pixmap} defines the shape of the cursor. The pixels set to 1 +in @var{mask-pixmap} define which source pixels are displayed, and the +pixels set to 0 define which pixels are ignored. + +@defunx x:create-cursor source-pixmap #f fgc bgc origin +If @var{mask-pixmap} is #f, all pixels of the source are displayed. +@end defun + +@node Colormap, Rendering, Cursor, Top +@chapter Colormap + +@cindex colormap +@cindex RGB +A @dfn{colormap} maps pixel values to @dfn{RGB} color space values. + +@defun x:create-colormap window visual alloc-policy +@var{window} specifies the window on whose screen you want to create a +colormap. @var{visual} specifies a visual type supported on the screen. +@var{alloc-policy} Specifies the colormap entries to be allocated. You +can pass @code{X:Alloc-None} or @code{X:Alloc-All}. + +The @code{X:Create-Colormap} function creates and returns a colormap of +the specified @var{visual} type for the screen on which @var{window} +resides. Note that @var{window} is used only to determine the screen. + +@table @samp +@item X:Gray-Scale +@itemx X:Pseudo-Color +@itemx X:Direct-Color +The initial values of the colormap entries are undefined. + +@item X:Static-Gray +@itemx X:Static-Color +@itemx X:True-Color +The entries have defined values, but those values are specific to +@var{visual} and are not defined by X. The @var{alloc-policy} must be +@samp{X:Alloc-None}. + +@end table + +For the other visual classes, if @var{alloc-policy} is +@samp{X:Alloc-None}, the colormap initially has no allocated entries, +and clients can allocate them. + +If @var{alloc-policy} is @samp{X:Alloc-All}, the entire colormap is +allocated writable. The initial values of all allocated entries are +undefined. + +@table @samp +@item X:Gray-Scale +@itemx X:Pseudo-Color +The effect is as if an @code{XAllocColorCells} call returned all pixel +values from zero to N - 1, where N is the colormap entries value in +@var{visual}. + +@item X:Direct-Color +The effect is as if an @code{XAllocColorPlanes} call returned a pixel +value of zero and red_mask, green_mask, and blue_mask values containing +the same bits as the corresponding masks in the specified visual. +@end table + +@end defun + + +To create a new colormap when the allocation out of a previously +shared colormap has failed because of resource exhaustion, use: + +@defun x:copy-colormap-and-free colormap + +Creates and returns a colormap of the same visual type and for the same +screen as the specified @var{colormap}. It also moves all of the +client's existing allocation from the specified @var{colormap} to the +new colormap with their color values intact and their read-only or +writable characteristics intact and frees those entries in the specified +colormap. Color values in other entries in the new colormap are +undefined. If the specified colormap was created by the client with +alloc set to @samp{X:Alloc-All}, the new colormap is also created with +@samp{X:Alloc-All}, all color values for all entries are copied from the +specified @var{colormap}, and then all entries in the specified +@var{colormap} are freed. If the specified @var{colormap} was not +created by the client with @samp{X:Alloc-All}, the allocations to be moved +are all those pixels and planes that have been allocated by the client +and that have not been freed since they were allocated. + +@end defun + +A @dfn{colormap} maps pixel values to elements of the @dfn{RGB} +datatype. An @var{RGB} is a list or vector of 3 integers, describing +the red, green, and blue intensities respectively. The integers are in +the range 0 - 65535. + +@defun x:alloc-colormap-cells colormap ncolors nplanes +@defunx x:alloc-colormap-cells colormap ncolors nplanes contiguous? + +The @code{X:Alloc-Color-Cells} function allocates read/write color +cells. The number of colors, @var{ncolors} must be positive and the +number of planes, @var{nplanes} nonnegative. If @var{ncolors} and +nplanes are requested, then @var{ncolors} pixels and nplane plane masks +are returned. No mask will have any bits set to 1 in common with any +other mask or with any of the pixels. By ORing together each pixel with +zero or more masks, @var{ncolors} * 2^@var{nplanes} distinct pixels can +be produced. All of these are allocated writable by the request. + +@table @samp +@item x:Gray-Scale +@itemx x:Pseudo-Color +Each mask has exactly one bit set to 1. If @var{contiguous?} is +non-false and if all masks are ORed together, a single contiguous set of +bits set to 1 is formed. +@item x:Direct-Color +Each mask has exactly three bits set to 1. If @var{contiguous?} is +non-false and if all masks are ORed together, three contiguous sets of +bits set to 1 (one within each pixel subfield) is formed. +@end table + +The RGB values of the allocated entries are undefined. +@code{X:Alloc-Color-Cells} returns a list of two uniform arrays if it +succeeded or #f if it failed. The first array has the pixels allocated +and the second has the plane-masks. + + +@defunx x:alloc-colormap-cells colormap ncolors rgb +@defunx x:alloc-colormap-cells colormap ncolors rgb contiguous? + +The specified @var{ncolors} must be positive; and @var{rgb} a list or +vector of 3 nonnegative integers. If @var{ncolors} colors, @var{nreds} +reds, @var{ngreens} greens, and @var{nblues} blues are requested, +@var{ncolors} pixels are returned; and the masks have @var{nreds}, +@var{ngreens}, and @var{nblues} bits set to 1, respectively. If +@var{contiguous?} is non-false, each mask will have a contiguous set of +bits set to 1. No mask will have any bits set to 1 in common with any +other mask or with any of the pixels. + +Each mask will lie within the corresponding pixel subfield. By ORing +together subsets of masks with each pixel value, @var{ncolors} * +2(@var{nreds}+@var{ngreens}+@var{nblues}) distinct pixel values can be +produced. All of these are allocated by the request. However, in the +colormap, there are only @var{ncolors} * 2^@var{nreds} independent red +entries, @var{ncolors} * 2^@var{ngreens} independent green entries, and +@var{ncolors} * 2^@var{nblues} independent blue entries. + +@code{X:Alloc-Color-Cells} returns a list if it succeeded or #f if it +failed. The first element of the list has an array of the pixels +allocated. The second, third, and fourth elements are the red, green, +and blue plane-masks. +@end defun + +@defun x:free-colormap-cells colormap pixels planes +@defunx x:free-colormap-cells colormap pixels + +Frees the cells represented by pixels whose values are in the +@var{pixels} unsigned-integer uniform-vector. The @var{planes} argument +should not have any bits set to 1 in common with any of the pixels. The +set of all pixels is produced by ORing together subsets of the +@var{planes} argument with the pixels. The request frees all of these +pixels that were allocated by the client. Note that freeing an +individual pixel obtained from @code{X:Alloc-Colormap-Cells} with a +planes argument may not actually allow it to be reused until all of its +related pixels are also freed. Similarly, a read-only entry is not +actually freed until it has been freed by all clients, and if a client +allocates the same read-only entry multiple times, it must free the +entry that many times before the entry is actually freed. + +All specified pixels that are allocated by the client in the +@var{colormap} are freed, even if one or more pixels produce an error. +It is an error if a specified pixel is not allocated by the client (that +is, is unallocated or is only allocated by another client) or if the +colormap was created with all entries writable (by passing +@samp{x:Alloc-All} to @code{X:Create-Colormap}). If more than one pixel +is in error, the one that gets reported is arbitrary. +@end defun + +@defun x:colormap-find-color colormap rgb + +@var{rgb} is a list or vector of 3 integers, describing the red, green, +and blue intensities respectively; or an integer @samp{#x@i{rrggbb}}, +packing red, green and blue intensities in the range 0 - 255. + +@defunx x:colormap-find-color colormap color-name + +The case-insensitive string @var{color_name} specifies the name of a +color (for example, @file{red}) + +@code{X:Colormap-Find-Color} allocates a read-only colormap entry +corresponding to the closest RGB value supported by the hardware. +@code{X:Colormap-Find-Color} returns the pixel value of the color +closest to the specified @var{RGB} or @var{color_name} elements +supported by the hardware, if successful; otherwise +@code{X:Colormap-Find-Color} returns #f. + +Multiple clients that request the same effective RGB value can +be assigned the same read-only entry, thus allowing entries to be +shared. When the last client deallocates a shared cell, it is +deallocated. + +@end defun + +@defun x:color-ref colormap pixel + +Returns a list of 3 integers, describing the red, green, +and blue intensities respectively of the @var{colormap} entry of the +cell indexed by @var{pixel}. + +The integer @var{pixel} must be a valid index into @var{colormap}. +@end defun + +@defun X:Color-Set! colormap pixel rgb + +@var{rgb} is a list or vector of 3 integers, describing the red, green, +and blue intensities respectively; or an integer @samp{#x@i{rrggbb}}, +packing red, green and blue intensities in the range 0 - 255. + +@defunx X:Color-Set! colormap pixel color-name + +The case-insensitive string @var{color_name} specifies the name of a +color (for example, @file{red}) + +The integer @var{pixel} must be a valid index into @var{colormap}. + +@code{X:Color-Set!} changes the @var{colormap} entry of the read/write +cell indexed by @var{pixel}. If the @var{colormap} is an installed map +for its screen, the changes are visible immediately. + +@end defun + +@defun x:install-colormap colormap + +Installs the specified @var{colormap} for its associated screen. All +windows associated with @var{colormap} immediately display with true +colors. A colormap is associated with a window when the window is +created or its attributes changed. + +If the specified colormap is not already an installed colormap, the X +server generates a ColormapNotify event on each window that has that +colormap. + +@end defun + + +@node Rendering, Event, Colormap, Top +@chapter Rendering + +@defun x:flush display +@defunx x:flush window +Flushes the output buffer. Some client applications need not use this +function because the output buffer is automatically flushed as needed by +calls to X:Pending, X:Next-Event, and X:Window-Event. Events generated +by the server may be enqueued into the library's event queue. + +@defunx x:flush gc +Forces sending of GC component changes. + +Xlib usually defers sending changes to the components of a GC to the +server until a graphics function is actually called with that GC. This +permits batching of component changes into a single server request. In +some circumstances, however, it may be necessary for the client to +explicitly force sending the changes to the server. An example might be +when a protocol extension uses the GC indirectly, in such a way that the +extension interface cannot know what GC will be used. +@end defun + +@defun x:clear-area window (x-pos y-pos) (width height) expose? +Paints a rectangular area in the specified @var{window} according to the +specified dimensions with the @var{window}'s background pixel or pixmap. +The subwindow-mode effectively is @samp{x:Clip-By-Children}. If width +is zero, it is replaced with the current width of the @var{window} minus +x. If height is zero, it is replaced with the current height of the +@var{window} minus y. If the @var{window} has a defined background +tile, the rectangle clipped by any children is filled with this tile. +If the @var{window} has background x:None, the contents of the +@var{window} are not changed. In either case, if @var{expose?} is True, +one or more x:Expose events are generated for regions of the rectangle +that are either visible or are being retained in a backing store. If +you specify a @var{window} whose class is x:Input-Only, an error +results. +@end defun + +@defun x:fill-rectangle window gcontext position size + +@end defun + +@heading Draw Strings + +@defun x:draw-string drawable gc position string +@var{Position} specifies coordinates relative to the origin of +@var{drawable} of the origin of the first character to be drawn. + +@code{x:draw-string} draws the characters of @var{string}, starting at +@var{position}. +@end defun + +@defun x:image-string drawable gc position string +@var{Position} specifies coordinates relative to the origin of +@var{drawable} of the origin of the first character to be drawn. + +@code{x:image-string} draws the characters @emph{and background} of +@var{string}, starting at @var{position}. +@end defun + +@heading Draw Shapes + +@defun x:draw-points drawable gc position @dots{} +@var{Position} @dots{} specifies coordinates of the point to be drawn. + +@defunx x:draw-points drawable gc x y @dots{} +(@var{x}, @var{y}) @dots{} specifies coordinates of the point to be +drawn. + +@defunx x:draw-points drawable gc point-array +@var{point-array} is a uniform short array of rank 2, whose rightmost +index spans a range of 2. + +The @code{X:Draw-Points} procedure uses the foreground pixel and +function components of the @var{gc} to draw points into @var{drawable} +at the positions (relative to the origin of @var{drawable}) specified. + +@code{X:Draw-Points} uses these @var{gc} components: function, +planemask, foreground, subwindow-mode, clip-x-origin, clip-y-origin, and +clip-mask. +@end defun + + +@defun x:draw-segments drawable gc pos1 pos2 @dots{} +@var{Pos1}, @var{pos2}, @dots{} specify coordinates to be connected by +segments. + +@defunx x:draw-segments drawable gc x1 y1 x2 y2 @dots{} +(@var{x1}, @var{y1}), (@var{x2}, @var{y2}) @dots{} specify coordinates +to be connected by segments. + +@defunx x:draw-segments drawable gc point-array +@var{point-array} is a uniform short array of rank 2, whose rightmost +index spans a range of 2. + +The @code{X:Draw-Segments} procedure uses the components of the +specified @var{gc} to draw multiple unconnected lines between disjoint +adjacent pair of points passed as arguments. It draws the segments in +order and does not perform joining at coincident endpoints. For any +given line, @code{X:Draw-Segments} does not draw a pixel more than once. +If thin (zero line-width) segments intersect, the intersecting pixels +are drawn multiple times. If wide segments intersect, the intersecting +pixels are drawn only once, as though the entire PolyLine protocol +request were a single, filled shape. @code{X:Draw-Segments} treats all +coordinates as relative to the origin of @var{drawable}. + +@code{X:Draw-Segments} uses these @var{gc} components: function, +plane-mask, line-width, line-style, cap-style, fill-style, +subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask, join-style. +It also use these @var{gc} mode-dependent components: foreground, +background, tile, stipple, tilestipple-x-origin, tile-stipple-y-origin, +dash-offset, and dash-list. +@end defun + +@defun x:draw-lines drawable gc pos1 pos2 @dots{} +@var{Pos1}, @var{pos2}, @dots{} specify coordinates to be connected by +lines. + +@defunx x:draw-lines drawable gc x1 y1 x2 y2 @dots{} +(@var{x1}, @var{y1}), (@var{x2}, @var{y2}) @dots{} specify coordinates +to be connected by lines. + +@defunx x:draw-lines drawable gc point-array +@var{point-array} is a uniform short array of rank 2, whose rightmost +index spans a range of 2. + +The @code{X:Draw-Lines} procedure uses the components of the specified +@var{gc} to draw lines between each adjacent pair of points passed as +arguments. It draws the lines in order. The lines join correctly at +all intermediate points, and if the first and last points coincide, the +first and last lines also join correctly. For any given line, +@code{X:Draw-Lines} does not draw a pixel more than once. If thin (zero +line-width) lines intersect, the intersecting pixels are drawn multiple +times. If wide lines intersect, the intersecting pixels are drawn only +once, as though the entire PolyLine protocol request were a single, +filled shape. @code{X:Draw-Lines} treats all coordinates as relative to +the origin of @var{drawable}. + +@code{X:Draw-Lines} uses these @var{gc} components: function, +plane-mask, line-width, line-style, cap-style, fill-style, +subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask, join-style. +It also use these @var{gc} mode-dependent components: foreground, +background, tile, stipple, tilestipple-x-origin, tile-stipple-y-origin, +dash-offset, and dash-list. +@end defun + +@defun x:fill-polygon drawable gc pos1 pos2 @dots{} +@var{Pos1}, @var{pos2}, @dots{} specify coordinates of the border path. + +@defunx x:fill-polygon drawable gc x1 y1 x2 y2 @dots{} +(@var{x1}, @var{y1}), (@var{x2}, @var{y2}) @dots{} specify coordinates +of the border path. + +@defunx x:fill-polygon drawable gc point-array +@var{point-array} is a uniform short array of rank 2, whose rightmost +index spans a range of 2. + +The path is closed automatically if the last point in the list or +@var{point-array} does not coincide with the first point. + +The @code{X:Fill-Polygon} procedure uses the components of the specified +@var{gc} to fill the region closed by the specified path. +@code{X:Fill-Polygon} does not draw a pixel of the region more than +once. @code{X:Fill-Polygon} treats all coordinates as relative to the +origin of @var{drawable}. + +@code{X:Fill-Polygon} uses these @var{gc} components: function, +planemask, fill-style, fill-rule, subwindow-mode, clip-x-origin, +clip-y-origin, and clip-mask. It also use these @var{gc} mode-dependent +components: foreground, background, tile, stipple, +tile-stipple-x-origin, and tile-stipple-y-origin. +@end defun + +@node Event, Index, Rendering, Top +@chapter Event + +@noindent +These three status routines always return immediately if there are +events already in the queue. + +@defun x:q-length display +Returns the length of the event queue for the connected @var{display}. +Note that there may be more events that have not been read into the +queue yet (see X:Events-Queued). +@end defun + +@defun x:pending display +Returns the number of events that have been received from the X server +but have not been removed from the event queue. +@end defun + +@defun x:events-queued display +Returns the number of events already in the queue if the number is +nonzero. If there are no events in the queue, @code{X:Events-Queued} +attempts to read more events out of the application's connection without +flushing the output buffer and returns the number read. +@end defun + +@noindent +Both of these routines return an object of type @dfn{event}. + +@defun x:next-event display +Removes and returns the first event from the event queue. If the event +queue is empty, @code{X:Next-Event} flushes the output buffer and blocks +until an event is received. +@end defun + +@defun x:peek-event display +Returns the first event from the event queue, but it does not remove the +event from the queue. If the queue is empty, @code{X:Peek-Event} +flushes the output buffer and blocks until an event is received. +@end defun + +@noindent +Each event object has fields dependent on its sub-type. + +@defun x:event-ref event field-name +@multitable @columnfractions .40 .60 +@item window +@tab +The window on which @var{event} was generated and is referred to as the +event window. +@item root +@tab +is the event window's root window. +@item subwindow +@tab +If the source window is an inferior of the event window, the +@var{subwindow} is the child of the event window that is the source +window or the child of the event window that is an ancestor of the +source window. Otherwise, @samp{None}. +@item X-event:type +@tab +An integer: @var{x:Key-Press}, @var{x:Key-Release}, +@var{x:Button-Press}, @var{x:Button-Release}, @var{x:Motion-Notify}, +@var{x:Enter-Notify}, @var{x:Leave-Notify}, @var{x:Focus-In}, +@var{x:Focus-Out}, @var{x:Keymap-Notify}, @var{x:Expose}, +@var{x:Graphics-Expose}, @var{x:No-Expose}, @var{x:Visibility-Notify}, +@var{x:Create-Notify}, @var{x:Destroy-Notify}, @var{x:Unmap-Notify}, +@var{x:Map-Notify}, @var{x:Map-Request}, @var{x:Reparent-Notify}, +@var{x:Configure-Notify}, @var{x:Configure-Request}, +@var{x:Gravity-Notify}, @var{x:Resize-Request}, +@var{x:Circulate-Notify}, @var{x:Circulate-Request}, +@var{x:Property-Notify}, @var{x:Selection-Clear}, +@var{x:Selection-Request}, @var{x:Selection-Notify}, +@var{x:Colormap-Notify}, @var{x:Client-Message}, or +@var{x:Mapping-Notify}. +@item X-event:serial +@tab +The serial number of the protocol request that generated the @var{event}. +@item X-event:send-event +@tab +Boolean that indicates whether the event was sent by a different client. +@item X-event:time +@tab +The time when the @var{event} was generated expressed in milliseconds. +@item X-event:x +@item X-event:y +@tab +For window entry/exit events the @var{x} and @var{y} members are set to +the coordinates of the pointer position in the event window. This +position is always the pointer's final position, not its initial +position. If the event window is on the same screen as the root window, +@var{x} and @var{y} are the pointer coordinates relative to the event +window's origin. Otherwise, @var{x} and @var{y} are set to zero. + +For expose events The @var{x} and @var{y} members are set to the +coordinates relative to the drawable's origin and indicate the +upper-left corner of the rectangle. + +For configure, create, gravity, and reparent events the @var{x} and +@var{y} members are set to the window's coordinates relative to the +parent window's origin and indicate the position of the upper-left +outside corner of the created window. +@item X-event:x-root +@itemx X-event:y-root +@tab +The pointer's coordinates relative to the root window's origin at the +time of the @var{event}. +@item X-event:state +@tab +For keyboard, pointer and window entry/exit events, the state member is +set to indicate the logical state of the pointer buttons and modifier +keys just prior to the @var{event}, which is the bitwise inclusive OR of +one or more of the button or modifier key masks: @var{x:Button1-Mask}, +@var{x:Button2-Mask}, @var{x:Button3-Mask}, @var{x:Button4-Mask}, +@var{x:Button5-Mask}, @var{x:Shift-Mask}, @var{x:Lock-Mask}, +@var{x:Control-Mask}, @var{x:Mod1-Mask}, @var{x:Mod2-Mask}, +@var{x:Mod3-Mask}, @var{x:Mod4-Mask}, and @var{x:Mod5-Mask}. + +For visibility events, the state of the window's visibility: +@var{x:Visibility-Unobscured}, @var{x:Visibility-Partially-Obscured}, or +@var{x:Visibility-Fully-Obscured}. + +For colormap events, indicates whether the colormap is installed or +uninstalled: x:Colormap-Installed or x:Colormap-Uninstalled. + +For property events, indicates whether the property was changed to a new +value or deleted: x:Property-New-Value or x:Property-Delete. +@item X-event:keycode +@tab +An integer that represents a physical key on the keyboard. +@item X-event:same-screen +@tab +Indicates whether the event window is on the same screen as the root +window. If #t, the event and root windows are on the same screen. If +#f, the event and root windows are not on the same screen. +@item X-event:button +@tab +The pointer button that changed state; can be the @var{x:Button1}, +@var{x:Button2}, @var{x:Button3}, @var{x:Button4}, or @var{x:Button5} +value. +@item X-event:is-hint +@tab +Detail of motion-notify events: @var{x:Notify-Normal} or +@var{x:Notify-Hint}. +@item X-event:mode +@tab +Indicates whether the @var{event} is a normal event, pseudo-motion event +when a grab activates, or a pseudo-motion event when a grab deactivates: +@var{x:Notify-Normal}, @var{x:Notify-Grab}, or @var{x:Notify-Ungrab}. +@item X-event:detail +@tab +Indicates the notification detail: @var{x:Notify-Ancestor}, +@var{x:Notify-Virtual}, @var{x:Notify-Inferior}, +@var{x:Notify-Nonlinear}, or @var{x:Notify-Nonlinear-Virtual}. +@item X-event:focus +@tab +If the event window is the focus window or an inferior of the focus +window, #t; otherwise #f. +@item X-event:width +@itemx X-event:height +@tab +The size (extent) of the rectangle. +@item X-event:count +@tab +For mapping events is the number of keycodes altered. + +For expose events Is the number of Expose or GraphicsExpose events that +are to follow. If count is zero, no more Expose events follow for this +window. However, if count is nonzero, at least that number of Expose +events (and possibly more) follow for this window. Simple applications +that do not want to optimize redisplay by distinguishing between +subareas of its window can just ignore all Expose events with nonzero +counts and perform full redisplays on events with zero counts. +@item X-event:major-code +@tab +The major_code member is set to the graphics request initiated by the +client and can be either X_CopyArea or X_CopyPlane. If it is +X_CopyArea, a call to XCopyArea initiated the request. If it is +X_CopyPlane, a call to XCopyPlane initiated the request. +@item X-event:minor-code +@tab +Not currently used. +@item X-event:border-width +@tab +For configure events, the width of the window's border, in pixels. +@item X-event:override-redirect +@tab +The override-redirect attribute of the window. Window manager clients +normally should ignore this window if it is #t. +@item X-event:from-configure +@tab +True if the event was generated as a result of a resizing of the +window's parent when the window itself had a win-gravity of +x:Unmap-Gravity. +@item X-event:value-mask +@tab +Indicates which components were specified in the ConfigureWindow +protocol request. The corresponding values are reported as given in the +request. The remaining values are filled in from the current geometry +of the window, except in the case of above (sibling) and detail +(stack-mode), which are reported as None and Above, respectively, if +they are not given in the request. +@item X-event:place +@tab +The window's position after the restack occurs and is either +x:Place-On-Top or x:Place-On-Bottom. If it is x:Place-On-Top, the +window is now on top of all siblings. If it is x:Place-On-Bottom, the +window is now below all siblings. +@item X-event:new +@tab +indicate whether the colormap for the specified window was changed or +installed or uninstalled and can be True or False. If it is True, the +colormap was changed. If it is False, the colormap was installed or +uninstalled. +@item X-event:format +@tab +Is 8, 16, or 32 and specifies whether the data should be viewed as a +list of bytes, shorts, or longs +@item X-event:request +@tab +Indicates the kind of mapping change that occurred and can be +@var{x:Mapping-Modifier}, @var{x:Mapping-Keyboard}, or +@var{x:Mapping-Pointer}. If it is @var{x:Mapping-Modifier}, the +modifier mapping was changed. If it is @var{x:Mapping-Keyboard}, the +keyboard mapping was changed. If it is @var{x:Mapping-Pointer}, the +pointer button mapping was changed. +@item X-event:first-keycode +@tab +The X-event:first-keycode is set only if the X-event:request was set to +@var{x:Mapping-Keyboard}. The number in X-event:first-keycode +represents the first number in the range of the altered mapping, and +X-event:count represents the number of keycodes altered. +@end multitable +@end defun + +@node Index, , Event, Top +@c @node Procedure and Macro Index, Variable Index, The Implementation, Top +@unnumbered Procedure and Macro Index + +This is an alphabetical list of all the procedures and macros in Xlibscm. + +@printindex fn + +@c @node Variable Index, Type Index, Procedure and Macro Index, Top +@unnumbered Variable Index + +This is an alphabetical list of all the global variables in Xlibscm. + +@printindex vr + +This is an alphabetical list of concepts introduced in this manual. + +@unnumbered Concept Index +@printindex cp + +@contents +@bye |