diff options
Diffstat (limited to 'libX11/specs/libX11/CH16')
-rw-r--r-- | libX11/specs/libX11/CH16 | 2364 |
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 |