aboutsummaryrefslogtreecommitdiff
path: root/libX11/specs/libX11/CH16
diff options
context:
space:
mode:
Diffstat (limited to 'libX11/specs/libX11/CH16')
-rw-r--r--libX11/specs/libX11/CH162364
1 files changed, 0 insertions, 2364 deletions
diff --git a/libX11/specs/libX11/CH16 b/libX11/specs/libX11/CH16
deleted file mode 100644
index 3a21a2290..000000000
--- a/libX11/specs/libX11/CH16
+++ /dev/null
@@ -1,2364 +0,0 @@
-.\" Copyright \(co 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 \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
-.\" Digital Equipment Corporation
-.\"
-.\" Portions Copyright \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 16\fP\s-1
-
-\s+1\fBApplication Utility Functions\fP\s-1
-.sp 2
-.nr H1 16
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.na
-.LP
-.XS
-Chapter 16: Application Utility Functions
-.XE
-Once you have initialized the X system,
-you can use the Xlib utility functions to:
-.IP \(bu 5
-Use keyboard utility functions
-.IP \(bu 5
-Use Latin-1 keyboard event functions
-.IP \(bu 5
-Allocate permanent storage
-.IP \(bu 5
-Parse the window geometry
-.IP \(bu 5
-Manipulate regions
-.IP \(bu 5
-Use cut buffers
-.IP \(bu 5
-Determine the appropriate visual type
-.IP \(bu 5
-Manipulate images
-.IP \(bu 5
-Manipulate bitmaps
-.IP \(bu 5
-Use the context manager
-.LP
-As a group,
-the functions discussed in this chapter provide the functionality that
-is frequently needed and that spans toolkits.
-Many of these functions do not generate actual protocol requests to the server.
-.NH 2
-Using Keyboard Utility Functions
-.XS
-\*(SN Using Keyboard Utility Functions
-.XE
-.LP
-This section discusses mapping between KeyCodes and KeySyms,
-classifying KeySyms, and mapping between KeySyms and string names.
-The first three functions in this section operate on a cached copy of the
-server keyboard mapping.
-The first four KeySyms for each KeyCode
-are modified according to the rules given in section 12.7.
-To obtain the untransformed KeySyms defined for a key,
-use the functions described in section 12.7.
-.LP
-.sp
-To obtain a KeySym for the KeyCode of an event, use
-.PN XLookupKeysym .
-.IN "XLookupKeysym" "" "@DEF@"
-.sM
-.FD 0
-KeySym XLookupKeysym(\^\fIkey_event\fP, \fIindex\fP\^)
-.br
- XKeyEvent *\fIkey_event\fP\^;
-.br
- int \fIindex\fP\^;
-.FN
-.IP \fIkey_event\fP 1i
-Specifies the
-.PN KeyPress
-or
-.PN KeyRelease
-event.
-.IP \fIindex\fP 1i
-Specifies the index into the KeySyms list for the event's KeyCode.
-.LP
-.eM
-The
-.PN XLookupKeysym
-function uses a given keyboard event and the index you specified to return
-the KeySym from the list that corresponds to the KeyCode member in the
-.PN XKeyPressedEvent
-or
-.PN XKeyReleasedEvent
-structure.
-If no KeySym is defined for the KeyCode of the event,
-.PN XLookupKeysym
-returns
-.PN NoSymbol .
-.LP
-.sp
-To obtain a KeySym for a specific KeyCode, use
-.PN XKeycodeToKeysym .
-.IN "XKeycodeToKeysym" "" "@DEF@"
-.sM
-.FD 0
-KeySym XKeycodeToKeysym\^(\^\fIdisplay\fP, \fIkeycode\fP, \fIindex\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- KeyCode \fIkeycode\fP\^;
-.br
- int \fIindex\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIkeycode\fP 1i
-Specifies the KeyCode.
-.IP \fIindex\fP 1i
-Specifies the element of KeyCode vector.
-.LP
-.eM
-The
-.PN XKeycodeToKeysym
-function uses internal Xlib tables
-and returns the KeySym defined for the specified KeyCode and
-the element of the KeyCode vector.
-If no symbol is defined,
-.PN XKeycodeToKeysym
-returns
-.PN NoSymbol .
-.LP
-.sp
-To obtain a KeyCode for a key having a specific KeySym, use
-.PN XKeysymToKeycode .
-.IN "XKeysymToKeycode" "" "@DEF@"
-.sM
-.FD 0
-KeyCode XKeysymToKeycode\^(\^\fIdisplay\fP, \fIkeysym\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- KeySym \fIkeysym\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be searched for.
-.LP
-.eM
-If the specified KeySym is not defined for any KeyCode,
-.PN XKeysymToKeycode
-returns zero.
-.LP
-.sp
-The mapping between KeyCodes and KeySyms is cached internal to Xlib.
-When this information is changed at the server, an Xlib function must
-be called to refresh the cache.
-To refresh the stored modifier and keymap information, use
-.PN XRefreshKeyboardMapping .
-.IN "XRefreshKeyboardMapping" "" "@DEF@"
-.sM
-.FD 0
-XRefreshKeyboardMapping(\^\fIevent_map\fP\^)
-.br
- XMappingEvent *\fIevent_map\fP\^;
-.FN
-.IP \fIevent_map\fP 1i
-Specifies the mapping event that is to be used.
-.LP
-.eM
-The
-.PN XRefreshKeyboardMapping
-function refreshes the stored modifier and keymap information.
-You usually call this function when a
-.PN MappingNotify
-event with a request member of
-.PN MappingKeyboard
-or
-.PN MappingModifier
-occurs.
-The result is to update Xlib's knowledge of the keyboard.
-.LP
-.sp
-To obtain the uppercase and lowercase forms of a KeySym, use
-.PN XConvertCase .
-.IN "XConvertCase" "" "@DEF@"
-.sM
-.FD 0
-void XConvertCase(\^\fIkeysym\fP, \fIlower_return\fP, \fIupper_return\fP\^)
-.br
- KeySym \fIkeysym\fP\^;
-.br
- KeySym *\fIlower_return\fP\^;
-.br
- KeySym *\fIupper_return\fP\^;
-.FN
-.ds Fn converted
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.IP \fIlower_return\fP 1i
-Returns the lowercase form of keysym, or keysym.
-.IP \fIupper_return\fP 1i
-Returns the uppercase form of keysym, or keysym.
-.LP
-.eM
-The
-.PN XConvertCase
-function returns the uppercase and lowercase forms of the specified Keysym,
-if the KeySym is subject to case conversion;
-otherwise, the specified KeySym is returned to both lower_return and
-upper_return.
-Support for conversion of other than Latin and Cyrillic KeySyms is
-implementation-dependent.
-.LP
-.sp
-KeySyms have string names as well as numeric codes.
-To convert the name of the KeySym to the KeySym code, use
-.PN XStringToKeysym .
-.IN "XStringToKeysym" "" "@DEF@"
-.sM
-.FD 0
-KeySym XStringToKeysym\^(\^\fIstring\fP\^)
-.br
- char *\fIstring\fP\^;
-.FN
-.IP \fIstring\fP 1i
-Specifies the name of the KeySym that is to be converted.
-.LP
-.eM
-Standard KeySym names are obtained from
-.hN X11/keysymdef.h
-by removing the XK_ prefix from each name.
-KeySyms that are not part of the Xlib standard also may be obtained
-with this function.
-The set of KeySyms that are available in this manner
-and the mechanisms by which Xlib obtains them is implementation-dependent.
-.LP
-If the KeySym name is not in the Host Portable Character Encoding,
-the result is implementation-dependent.
-If the specified string does not match a valid KeySym,
-.PN XStringToKeysym
-returns
-.PN NoSymbol .
-.LP
-.sp
-To convert a KeySym code to the name of the KeySym, use
-.PN XKeysymToString .
-.IN "XKeysymToString" "" "@DEF@"
-.sM
-.FD 0
-char *XKeysymToString\^(\^\fIkeysym\fP\^)
-.br
- KeySym \fIkeysym\fP\^;
-.FN
-.ds Fn converted
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-The returned string is in a static area and must not be modified.
-The returned string is in the Host Portable Character Encoding.
-If the specified KeySym is not defined,
-.PN XKeysymToString
-returns a NULL.
-.NH 3
-KeySym Classification Macros
-.XS
-\*(SN KeySym Classification Macros
-.XE
-.LP
-You may want to test if a KeySym is, for example,
-on the keypad or on one of the function keys.
-You can use KeySym macros to perform the following tests.
-.LP
-.sp
-.sM
-.FD 0
-IsCursorKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsCursorKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a cursor key.
-.LP
-.sp
-.sM
-.FD 0
-IsFunctionKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsFunctionKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a function key.
-.LP
-.sp
-.sM
-.FD 0
-IsKeypadKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsKeypadKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a standard keypad key.
-.LP
-.sp
-.sM
-.FD 0
-IsPrivateKeypadKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsPrivateKeypadKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a vendor-private keypad key.
-.LP
-.sp
-.sM
-.FD 0
-IsMiscFunctionKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsMiscFunctionKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a miscellaneous function key.
-.LP
-.sp
-.sM
-.FD 0
-IsModifierKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsModifierKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a modifier key.
-.LP
-.sp
-.sM
-.FD 0
-IsPFKey\^(\^\fIkeysym\fP\^)
-.FN
-.ds Fn tested
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.LP
-.eM
-.IN "IsPFKey" "" "@DEF@"
-Returns
-.PN True
-if the specified KeySym is a PF key.
-.NH 2
-Using Latin-1 Keyboard Event Functions
-.XS
-\*(SN Using Latin-1 Keyboard Event Functions
-.XE
-.LP
-Chapter 13 describes internationalized text input facilities,
-but sometimes it is expedient to write an application that
-only deals with Latin-1 characters and ASCII controls,
-so Xlib provides a simple function for that purpose.
-.PN XLookupString
-handles the standard modifier semantics described in section 12.7.
-This function does not use any of the input method facilities
-described in chapter 13 and does not depend on the current locale.
-.LP
-.sp
-To map a key event to an ISO Latin-1 string, use
-.PN XLookupString .
-.IN "XLookupString" "" "@DEF@"
-.sM
-.FD 0
-int XLookupString(\^\fIevent_struct\fP, \fIbuffer_return\fP,\
- \fIbytes_buffer\fP, \fIkeysym_return\fP, \fIstatus_in_out\fP\^)
-.br
- XKeyEvent *\fIevent_struct\fP\^;
-.br
- char *\fIbuffer_return\fP\^;
-.br
- int \fIbytes_buffer\fP\^;
-.br
- KeySym *\fIkeysym_return\fP\^;
-.br
- XComposeStatus *\fIstatus_in_out\fP\^;
-.FN
-.IP \fIevent_struct\fP 1i
-Specifies the key event structure to be used.
-You can pass
-.PN XKeyPressedEvent
-or
-.PN XKeyReleasedEvent .
-.IP \fIbuffer_return\fP 1i
-Returns the translated characters.
-.IP \fIbytes_buffer\fP 1i
-Specifies the length of the buffer.
-No more than bytes_buffer of translation are returned.
-.IP \fIkeysym_return\fP 1i
-Returns the KeySym computed from the event if this argument is not NULL.
-.IP \fIstatus_in_out\fP 1i
-Specifies or returns the
-.PN XComposeStatus
-structure or NULL.
-.LP
-.eM
-The
-.PN XLookupString
-function translates a key event to a KeySym and a string.
-The KeySym is obtained by using the standard interpretation of the
-.PN Shift ,
-.PN Lock ,
-group, and numlock modifiers as defined in the X Protocol specification.
-If the KeySym has been rebound (see
-.PN XRebindKeysym ),
-the bound string will be stored in the buffer.
-Otherwise, the KeySym is mapped, if possible, to an ISO Latin-1 character
-or (if the Control modifier is on) to an ASCII control character,
-and that character is stored in the buffer.
-.PN XLookupString
-returns the number of characters that are stored in the buffer.
-.LP
-If present (non-NULL),
-the
-.PN XComposeStatus
-structure records the state,
-which is private to Xlib,
-that needs preservation across calls to
-.PN XLookupString
-to implement compose processing.
-The creation of
-.PN XComposeStatus
-structures is implementation-dependent;
-a portable program must pass NULL for this argument.
-.LP
-.PN XLookupString
-depends on the cached keyboard information mentioned in the
-previous section, so it is necessary to use
-.PN XRefreshKeyboardMapping
-to keep this information up-to-date.
-.LP
-.sp
-To rebind the meaning of a KeySym for
-.PN XLookupString ,
-use
-.PN XRebindKeysym .
-.IN "XRebindKeysym" "" "@DEF@"
-.sM
-.FD 0
-XRebindKeysym(\^\fIdisplay\fP, \fIkeysym\fP, \fIlist\fP, \fImod_count\fP, \fIstring\fP, \fInum_bytes\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- KeySym \fIkeysym\fP\^;
-.br
- KeySym \fIlist\fP\^[\^]\^;
-.br
- int \fImod_count\fP\^;
-.br
- unsigned char *\fIstring\fP\^;
-.br
- int \fInum_bytes\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.ds Fn rebound
-.IP \fIkeysym\fP 1i
-Specifies the KeySym that is to be \*(Fn.
-.IP \fIlist\fP 1i
-Specifies the KeySyms to be used as modifiers.
-.IP \fImod_count\fP 1i
-Specifies the number of modifiers in the modifier list.
-.IP \fIstring\fP 1i
-Specifies the string that is copied and will be returned by
-.PN XLookupString .
-.IP \fInum_bytes\fP 1i
-Specifies the number of bytes in the string argument.
-.LP
-.eM
-The
-.PN XRebindKeysym
-function can be used to rebind the meaning of a KeySym for the client.
-It does not redefine any key in the X server but merely
-provides an easy way for long strings to be attached to keys.
-.PN XLookupString
-returns this string when the appropriate set of
-modifier keys are pressed and when the KeySym would have been used for
-the translation.
-No text conversions are performed;
-the client is responsible for supplying appropriately encoded strings.
-Note that you can rebind a KeySym that may not exist.
-.NH 2
-Allocating Permanent Storage
-.XS
-\*(SN Allocating Permanent Storage
-.XE
-.LP
-To allocate some memory you will never give back, use
-.PN Xpermalloc .
-.IN "Xpermalloc" "" "@DEF@"
-.sM
-.FD 0
-char *Xpermalloc\^(\^\fIsize\fP\^)
-.br
- unsigned int \fIsize\fP\^;
-.FN
-.LP
-.eM
-The
-.PN Xpermalloc
-function allocates storage that can never be freed for the life of the
-program. The memory is allocated with alignment for the C type double.
-This function may provide some performance and space savings over
-the standard operating system memory allocator.
-.NH 2
-Parsing the Window Geometry
-.XS
-\*(SN Parsing the Window Geometry
-.XE
-.LP
-To parse standard window geometry strings, use
-.PN XParseGeometry .
-.IN "Window" "determining location"
-.IN "XParseGeometry" "" "@DEF@"
-.LP
-.sM
-.FD 0
-int XParseGeometry\^(\^\fIparsestring\fP\^, \fIx_return\fP\^, \fIy_return\fP\^, \fIwidth_return\fP\^, \fIheight_return\fP\^)
-.br
- char *\fIparsestring\fP\^;
-.br
- int *\fIx_return\fP\^, *\fIy_return\fP\^;
-.br
- unsigned int *\fIwidth_return\fP\^, *\fIheight_return\fP\^;
-.FN
-.IP \fIparsestring\fP 1i
-Specifies the string you want to parse.
-.IP \fIx_return\fP 1i
-.br
-.ns
-.IP \fIy_return\fP 1i
-Return the x and y offsets.
-.IP \fIwidth_return\fP 1i
-.br
-.ns
-.IP \fIheight_return\fP 1i
-Return the width and height determined.
-.LP
-.eM
-By convention,
-X applications use a standard string to indicate window size and placement.
-.PN XParseGeometry
-makes it easier to conform to this standard because it allows you
-to parse the standard window geometry.
-Specifically, this function lets you parse strings of the form:
-.LP
-.\" Start marker code here
-.Ds
-[=][<\fIwidth\fP>{xX}<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>]
-.De
-.\" End marker code here
-.LP
-The fields map into the arguments associated with this function.
-(Items enclosed in <\^> are integers, items in [\^] are optional, and
-items enclosed in {\^} indicate ``choose one of.''
-Note that the brackets should not appear in the actual string.)
-If the string is not in the Host Portable Character Encoding,
-the result is implementation-dependent.
-.LP
-The
-.PN XParseGeometry
-function returns a bitmask that indicates which of the four values (width,
-height, xoffset, and yoffset) were actually found in the string
-and whether the x and y values are negative.
-By convention, \-0 is not equal to +0, because the user needs to
-be able to say ``position the window relative to the right or bottom edge.''
-For each value found, the corresponding argument is updated.
-For each value not found, the argument is left unchanged.
-The bits are represented by
-.PN XValue ,
-.PN YValue ,
-.PN WidthValue ,
-.PN HeightValue ,
-.PN XNegative ,
-or
-.PN YNegative
-and are defined in
-.hN X11/Xutil.h .
-They will be set whenever one of the values is defined
-or one of the signs is set.
-.LP
-If the function returns either the
-.PN XValue
-or
-.PN YValue
-flag,
-you should place the window at the requested position.
-.sp
-.LP
-To construct a window's geometry information, use
-.PN XWMGeometry .
-.IN "XWMGeometry" "" "@DEF@"
-.sM
-.FD 0
-int XWMGeometry\^(\^\fIdisplay\fP, \fIscreen\fP, \fIuser_geom\fP, \
-\fIdef_geom\fP, \fIbwidth\fP, \fIhints\fP, \fIx_return\fP, \fIy_return\fP,
-.br
- \fIwidth_return\fP, \fIheight_return\fP, \fIgravity_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int \fIscreen\fP\^;
-.br
- char *\fIuser_geom\fP\^;
-.br
- char *\fIdef_geom\fP\^;
-.br
- unsigned int \fIbwidth\fP\^;
-.br
- XSizeHints *\fIhints\fP\^;
-.br
- int *\fIx_return\fP, *\fIy_return\fP\^;
-.br
- int *\fIwidth_return\fP\^;
-.br
- int *\fIheight_return\fP\^;
-.br
- int *\fIgravity_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIscreen\fP 1i
-Specifies the screen.
-.IP \fIuser_geom\fP 1i
-Specifies the user-specified geometry or NULL.
-.IP \fIdef_geom\fP 1i
-Specifies the application's default geometry or NULL.
-.IP \fIbwidth\fP 1i
-Specifies the border width.
-.IP \fIhints\fP 1i
-Specifies the size hints for the window in its normal state.
-.IP \fIx_return\fP 1i
-.br
-.ns
-.IP \fIy_return\fP 1i
-Return the x and y offsets.
-.IP \fIwidth_return\fP 1i
-.br
-.ns
-.IP \fIheight_return\fP 1i
-Return the width and height determined.
-.IP \fIgravity_return\fP 1i
-Returns the window gravity.
-.LP
-.eM
-The
-.PN XWMGeometry
-function combines any geometry information (given in the format used by
-.PN XParseGeometry )
-specified by the user and by the calling program with size hints
-(usually the ones to be stored in WM_NORMAL_HINTS) and returns the position,
-size, and gravity
-.Pn ( NorthWestGravity ,
-.PN NorthEastGravity ,
-.PN SouthEastGravity ,
-or
-.PN SouthWestGravity )
-that describe the window.
-If the base size is not set in the
-.PN XSizeHints
-structure,
-the minimum size is used if set.
-Otherwise, a base size of zero is assumed.
-If no minimum size is set in the hints structure,
-the base size is used.
-A mask (in the form returned by
-.PN XParseGeometry )
-that describes which values came from the user specification
-and whether or not the position coordinates are relative
-to the right and bottom edges is returned.
-Note that these coordinates will have already been accounted for
-in the x_return and y_return values.
-.LP
-Note that invalid geometry specifications can cause a width or height
-of zero to be returned.
-The caller may pass the address of the hints win_gravity field
-as gravity_return to update the hints directly.
-.NH 2
-Manipulating Regions
-.XS
-\*(SN Manipulating Regions
-.XE
-.LP
-Regions are arbitrary sets of pixel locations.
-Xlib provides functions for manipulating regions.
-The opaque type
-.PN Region
-is defined in
-.hN X11/Xutil.h .
-Xlib provides functions that you can use to manipulate regions.
-This section discusses how to:
-.IP \(bu 5
-Create, copy, or destroy regions
-.IP \(bu 5
-Move or shrink regions
-.IP \(bu 5
-Compute with regions
-.IP \(bu 5
-Determine if regions are empty or equal
-.IP \(bu 5
-Locate a point or rectangle in a region
-.NH 3
-Creating, Copying, or Destroying Regions
-.XS
-\*(SN Creating, Copying, or Destroying Regions
-.XE
-.LP
-To create a new empty region, use
-.PN XCreateRegion .
-.IN "XCreateRegion" "" "@DEF@"
-.sM
-.FD 0
-Region XCreateRegion\^()
-.FN
-.LP
-.eM
-.sp
-To generate a region from a polygon, use
-.PN XPolygonRegion .
-.IN "XPolygonRegion" "" "@DEF@"
-.sM
-.FD 0
-Region XPolygonRegion\^(\^\fIpoints\fP\^, \fIn\fP\^, \fIfill_rule\fP\^)
-.br
- XPoint \fIpoints[]\fP\^;
-.br
- int \fIn\fP\^;
-.br
- int \fIfill_rule\fP\^;
-.FN
-.IP \fIpoints\fP 1i
-Specifies an array of points.
-.IP \fIn\fP 1i
-Specifies the number of points in the polygon.
-.IP \fIfill_rule\fP 1i
-Specifies the fill-rule you want to set for the specified GC.
-You can pass
-.PN EvenOddRule
-or
-.PN WindingRule .
-.LP
-.eM
-The
-.PN XPolygonRegion
-function returns a region for the polygon defined by the points array.
-For an explanation of fill_rule,
-see
-.PN XCreateGC .
-.LP
-.sp
-To set the clip-mask of a GC to a region, use
-.PN XSetRegion .
-.IN "XSetRegion" "" "@DEF@"
-.sM
-.FD 0
-XSetRegion\^(\^\fIdisplay\fP, \fIgc\fP\^, \fIr\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- GC \fIgc\fP\^;
-.br
- Region \fIr\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIgc\fP 1i
-Specifies the GC.
-.IP \fIr\fP 1i
-Specifies the region.
-.LP
-.eM
-The
-.PN XSetRegion
-function sets the clip-mask in the GC to the specified region.
-The region is specified relative to the drawable's origin.
-The resulting GC clip origin is implementation-dependent.
-Once it is set in the GC,
-the region can be destroyed.
-.LP
-.sp
-To deallocate the storage associated with a specified region, use
-.PN XDestroyRegion .
-.IN "XDestroyRegion" "" "@DEF@"
-.sM
-.FD 0
-XDestroyRegion\^(\^\fIr\fP\^)
-.br
- Region \fIr\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.LP
-.eM
-.NH 3
-Moving or Shrinking Regions
-.XS
-\*(SN Moving or Shrinking Regions
-.XE
-.LP
-To move a region by a specified amount, use
-.PN XOffsetRegion .
-.IN "XOffsetRegion" "" "@DEF@"
-.sM
-.FD 0
-XOffsetRegion\^(\^\fIr\fP\^, \fIdx\fP\^, \fIdy\fP\^)
-.br
- Region \fIr\fP\^;
-.br
- int \fIdx\fP\^, \fIdy\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.ds Dy move
-.IP \fIdx\fP 1i
-.br
-.ns
-.IP \fIdy\fP 1i
-Specify the x and y coordinates,
-which define the amount you want to \*(Dy the specified region.
-.LP
-.eM
-.sp
-To reduce a region by a specified amount, use
-.PN XShrinkRegion .
-.IN "XShrinkRegion" "" "@DEF@"
-.sM
-.FD 0
-XShrinkRegion\^(\^\fIr\fP\^, \fIdx\fP\^, \fIdy\fP\^)
-.br
- Region \fIr\fP\^;
-.br
- int \fIdx\fP\^, \fIdy\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.ds Dy shrink
-.IP \fIdx\fP 1i
-.br
-.ns
-.IP \fIdy\fP 1i
-Specify the x and y coordinates,
-which define the amount you want to \*(Dy the specified region.
-.LP
-.eM
-Positive values shrink the size of the region,
-and negative values expand the region.
-.NH 3
-Computing with Regions
-.XS
-\*(SN Computing with Regions
-.XE
-.LP
-.sp
-To generate the smallest rectangle enclosing a region, use
-.PN XClipBox .
-.IN "XClipBox" "" "@DEF@"
-.sM
-.FD 0
-XClipBox\^(\^\fIr\fP\^, \fIrect_return\fP\^)
-.br
- Region \fIr\fP\^;
-.br
- XRectangle *\fIrect_return\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.IP \fIrect_return\fP 1i
-Returns the smallest enclosing rectangle.
-.LP
-.eM
-The
-.PN XClipBox
-function returns the smallest rectangle enclosing the specified region.
-.sp
-.LP
-To compute the intersection of two regions, use
-.PN XIntersectRegion .
-.IN "XIntersectRegion" "" "@DEF@"
-.sM
-.FD 0
-XIntersectRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^)
-.br
- Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^;
-.FN
-.IP \fIsra\fP 1i
-.br
-.ns
-.IP \fIsrb\fP 1i
-Specify the two regions with which you want to perform the computation.
-.IP \fIdr_return\fP 1i
-Returns the result of the computation.
-.LP
-.eM
-.sp
-To compute the union of two regions, use
-.PN XUnionRegion .
-.IN "XUnionRegion" "" "@DEF@"
-.sM
-.FD 0
-XUnionRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^)
-.br
- Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^;
-.FN
-.IP \fIsra\fP 1i
-.br
-.ns
-.IP \fIsrb\fP 1i
-Specify the two regions with which you want to perform the computation.
-.IP \fIdr_return\fP 1i
-Returns the result of the computation.
-.LP
-.eM
-.sp
-To create a union of a source region and a rectangle, use
-.PN XUnionRectWithRegion .
-.IN "XUnionRectWithRegion" "" "@DEF@"
-.sM
-.FD 0
-XUnionRectWithRegion\^(\^\fIrectangle\fP, \fIsrc_region\fP, \
-\fIdest_region_return\fP\^)
-.br
- XRectangle *\fIrectangle\fP\^;
-.br
- Region \fIsrc_region\fP\^;
-.br
- Region \fIdest_region_return\fP\^;
-.FN
-.IP \fIrectangle\fP 1i
-Specifies the rectangle.
-.IP \fIsrc_region\fP 1i
-Specifies the source region to be used.
-.IP \fIdest_region_return\fP 1i
-Returns the destination region.
-.LP
-.eM
-The
-.PN XUnionRectWithRegion
-function updates the destination region from a union of the specified rectangle
-and the specified source region.
-.LP
-.sp
-To subtract two regions, use
-.PN XSubtractRegion .
-.IN "XSubtractRegion" "" "@DEF@"
-.sM
-.FD 0
-XSubtractRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^)
-.br
- Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^;
-.FN
-.IP \fIsra\fP 1i
-.br
-.ns
-.IP \fIsrb\fP 1i
-Specify the two regions with which you want to perform the computation.
-.IP \fIdr_return\fP 1i
-Returns the result of the computation.
-.LP
-.eM
-The
-.PN XSubtractRegion
-function subtracts srb from sra and stores the results in dr_return.
-.LP
-.sp
-To calculate the difference between the union and intersection
-of two regions, use
-.PN XXorRegion .
-.IN "XXorRegion" "" "@DEF@"
-.sM
-.FD 0
-XXorRegion\^(\^\fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^)
-.br
- Region \fIsra\fP\^, \fIsrb\fP\^, \fIdr_return\fP\^;
-.FN
-.IP \fIsra\fP 1i
-.br
-.ns
-.IP \fIsrb\fP 1i
-Specify the two regions with which you want to perform the computation.
-.IP \fIdr_return\fP 1i
-Returns the result of the computation.
-.LP
-.eM
-.NH 3
-Determining if Regions Are Empty or Equal
-.XS
-\*(SN Determining if Regions Are Empty or Equal
-.XE
-.LP
-To determine if the specified region is empty, use
-.PN XEmptyRegion .
-.IN "XEmptyRegion" "" "@DEF@"
-.sM
-.FD 0
-Bool XEmptyRegion\^(\^\fIr\fP\^)
-.br
- Region \fIr\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.LP
-.eM
-The
-.PN XEmptyRegion
-function returns
-.PN True
-if the region is empty.
-.LP
-.sp
-To determine if two regions have the same offset, size, and shape, use
-.PN XEqualRegion .
-.IN "XEqualRegion" "" "@DEF@"
-.sM
-.FD 0
-Bool XEqualRegion\^(\^\fIr1\fP\^, \fIr2\fP\^)
-.br
- Region \fIr1\fP\^, \fIr2\fP\^;
-.FN
-.IP \fIr1\fP 1i
-.br
-.ns
-.IP \fIr2\fP 1i
-Specify the two regions.
-.LP
-.eM
-The
-.PN XEqualRegion
-function returns
-.PN True
-if the two regions have the same offset, size, and shape.
-.NH 3
-Locating a Point or a Rectangle in a Region
-.XS
-\*(SN Locating a Point or a Rectangle in a Region
-.XE
-.LP
-To determine if a specified point resides in a specified region, use
-.PN XPointInRegion .
-.IN "XPointInRegion" "" "@DEF@"
-.sM
-.FD 0
-Bool XPointInRegion\^(\^\fIr\fP\^, \fIx\fP\^, \fIy\fP\^)
-.br
- Region \fIr\fP\^;
-.br
- int \fIx\fP\^, \fIy\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.ds Xy , which define the point
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the x and y coordinates\*(Xy.
-.LP
-.eM
-The
-.PN XPointInRegion
-function returns
-.PN True
-if the point (x, y) is contained in the region r.
-.LP
-.sp
-To determine if a specified rectangle is inside a region, use
-.PN XRectInRegion .
-.IN "XRectInRegion" "" "@DEF@"
-.sM
-.FD 0
-int XRectInRegion\^(\^\fIr\fP\^, \fIx\fP\^, \fIy\fP\^, \fIwidth\fP\^, \fIheight\fP\^)
-.br
- Region \fIr\fP\^;
-.br
- int \fIx\fP\^, \fIy\fP\^;
-.br
- unsigned int \fIwidth\fP\^, \fIheight\fP\^;
-.FN
-.IP \fIr\fP 1i
-Specifies the region.
-.ds Xy , which define the coordinates of the upper-left corner of the rectangle
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the x and y coordinates\*(Xy.
-.ds Wh , which define the rectangle
-.IP \fIwidth\fP 1i
-.br
-.ns
-.IP \fIheight\fP 1i
-Specify the width and height\*(Wh.
-.LP
-.eM
-The
-.PN XRectInRegion
-function returns
-.PN RectangleIn
-if the rectangle is entirely in the specified region,
-.PN RectangleOut
-if the rectangle is entirely out of the specified region,
-and
-.PN RectanglePart
-if the rectangle is partially in the specified region.
-.NH 2
-Using Cut Buffers
-.XS
-\*(SN Using Cut Buffers
-.XE
-.LP
-.IN "Cut Buffers"
-Xlib provides functions to manipulate cut buffers,
-a very simple form of cut-and-paste inter-client communication.
-Selections are a much more powerful and useful mechanism for
-interchanging data between clients (see section 4.5)
-and generally should be used instead of cut buffers.
-.LP
-Cut buffers are implemented as properties on the first root window
-of the display.
-The buffers can only contain text, in the STRING encoding.
-The text encoding is not changed by Xlib when fetching or storing.
-Eight buffers are provided
-and can be accessed as a ring or as explicit buffers (numbered 0 through 7).
-.LP
-.sp
-To store data in cut buffer 0, use
-.PN XStoreBytes .
-.IN "XStoreBytes" "" "@DEF@"
-.sM
-.FD 0
-XStoreBytes\^(\^\fIdisplay\fP, \fIbytes\fP\^, \fInbytes\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- char *\fIbytes\fP\^;
-.br
- int \^\fInbytes\fP\^;
-.br
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIbytes\fP 1i
-Specifies the bytes, which are not necessarily ASCII or null-terminated.
-.IP \fInbytes\fP 1i
-Specifies the number of bytes to be stored.
-.LP
-.eM
-The data can have embedded null characters
-and need not be null-terminated.
-The cut buffer's contents can be retrieved later by
-any client calling
-.PN XFetchBytes .
-.LP
-.PN XStoreBytes
-can generate a
-.PN BadAlloc
-error.
-.LP
-.sp
-To store data in a specified cut buffer, use
-.PN XStoreBuffer .
-.IN "XStoreBuffer" "" "@DEF@"
-.sM
-.FD 0
-XStoreBuffer\^(\^\fIdisplay\fP, \fIbytes\fP\^, \fInbytes\fP\^, \fIbuffer\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- char *\fIbytes\fP\^;
-.br
- int \^\fInbytes\fP\^;
-.br
- int \fIbuffer\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIbytes\fP 1i
-Specifies the bytes, which are not necessarily ASCII or null-terminated.
-.IP \fInbytes\fP 1i
-Specifies the number of bytes to be stored.
-.ds Fn in which you want to store the bytes
-.IP \fIbuffer\fP 1i
-Specifies the buffer \*(Fn.
-.LP
-.eM
-If an invalid buffer is specified, the call has no effect.
-The data can have embedded null characters
-and need not be null-terminated.
-.LP
-.PN XStoreBuffer
-can generate a
-.PN BadAlloc
-error.
-.LP
-.sp
-To return data from cut buffer 0, use
-.PN XFetchBytes .
-.IN "XFetchBytes" "" "@DEF@"
-.sM
-.FD 0
-char *XFetchBytes\^(\^\fIdisplay\fP, \fInbytes_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int *\fInbytes_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fInbytes_return\fP 1i
-Returns the number of bytes in the buffer.
-.LP
-.eM
-The
-.PN XFetchBytes
-function
-returns the number of bytes in the nbytes_return argument,
-if the buffer contains data.
-Otherwise, the function
-returns NULL and sets nbytes to 0.
-The appropriate amount of storage is allocated and the pointer returned.
-The client must free this storage when finished with it by calling
-.PN XFree .
-.LP
-.sp
-To return data from a specified cut buffer, use
-.PN XFetchBuffer .
-.IN "XFetchBuffer" "" "@DEF@"
-.sM
-.FD 0
-char *XFetchBuffer\^(\^\fIdisplay\fP, \fInbytes_return\fP\^, \fIbuffer\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int *\fInbytes_return\fP\^;
-.br
- int \fIbuffer\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fInbytes_return\fP 1i
-Returns the number of bytes in the buffer.
-.ds Fn from which you want the stored data returned
-.IP \fIbuffer\fP 1i
-Specifies the buffer \*(Fn.
-.LP
-.eM
-The
-.PN XFetchBuffer
-function returns zero to the nbytes_return argument
-if there is no data in the buffer or if an invalid
-buffer is specified.
-.LP
-.sp
-To rotate the cut buffers, use
-.PN XRotateBuffers .
-.IN "XRotateBuffers" "" "@DEF@"
-.sM
-.FD 0
-XRotateBuffers\^(\^\fIdisplay\fP, \fIrotate\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int \fIrotate\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIrotate\fP 1i
-Specifies how much to rotate the cut buffers.
-.LP
-.eM
-The
-.PN XRotateBuffers
-function rotates the cut
-buffers, such that buffer 0 becomes buffer n,
-buffer 1 becomes n + 1 mod 8, and so on.
-This cut buffer numbering is global to the display.
-Note that
-.PN XRotateBuffers
-generates
-.PN BadMatch
-errors if any of the eight buffers have not been created.
-.NH 2
-Determining the Appropriate Visual Type
-.XS
-\*(SN Determining the Appropriate Visual Type
-.XE
-.LP
-A single display can support multiple screens.
-Each screen can have several different visual types supported
-at different depths.
-You can use the functions described in this section to determine
-which visual to use for your application.
-.LP
-The functions in this section use the visual information masks and the
-.PN XVisualInfo
-structure,
-which is defined in
-.hN X11/Xutil.h
-and contains:
-.sM
-.LP
-/* Visual information mask bits */
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN VisualNoMask
-T} T{
-0x0
-T}
-T{
-#define
-T} T{
-.PN VisualIDMask
-T} T{
-0x1
-T}
-T{
-#define
-T} T{
-.PN VisualScreenMask
-T} T{
-0x2
-T}
-T{
-#define
-T} T{
-.PN VisualDepthMask
-T} T{
-0x4
-T}
-T{
-#define
-T} T{
-.PN VisualClassMask
-T} T{
-0x8
-T}
-T{
-#define
-T} T{
-.PN VisualRedMaskMask
-T} T{
-0x10
-T}
-T{
-#define
-T} T{
-.PN VisualGreenMaskMask
-T} T{
-0x20
-T}
-T{
-#define
-T} T{
-.PN VisualBlueMaskMask
-T} T{
-0x40
-T}
-T{
-#define
-T} T{
-.PN VisualColormapSizeMask
-T} T{
-0x80
-T}
-T{
-#define
-T} T{
-.PN VisualBitsPerRGBMask
-T} T{
-0x100
-T}
-T{
-#define
-T} T{
-.PN VisualAllMask
-T} T{
-0x1FF
-T}
-.TE
-.IN "XVisualInfo" "" "@DEF@"
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-/* Values */
-
-typedef struct {
- Visual *visual;
- VisualID visualid;
- int screen;
- unsigned int depth;
- int class;
- unsigned long red_mask;
- unsigned long green_mask;
- unsigned long blue_mask;
- int colormap_size;
- int bits_per_rgb;
-} XVisualInfo;
-.De
-.LP
-.eM
-To obtain a list of visual information structures that match a specified
-template, use
-.PN XGetVisualInfo .
-.IN "XGetVisualInfo" "" "@DEF@"
-.sM
-.FD 0
-XVisualInfo *XGetVisualInfo\^(\^\fIdisplay\fP, \fIvinfo_mask\fP, \fIvinfo_template\fP, \fInitems_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- long \fIvinfo_mask\fP\^;
-.br
- XVisualInfo *\fIvinfo_template\fP\^;
-.br
- int *\fInitems_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIvinfo_mask\fP 1i
-Specifies the visual mask value.
-.IP \fIvinfo_template\fP 1i
-Specifies the visual attributes that are to be used in matching the visual
-structures.
-.IP \fInitems_return\fP 1i
-Returns the number of matching visual structures.
-.LP
-.eM
-The
-.PN XGetVisualInfo
-function returns a list of visual structures that have attributes
-equal to the attributes specified by vinfo_template.
-If no visual structures match the template using the specified vinfo_mask,
-.PN XGetVisualInfo
-returns a NULL.
-To free the data returned by this function, use
-.PN XFree .
-.LP
-.sp
-To obtain the visual information that matches the specified depth and
-class of the screen, use
-.PN XMatchVisualInfo .
-.IN "XMatchVisualInfo" "" "@DEF@"
-.sM
-.FD 0
-Status XMatchVisualInfo\^(\^\fIdisplay\fP, \fIscreen\fP, \fIdepth\fP, \fIclass\fP, \fIvinfo_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int \fIscreen\fP\^;
-.br
- int \fIdepth\fP\^;
-.br
- int \fIclass\fP\^;
-.br
- XVisualInfo *\fIvinfo_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIscreen\fP 1i
-Specifies the screen.
-.IP \fIdepth\fP 1i
-Specifies the depth of the screen.
-.IP \fIclass\fP 1i
-Specifies the class of the screen.
-.IP \fIvinfo_return\fP 1i
-Returns the matched visual information.
-.LP
-.eM
-The
-.PN XMatchVisualInfo
-function returns the visual information for a visual that matches the specified
-depth and class for a screen.
-Because multiple visuals that match the specified depth and class can exist,
-the exact visual chosen is undefined.
-If a visual is found,
-.PN XMatchVisualInfo
-returns nonzero and the information on the visual to vinfo_return.
-Otherwise, when a visual is not found,
-.PN XMatchVisualInfo
-returns zero.
-.NH 2
-Manipulating Images
-.XS
-\*(SN Manipulating Images
-.XE
-.LP
-Xlib provides several functions that perform basic operations on images.
-All operations on images are defined using an
-.PN XImage
-structure,
-as defined in
-.hN X11/Xlib.h .
-Because the number of different types of image formats can be very large,
-this hides details of image storage properly from applications.
-.LP
-This section describes the functions for generic operations on images.
-Manufacturers can provide very fast implementations of these for the
-formats frequently encountered on their hardware.
-These functions are neither sufficient nor desirable to use for general image
-processing.
-Rather, they are here to provide minimal functions on screen format
-images.
-The basic operations for getting and putting images are
-.PN XGetImage
-and
-.PN XPutImage .
-.LP
-Note that no functions have been defined, as yet, to read and write images
-to and from disk files.
-.LP
-The
-.PN XImage
-structure describes an image as it exists in the client's memory.
-The user can request that some of the members such as height, width,
-and xoffset be changed when the image is sent to the server.
-Note that bytes_per_line in concert with offset can be used to
-extract a subset of the image.
-Other members (for example, byte order, bitmap_unit, and so forth)
-are characteristics of both the image and the server.
-If these members
-differ between the image and the server,
-.PN XPutImage
-makes the appropriate conversions.
-The first byte of the first line of
-plane n must be located at the address (data + (n * height * bytes_per_line)).
-For a description of the
-.PN XImage
-structure,
-see section 8.7.
-.LP
-.sp
-To allocate an
-.PN XImage
-structure and initialize it with image format values from a display, use
-.PN XCreateImage .
-.IN "XCreateImage" "" "@DEF@"
-.sM
-.FD 0
-XImage *XCreateImage\^(\^\fIdisplay\fP, \fIvisual\fP, \fIdepth\fP, \fIformat\fP, \fIoffset\fP, \fIdata\fP, \fIwidth\fP, \fIheight\fP\^, \fIbitmap_pad\fP,
-.br
- \fIbytes_per_line\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Visual *\fIvisual\fP\^;
-.br
- unsigned int \fIdepth\fP\^;
-.br
- int \fIformat\fP\^;
-.br
- int \fIoffset\fP\^;
-.br
- char *\fIdata\fP\^;
-.br
- unsigned int \fIwidth\fP\^;
-.br
- unsigned int \fIheight\fP\^;
-.br
- int \fIbitmap_pad\fP\^;
-.br
- int \fIbytes_per_line\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIvisual\fP 1i
-Specifies the
-.PN Visual
-structure.
-.IP \fIdepth\fP 1i
-Specifies the depth of the image.
-.IP \fIformat\fP 1i
-Specifies the format for the image.
-You can pass
-.PN XYBitmap ,
-.PN XYPixmap ,
-or
-.PN ZPixmap .
-.IP \fIoffset\fP 1i
-Specifies the number of pixels to ignore at the beginning of the scanline.
-.IP \fIdata\fP 1i
-Specifies the image data.
-.IP \fIwidth\fP 1i
-Specifies the width of the image, in pixels.
-.IP \fIheight\fP 1i
-Specifies the height of the image, in pixels.
-.IP \fIbitmap_pad\fP 1i
-Specifies the quantum of a scanline (8, 16, or 32).
-In other words, the start of one scanline is separated in client memory from
-the start of the next scanline by an integer multiple of this many bits.
-.IP \fIbytes_per_line\fP 1i
-Specifies the number of bytes in the client image between
-the start of one scanline and the start of the next.
-.LP
-.eM
-The
-.PN XCreateImage
-function allocates the memory needed for an
-.PN XImage
-structure for the
-specified display but does not allocate space for the image itself.
-Rather, it initializes the structure byte-order, bit-order, and bitmap-unit
-values from the display and returns a pointer to the
-.PN XImage
-structure.
-The red, green, and blue mask values are defined for Z format images only
-and are derived from the
-.PN Visual
-structure passed in.
-Other values also are passed in.
-The offset permits the rapid displaying of the image without requiring each
-scanline to be shifted into position.
-If you pass a zero value in bytes_per_line,
-Xlib assumes that the scanlines are contiguous
-in memory and calculates the value of bytes_per_line itself.
-.LP
-Note that when the image is created using
-.PN XCreateImage ,
-.PN XGetImage ,
-or
-.PN XSubImage ,
-the destroy procedure that the
-.PN XDestroyImage
-function calls frees both the image structure
-and the data pointed to by the image structure.
-.LP
-The basic functions used to get a pixel, set a pixel, create a subimage,
-and add a constant value to an image are defined in the image object.
-The functions in this section are really macro invocations of the functions
-in the image object and are defined in
-.hN X11/Xutil.h .
-.LP
-.sp
-To obtain a pixel value in an image, use
-.PN XGetPixel .
-.IN "XGetPixel" "" "@DEF@"
-.sM
-.FD 0
-unsigned long XGetPixel\^(\^\fIximage\fP, \fIx\fP, \fIy\fP\^)
-.br
- XImage *\fIximage\fP\^;
-.br
- int \fIx\fP\^;
-.br
- int \fIy\fP\^;
-.FN
-.IP \fIximage\fP 1i
-Specifies the image.
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the x and y coordinates.
-.LP
-.eM
-The
-.PN XGetPixel
-function returns the specified pixel from the named image.
-The pixel value is returned in normalized format (that is,
-the least significant byte of the long is the least significant byte
-of the pixel).
-The image must contain the x and y coordinates.
-.LP
-.sp
-To set a pixel value in an image, use
-.PN XPutPixel .
-.IN "XPutPixel" "" "@DEF@"
-.sM
-.FD 0
-XPutPixel\^(\^\fIximage\fP, \fIx\fP, \fIy\fP, \fIpixel\fP\^)
-.br
- XImage *\fIximage\fP\^;
-.br
- int \fIx\fP\^;
-.br
- int \fIy\fP\^;
-.br
- unsigned long \fIpixel\fP\^;
-.FN
-.IP \fIximage\fP 1i
-Specifies the image.
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the x and y coordinates.
-.IP \fIpixel\fP 1i
-Specifies the new pixel value.
-.LP
-.eM
-The
-.PN XPutPixel
-function overwrites the pixel in the named image with the specified pixel value.
-The input pixel value must be in normalized format
-(that is, the least significant byte of the long is the least significant
-byte of the pixel).
-The image must contain the x and y coordinates.
-.LP
-.sp
-To create a subimage, use
-.PN XSubImage .
-.IN "XSubImage" "" "@DEF@"
-.sM
-.FD 0
-XImage *XSubImage\^(\^\fIximage\fP, \fIx\fP, \fIy\fP, \fIsubimage_width\fP, \fIsubimage_height\fP\^)
-.br
- XImage *\fIximage\fP\^;
-.br
- int \fIx\fP\^;
-.br
- int \fIy\fP\^;
-.br
- unsigned int \fIsubimage_width\fP\^;
-.br
- unsigned int \fIsubimage_height\fP\^;
-.FN
-.IP \fIximage\fP 1i
-Specifies the image.
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the x and y coordinates.
-.IP \fIsubimage_width\fP 1i
-Specifies the width of the new subimage, in pixels.
-.IP \fIsubimage_height\fP 1i
-Specifies the height of the new subimage, in pixels.
-.LP
-.eM
-The
-.PN XSubImage
-function creates a new image that is a subsection of an existing one.
-It allocates the memory necessary for the new
-.PN XImage
-structure
-and returns a pointer to the new image.
-The data is copied from the source image,
-and the image must contain the rectangle defined by x, y, subimage_width,
-and subimage_height.
-.LP
-.sp
-To increment each pixel in an image by a constant value, use
-.PN XAddPixel .
-.IN "XAddPixel" "" "@DEF@"
-.sM
-.FD 0
-XAddPixel\^(\^\fIximage\fP, \fIvalue\fP\^)
-.br
- XImage *\fIximage\fP\^;
-.br
- long \fIvalue\fP\^;
-.FN
-.IP \fIximage\fP 1i
-Specifies the image.
-.IP \fIvalue\fP 1i
-Specifies the constant value that is to be added.
-.LP
-.eM
-The
-.PN XAddPixel
-function adds a constant value to every pixel in an image.
-It is useful when you have a base pixel value from allocating
-color resources and need to manipulate the image to that form.
-.LP
-.sp
-To deallocate the memory allocated in a previous call to
-.PN XCreateImage ,
-use
-.PN XDestroyImage .
-.IN "XDestroyImage" "" "@DEF@"
-.sM
-.FD 0
-XDestroyImage\^(\^\fIximage\fP\^)
-.br
- XImage *\^\fIximage\fP\^;
-.FN
-.IP \fIximage\fP 1i
-Specifies the image.
-.LP
-.eM
-The
-.PN XDestroyImage
-function deallocates the memory associated with the
-.PN XImage
-structure.
-.LP
-Note that when the image is created using
-.PN XCreateImage ,
-.PN XGetImage ,
-or
-.PN XSubImage ,
-the destroy procedure that this macro calls
-frees both the image structure and the data pointed to by the image structure.
-.NH 2
-Manipulating Bitmaps
-.XS
-\*(SN Manipulating Bitmaps
-.XE
-.LP
-Xlib provides functions that you can use to read a bitmap from a file,
-save a bitmap to a file, or create a bitmap.
-This section describes those functions that transfer bitmaps to and
-from the client's file system, thus allowing their reuse in a later
-connection (for example, from an entirely different client or to a
-different display or server).
-.LP
-The X version 11 bitmap file format is:
-.LP
-.sM
-.Ds 0
-#define \fIname\fP_width \fIwidth\fP
-#define \fIname\fP_height \fIheight\fP
-#define \fIname\fP_x_hot \fIx\fP
-#define \fIname\fP_y_hot \fIy\fP
-static unsigned char \fIname\fP_bits[] = { 0x\fINN\fP,... }
-.De
-.LP
-.eM
-The lines for the variables ending with _x_hot and _y_hot suffixes are optional
-because they are present only if a hotspot has been defined for this bitmap.
-The lines for the other variables are required.
-The word ``unsigned'' is optional;
-that is, the type of the _bits array can be ``char'' or ``unsigned char''.
-The _bits array must be large enough to contain the size bitmap.
-The bitmap unit is 8.
-.LP
-.sp
-To read a bitmap from a file and store it in a pixmap, use
-.PN XReadBitmapFile .
-.IN "XReadBitmapFile" "" "@DEF@"
-.sM
-.FD 0
-int XReadBitmapFile(\^\fIdisplay\fP, \fId\fP, \fIfilename\fP, \fIwidth_return\fP, \fIheight_return\fP, \fIbitmap_return\fP, \fIx_hot_return\fP,
-.br
- \fIy_hot_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Drawable \fId\fP\^;
-.br
- char *\fIfilename\fP\^;
-.br
- unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^;
-.br
- Pixmap *\fIbitmap_return\fP\^;
-.br
- int *\fIx_hot_return\fP, *\fIy_hot_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.ds Dr \ that indicates the screen
-.IP \fId\fP 1i
-Specifies the drawable\*(Dr.
-.IP \fIfilename\fP 1i
-Specifies the file name to use.
-The format of the file name is operating-system dependent.
-.IP \fIwidth_return\fP 1i
-.br
-.ns
-.IP \fIheight_return\fP 1i
-Return the width and height values of the read in bitmap file.
-.IP \fIbitmap_return\fP 1i
-Returns the bitmap that is created.
-.IP \fIx_hot_return\fP 1i
-.br
-.ns
-.IP \fIy_hot_return\fP 1i
-Return the hotspot coordinates.
-.LP
-.eM
-The
-.PN XReadBitmapFile
-function reads in a file containing a bitmap.
-The file is parsed in the encoding of the current locale.
-The ability to read other than the standard format
-is implementation-dependent.
-If the file cannot be opened,
-.PN XReadBitmapFile
-returns
-.PN BitmapOpenFailed .
-If the file can be opened but does not contain valid bitmap data,
-it returns
-.PN BitmapFileInvalid .
-If insufficient working storage is allocated,
-it returns
-.PN BitmapNoMemory .
-If the file is readable and valid,
-it returns
-.PN BitmapSuccess .
-.LP
-.PN XReadBitmapFile
-returns the bitmap's height and width, as read
-from the file, to width_return and height_return.
-It then creates a pixmap of the appropriate size,
-reads the bitmap data from the file into the pixmap,
-and assigns the pixmap to the caller's variable bitmap.
-The caller must free the bitmap using
-.PN XFreePixmap
-when finished.
-If \fIname\fP_x_hot and \fIname\fP_y_hot exist,
-.PN XReadBitmapFile
-returns them to x_hot_return and y_hot_return;
-otherwise, it returns \-1,\-1.
-.LP
-.PN XReadBitmapFile
-can generate
-.PN BadAlloc ,
-.PN BadDrawable ,
-and
-.PN BadGC
-errors.
-.LP
-.sp
-To read a bitmap from a file and return it as data, use
-.PN XReadBitmapFileData .
-.IN "XReadBitmapFileData" "" "@DEF@"
-.sM
-.FD 0
-int XReadBitmapFileData(\^\fIfilename\fP, \fIwidth_return\fP, \fIheight_return\fP, \fIdata_return\fP, \fIx_hot_return\fP, \fIy_hot_return\fP\^)
-.br
- char *\fIfilename\fP\^;
-.br
- unsigned int *\fIwidth_return\fP, *\fIheight_return\fP\^;
-.br
- unsigned char *\fIdata_return\fP\^;
-.br
- int *\fIx_hot_return\fP, *\fIy_hot_return\fP\^;
-.FN
-.IP \fIfilename\fP 1i
-Specifies the file name to use.
-The format of the file name is operating-system dependent.
-.IP \fIwidth_return\fP 1i
-.br
-.ns
-.IP \fIheight_return\fP 1i
-Return the width and height values of the read in bitmap file.
-.IP \fIdata_return\fP 1i
-Returns the bitmap data.
-.IP \fIx_hot_return\fP 1i
-.br
-.ns
-.IP \fIy_hot_return\fP 1i
-Return the hotspot coordinates.
-.LP
-.eM
-The
-.PN XReadBitmapFileData
-function reads in a file containing a bitmap, in the same manner as
-.PN XReadBitmapFile ,
-but returns the data directly rather than creating a pixmap in the server.
-The bitmap data is returned in data_return; the client must free this
-storage when finished with it by calling
-.PN XFree .
-The status and other return values are the same as for
-.PN XReadBitmapFile .
-.LP
-.sp
-To write out a bitmap from a pixmap to a file, use
-.PN XWriteBitmapFile .
-.IN "XWriteBitmapFile" "" "@DEF@"
-.sM
-.FD 0
-int XWriteBitmapFile(\^\fIdisplay\fP, \fIfilename\fP, \fIbitmap\fP, \fIwidth\fP, \fIheight\fP, \fIx_hot\fP, \fIy_hot\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- char *\fIfilename\fP\^;
-.br
- Pixmap \fIbitmap\fP\^;
-.br
- unsigned int \fIwidth\fP, \fIheight\fP\^;
-.br
- int \fIx_hot\fP, \fIy_hot\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIfilename\fP 1i
-Specifies the file name to use.
-The format of the file name is operating-system dependent.
-.IP \fIbitmap\fP 1i
-Specifies the bitmap.
-.IP \fIwidth\fP 1i
-.br
-.ns
-.IP \fIheight\fP 1i
-Specify the width and height.
-.IP \fIx_hot\fP 1i
-.br
-.ns
-.IP \fIy_hot\fP 1i
-Specify where to place the hotspot coordinates (or \-1,\-1 if none are present)
-in the file.
-.LP
-.eM
-The
-.PN XWriteBitmapFile
-function writes a bitmap out to a file in the X Version 11 format.
-The name used in the output file is derived from the file name
-by deleting the directory prefix.
-The file is written in the encoding of the current locale.
-If the file cannot be opened for writing,
-it returns
-.PN BitmapOpenFailed .
-If insufficient memory is allocated,
-.PN XWriteBitmapFile
-returns
-.PN BitmapNoMemory ;
-otherwise, on no error,
-it returns
-.PN BitmapSuccess .
-If x_hot and y_hot are not \-1, \-1,
-.PN XWriteBitmapFile
-writes them out as the hotspot coordinates for the bitmap.
-.LP
-.PN XWriteBitmapFile
-can generate
-.PN BadDrawable
-and
-.PN BadMatch
-errors.
-.LP
-.sp
-To create a pixmap and then store bitmap-format data into it, use
-.PN XCreatePixmapFromBitmapData .
-.IN "XCreatePixmapFromBitmapData" "" "@DEF@"
-.sM
-.FD 0
-Pixmap XCreatePixmapFromBitmapData\^(\^\fIdisplay\fP, \fId\fP, \fIdata\fP, \fIwidth\fP, \fIheight\fP, \fIfg\fP, \fIbg\fP, \fIdepth\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Drawable \fId\fP\^;
-.br
- char *\fIdata\fP\^;
-.br
- unsigned int \fIwidth\fP, \fIheight\fP\^;
-.br
- unsigned long \fIfg\fP, \fIbg\fP\^;
-.br
- unsigned int \fIdepth\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.ds Dr \ that indicates the screen
-.IP \fId\fP 1i
-Specifies the drawable\*(Dr.
-.IP \fIdata\fP 1i
-Specifies the data in bitmap format.
-.IP \fIwidth\fP 1i
-.br
-.ns
-.IP \fIheight\fP 1i
-Specify the width and height.
-.IP \fIfg\fP 1i
-.br
-.ns
-.IP \fIbg\fP 1i
-Specify the foreground and background pixel values to use.
-.IP \fIdepth\fP 1i
-Specifies the depth of the pixmap.
-.LP
-.eM
-The
-.PN XCreatePixmapFromBitmapData
-function creates a pixmap of the given depth and then does a bitmap-format
-.PN XPutImage
-of the data into it.
-The depth must be supported by the screen of the specified drawable,
-or a
-.PN BadMatch
-error results.
-.LP
-.PN XCreatePixmapFromBitmapData
-can generate
-.PN BadAlloc ,
-.PN BadDrawable ,
-.PN BadGC ,
-and
-.PN BadValue
-errors.
-.LP
-.sp
-To include a bitmap written out by
-.PN XWriteBitmapFile
-.IN "XWriteBitmapFile"
-in a program directly, as opposed to reading it in every time at run time, use
-.PN XCreateBitmapFromData .
-.IN "XCreateBitmapFromData" "" "@DEF@"
-.sM
-.FD 0
-Pixmap XCreateBitmapFromData(\^\fIdisplay\fP, \fId\fP, \fIdata\fP, \fIwidth\fP, \fIheight\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Drawable \fId\fP\^;
-.br
- char *\fIdata\fP\^;
-.br
- unsigned int \fIwidth\fP, \fIheight\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.ds Dr \ that indicates the screen
-.IP \fId\fP 1i
-Specifies the drawable\*(Dr.
-.IP \fIdata\fP 1i
-Specifies the location of the bitmap data.
-.IP \fIwidth\fP 1i
-.br
-.ns
-.IP \fIheight\fP 1i
-Specify the width and height.
-.LP
-.eM
-The
-.PN XCreateBitmapFromData
-function allows you to include in your C program (using
-.PN #include )
-a bitmap file that was written out by
-.PN XWriteBitmapFile
-(X version 11 format only) without reading in the bitmap file.
-The following example creates a gray bitmap:
-.LP
-.Ds 0
-#include "gray.bitmap"
-.sp 6p
-Pixmap bitmap;
-bitmap = XCreateBitmapFromData(display, window, gray_bits, gray_width, gray_height);
-.De
-.LP
-If insufficient working storage was allocated,
-.PN XCreateBitmapFromData
-returns
-.PN None .
-It is your responsibility to free the
-bitmap using
-.PN XFreePixmap
-when finished.
-.LP
-.PN XCreateBitmapFromData
-can generate
-.PN BadAlloc
-and
-.PN BadGC
-errors.
-.NH 2
-Using the Context Manager
-.XS
-\*(SN Using the Context Manager
-.XE
-.LP
-The context manager provides a way of associating data with an X resource ID
-(mostly typically a window) in your program.
-Note that this is local to your program;
-the data is not stored in the server on a property list.
-Any amount of data in any number of pieces can be associated with a
-resource ID,
-and each piece of data has a type associated with it.
-The context manager requires knowledge of the resource ID
-and type to store or retrieve data.
-.LP
-Essentially, the context manager can be viewed as a two-dimensional,
-sparse array: one dimension is subscripted by the X resource ID
-and the other by a context type field.
-Each entry in the array contains a pointer to the data.
-Xlib provides context management functions with which you can
-save data values, get data values, delete entries, and create a unique
-context type.
-The symbols used are in
-.hN X11/Xutil.h .
-.LP
-.sp
-To save a data value that corresponds to a resource ID and context type, use
-.PN XSaveContext .
-.IN "XSaveContext" "" "@DEF@"
-.sM
-.FD 0
-int XSaveContext(\^\fIdisplay\fP, \fIrid\fP, \fIcontext\fP, \fIdata\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XID \fIrid\fP\^;
-.br
- XContext \fIcontext\fP\^;
-.br
- XPointer \fIdata\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIrid\fP 1i
-Specifies the resource ID with which the data is associated.
-.IP \fIcontext\fP 1i
-Specifies the context type to which the data belongs.
-.IP \fIdata\fP 1i
-Specifies the data to be associated with the window and type.
-.LP
-.eM
-If an entry with the specified resource ID and type already exists,
-.PN XSaveContext
-overrides it with the specified context.
-The
-.PN XSaveContext
-function returns a nonzero error code if an error has occurred
-and zero otherwise.
-Possible errors are
-.PN XCNOMEM
-(out of memory).
-.LP
-.sp
-To get the data associated with a resource ID and type, use
-.PN XFindContext .
-.IN "XFindContext" "" "@DEF@"
-.sM
-.FD 0
-int XFindContext(\^\fIdisplay\fP, \fIrid\fP, \fIcontext\fP, \fIdata_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XID \fIrid\fP\^;
-.br
- XContext \fIcontext\fP\^;
-.br
- XPointer *\fIdata_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIrid\fP 1i
-Specifies the resource ID with which the data is associated.
-.IP \fIcontext\fP 1i
-Specifies the context type to which the data belongs.
-.IP \fIdata_return\fP 1i
-Returns the data.
-.LP
-.eM
-Because it is a return value,
-the data is a pointer.
-The
-.PN XFindContext
-function returns a nonzero error code if an error has occurred
-and zero otherwise.
-Possible errors are
-.PN XCNOENT
-(context-not-found).
-.LP
-.sp
-To delete an entry for a given resource ID and type, use
-.PN XDeleteContext .
-.IN "XDeleteContext" "" "@DEF@"
-.sM
-.FD 0
-int XDeleteContext(\^\fIdisplay\fP, \fIrid\fP, \fIcontext\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XID \fIrid\fP;
-.br
- XContext \fIcontext\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIrid\fP 1i
-Specifies the resource ID with which the data is associated.
-.IP \fIcontext\fP 1i
-Specifies the context type to which the data belongs.
-.LP
-.eM
-The
-.PN XDeleteContext
-function deletes the entry for the given resource ID
-and type from the data structure.
-This function returns the same error codes that
-.PN XFindContext
-returns if called with the same arguments.
-.PN XDeleteContext
-does not free the data whose address was saved.
-.LP
-.sp
-To create a unique context type that may be used in subsequent calls to
-.PN XSaveContext
-and
-.PN XFindContext ,
-use
-.PN XUniqueContext .
-.IN "XUniqueContext" "" "@DEF@"
-.sM
-.FD 0
-XContext XUniqueContext(\^)
-.FN
-.LP
-.eM
-.bp