diff options
Diffstat (limited to 'libX11/specs/libX11/CH06')
-rw-r--r-- | libX11/specs/libX11/CH06 | 4773 |
1 files changed, 4773 insertions, 0 deletions
diff --git a/libX11/specs/libX11/CH06 b/libX11/specs/libX11/CH06 new file mode 100644 index 000000000..44824d324 --- /dev/null +++ b/libX11/specs/libX11/CH06 @@ -0,0 +1,4773 @@ +.\" 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 6\fP\s-1 + +\s+1\fBColor Management Functions\fP\s-1 +.sp 2 +.nr H1 6 +.nr H2 0 +.nr H3 0 +.nr H4 0 +.nr H5 0 +.na +.LP +.XS +Chapter 6: Color Management Functions +.XE +Each X window always has an associated colormap that +provides a level of indirection between pixel values and colors displayed +on the screen. +Xlib provides functions that you can use to manipulate a colormap. +The X protocol defines colors using values in the RGB color space. +The RGB color space is device dependent; +rendering an RGB value on differing output devices typically results +in different colors. +Xlib also provides a means for clients to specify color using +device-independent color spaces for consistent results across devices. +Xlib supports device-independent color spaces derivable from the CIE XYZ +color space. +This includes the CIE XYZ, xyY, L*u*v*, and L*a*b* color spaces as well as +the TekHVC color space. +.LP +This chapter discusses how to: +.IP \(bu 5 +Create, copy, and destroy a colormap +.IP \(bu 5 +Specify colors by name or value +.IP \(bu 5 +Allocate, modify, and free color cells +.IP \(bu 5 +Read entries in a colormap +.IP \(bu 5 +Convert between color spaces +.IP \(bu 5 +Control aspects of color conversion +.IP \(bu 5 +Query the color gamut of a screen +.IP \(bu 5 +Add new color spaces +.LP +All functions, types, and symbols in this chapter with the prefix ``Xcms'' +are defined in +.hN X11/Xcms.h . +The remaining functions and types are defined in +.hN X11/Xlib.h . +.LP +Functions in this chapter manipulate the representation of color on the +screen. +For each possible value that a pixel can take in a window, +there is a color cell in the colormap. +For example, +if a window is 4 bits deep, pixel values 0 through 15 are defined. +A colormap is a collection of color cells. +A color cell consists of a triple of red, green, and blue (RGB) values. +The hardware imposes limits on the number of significant +bits in these values. +As each pixel is read out of display memory, the pixel +is looked up in a colormap. +The RGB value of the cell determines what color is displayed on the screen. +On a grayscale display with a black-and-white monitor, +the values are combined to determine the brightness on the screen. +.LP +Typically, an application allocates color cells or sets of color cells +to obtain the desired colors. +The client can allocate read-only cells. +In which case, +the pixel values for these colors can be shared among multiple applications, +and the RGB value of the cell cannot be changed. +If the client allocates read/write cells, +they are exclusively owned by the client, +and the color associated with the pixel value can be changed at will. +Cells must be allocated (and, if read/write, initialized with an RGB value) +by a client to obtain desired colors. +The use of pixel value for an +unallocated cell results in an undefined color. +.LP +Because colormaps are associated with windows, X supports displays +with multiple colormaps and, indeed, different types of colormaps. +If there are insufficient colormap resources in the display, +some windows will display in their true colors, and others +will display with incorrect colors. +A window manager usually controls which windows are displayed +in their true colors if more than one colormap is required for +the color resources the applications are using. +At any time, there is a set of installed colormaps for a screen. +Windows using one of the installed colormaps display with true colors, and +windows using other colormaps generally display with incorrect colors. +You can control the set of installed colormaps by using +.PN XInstallColormap +and +.PN XUninstallColormap . +.LP +Colormaps are local to a particular screen. +Screens always have a default colormap, +and programs typically allocate cells out of this colormap. +Generally, you should not write applications that monopolize +color resources. +Although some hardware supports multiple colormaps installed at one time, +many of the hardware displays +built today support only a single installed colormap, so the primitives +are written to encourage sharing of colormap entries between applications. +.LP +The +.PN DefaultColormap +macro returns the default colormap. +The +.PN DefaultVisual +macro +returns the default visual type for the specified screen. +.IN "Color map" +Possible visual types are +.PN StaticGray , +.PN GrayScale , +.PN StaticColor , +.PN PseudoColor , +.PN TrueColor , +or +.PN DirectColor +(see section 3.1). +.NH 2 +Color Structures +.XS +\*(SN Color Structures +.XE +.LP +Functions that operate only on RGB color space values use an +.PN XColor +structure, which contains: +.LP +.IN "XColor" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + unsigned long pixel; /* pixel value */ + unsigned short red, green, blue; /* rgb values */ + char flags; /* DoRed, DoGreen, DoBlue */ + char pad; +} XColor; +.De +.LP +.eM +The red, green, and blue values are always in the range 0 to 65535 +inclusive, independent of the number of bits actually used in the +display hardware. +The server scales these values down to the range used by the hardware. +Black is represented by (0,0,0), +and white is represented by (65535,65535,65535). +.IN "Color" +In some functions, +the flags member controls which of the red, green, and blue members is used +and can be the inclusive OR of zero or more of +.PN DoRed , +.PN DoGreen , +and +.PN DoBlue . +.LP +.sp +Functions that operate on all color space values use an +.PN XcmsColor +structure. +This structure contains a union of substructures, +each supporting color specification encoding for a particular color space. +Like the +.PN XColor +structure, the +.PN XcmsColor +structure contains pixel +and color specification information (the spec member in the +.PN XcmsColor +structure). +.IN "XcmsColor" "" "@DEF@" +.sM +.LP +.Ds 0 +.TA .5i 1i 2.5i +.ta .5i 1i 2.5i +typedef unsigned long XcmsColorFormat; /* Color Specification Format */ + +typedef struct { + union { + XcmsRGB RGB; + XcmsRGBi RGBi; + XcmsCIEXYZ CIEXYZ; + XcmsCIEuvY CIEuvY; + XcmsCIExyY CIExyY; + XcmsCIELab CIELab; + XcmsCIELuv CIELuv; + XcmsTekHVC TekHVC; + XcmsPad Pad; + } spec; + unsigned long pixel; + XcmsColorFormat format; +} XcmsColor; /* Xcms Color Structure */ +.De +.LP +.eM +Because the color specification can be encoded for the various color spaces, +encoding for the spec member is identified by the format member, +which is of type +.PN XcmsColorFormat . +The following macros define standard formats. +.sM +.TS +lw(.5i) lw(1.6i) lw(1.4i) lw(1.5i). +T{ +#define +T} T{ +.PN XcmsUndefinedFormat +T} T{ +0x00000000 +T} +T{ +#define +T} T{ +.PN XcmsCIEXYZFormat +T} T{ +0x00000001 +T} T{ +/* CIE XYZ */ +T} +T{ +#define +T} T{ +.PN XcmsCIEuvYFormat +T} T{ +0x00000002 +T} T{ +/* CIE u'v'Y */ +T} +T{ +#define +T} T{ +.PN XcmsCIExyYFormat +T} T{ +0x00000003 +T} T{ +/* CIE xyY */ +T} +T{ +#define +T} T{ +.PN XcmsCIELabFormat +T} T{ +0x00000004 +T} T{ +/* CIE L*a*b* */ +T} +T{ +#define +T} T{ +.PN XcmsCIELuvFormat +T} T{ +0x00000005 +T} T{ +/* CIE L*u*v* */ +T} +T{ +#define +T} T{ +.PN XcmsTekHVCFormat +T} T{ +0x00000006 +T} T{ +/* TekHVC */ +T} +T{ +#define +T} T{ +.PN XcmsRGBFormat +T} T{ +0x80000000 +T} T{ +/* RGB Device */ +T} +T{ +#define +T} T{ +.PN XcmsRGBiFormat +T} T{ +0x80000001 +T} T{ +/* RGB Intensity */ +T} +.TE +.LP +.eM +Formats for device-independent color spaces are +distinguishable from those for device-dependent spaces by the 32nd bit. +If this bit is set, +it indicates that the color specification is in a device-dependent form; +otherwise, it is in a device-independent form. +If the 31st bit is set, +this indicates that the color space has been added to Xlib at run time +(see section 6.12.4). +The format value for a color space added at run time may be different each +time the program is executed. +If references to such a color space must be made outside the client +(for example, storing a color specification in a file), +then reference should be made by color space string prefix +(see +.PN XcmsFormatOfPrefix +and +.PN XcmsPrefixOfFormat ). +.LP +Data types that describe the color specification encoding for the various +color spaces are defined as follows: +.sM +.IN "XcmsRGB" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef double XcmsFloat; + +typedef struct { + unsigned short red; /* 0x0000 to 0xffff */ + unsigned short green; /* 0x0000 to 0xffff */ + unsigned short blue; /* 0x0000 to 0xffff */ +} XcmsRGB; /* RGB Device */ +.De +.IN "XcmsRGBi" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat red; /* 0.0 to 1.0 */ + XcmsFloat green; /* 0.0 to 1.0 */ + XcmsFloat blue; /* 0.0 to 1.0 */ +} XcmsRGBi; /* RGB Intensity */ +.De +.IN "XcmsCIEXYZ" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat X; + XcmsFloat Y; /* 0.0 to 1.0 */ + XcmsFloat Z; +} XcmsCIEXYZ; /* CIE XYZ */ +.De +.IN "XcmsCIEuvY" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat u_prime; /* 0.0 to ~0.6 */ + XcmsFloat v_prime; /* 0.0 to ~0.6 */ + XcmsFloat Y; /* 0.0 to 1.0 */ +} XcmsCIEuvY; /* CIE u'v'Y */ +.De +.IN "XcmsCIExyY" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat x; /* 0.0 to ~.75 */ + XcmsFloat y; /* 0.0 to ~.85 */ + XcmsFloat Y; /* 0.0 to 1.0 */ +} XcmsCIExyY; /* CIE xyY */ +.De +.IN "XcmsCIELab" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat L_star; /* 0.0 to 100.0 */ + XcmsFloat a_star; + XcmsFloat b_star; +} XcmsCIELab; /* CIE L*a*b* */ +.De +.IN "XcmsCIELuv" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat L_star; /* 0.0 to 100.0 */ + XcmsFloat u_star; + XcmsFloat v_star; +} XcmsCIELuv; /* CIE L*u*v* */ +.De +.IN "XcmsTekHVC" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat H; /* 0.0 to 360.0 */ + XcmsFloat V; /* 0.0 to 100.0 */ + XcmsFloat C; /* 0.0 to 100.0 */ +} XcmsTekHVC; /* TekHVC */ +.De +.IN "XcmsPad" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + XcmsFloat pad0; + XcmsFloat pad1; + XcmsFloat pad2; + XcmsFloat pad3; +} XcmsPad; /* four doubles */ +.De +.LP +.eM +The device-dependent formats provided allow color specification in: +.IP \(bu 5 +RGB Intensity +.Pn ( XcmsRGBi ) +.IP +Red, green, and blue linear intensity values, +floating-point values from 0.0 to 1.0, +where 1.0 indicates full intensity, 0.5 half intensity, and so on. +.IP \(bu 5 +RGB Device +.Pn ( XcmsRGB ) +.IP +Red, green, and blue values appropriate for the specified output device. +.PN XcmsRGB +values are of type unsigned short, +scaled from 0 to 65535 inclusive, +and are interchangeable with the red, green, and blue values in an +.PN XColor +structure. +.LP +It is important to note that RGB Intensity values are not gamma corrected +values. +In contrast, +RGB Device values generated as a result of converting color specifications +are always gamma corrected, and +RGB Device values acquired as a result of querying a colormap +or passed in by the client are assumed by Xlib to be gamma corrected. +The term \fIRGB value\fP in this manual always refers to an RGB Device value. +.NH 2 +Color Strings +.XS +\*(SN Color Strings +.XE +.LP +Xlib provides a mechanism for using string names for colors. +A color string may either contain an abstract color name +or a numerical color specification. +Color strings are case-insensitive. +.LP +Color strings are used in the following functions: +.IP \(bu 5 +.PN XAllocNamedColor +.IP \(bu 5 +.PN XcmsAllocNamedColor +.IP \(bu 5 +.PN XLookupColor +.IP \(bu 5 +.PN XcmsLookupColor +.IP \(bu 5 +.PN XParseColor +.IP \(bu 5 +.PN XStoreNamedColor +.LP +Xlib supports the use of abstract color names, for example, red or blue. +A value for this abstract name is obtained by searching one or more color +name databases. +Xlib first searches zero or more client-side databases; +the number, location, and content of these databases is +implementation-dependent and might depend on the current locale. +If the name is not found, Xlib then looks for the color in the +X server's database. +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +.LP +A numerical color specification +consists of a color space name and a set of values in the following syntax: +.LP +.sM +.Ds 0 +\fI<color_space_name>\fP:\fI<value>/.../<value>\fP +.De +.LP +.eM +The following are examples of valid color strings. +.LP +.Ds 0 +"CIEXYZ:0.3227/0.28133/0.2493" +"RGBi:1.0/0.0/0.0" +"rgb:00/ff/00" +"CIELuv:50.0/0.0/0.0" +.De +The syntax and semantics of numerical specifications are given +for each standard color space in the following sections. +.NH 3 +RGB Device String Specification +.XS +\*(SN RGB Device String Specification +.XE +.LP +An RGB Device specification is identified by +the prefix ``rgb:'' and conforms to the following syntax: +.LP +.\" Start marker code here +.Ds 0 +rgb:\fI<red>/<green>/<blue>\fP + + \fI<red>\fP, \fI<green>\fP, \fI<blue>\fP := \fIh\fP | \fIhh\fP | \fIhhh\fP | \fIhhhh\fP + \fIh\fP := single hexadecimal digits (case insignificant) +.De +.\" End marker code here +.LP +Note that \fIh\fP indicates the value scaled in 4 bits, +\fIhh\fP the value scaled in 8 bits, +\fIhhh\fP the value scaled in 12 bits, +and \fIhhhh\fP the value scaled in 16 bits, respectively. +.LP +Typical examples are the strings ``rgb:ea/75/52'' and ``rgb:ccc/320/320'', +but mixed numbers of hexadecimal digit strings +(``rgb:ff/a5/0'' and ``rgb:ccc/32/0'') +are also allowed. +.LP +For backward compatibility, an older syntax for RGB Device is +supported, but its continued use is not encouraged. +The syntax is an initial sharp sign character followed by +a numeric specification, in one of the following formats: +.LP +.\" Start marker code here +.Ds 0 +.TA 2i +.ta 2i +#RGB (4 bits each) +#RRGGBB (8 bits each) +#RRRGGGBBB (12 bits each) +#RRRRGGGGBBBB (16 bits each) +.De +.\" End marker code here +.LP +The R, G, and B represent single hexadecimal digits. +When fewer than 16 bits each are specified, +they represent the most significant bits of the value +(unlike the ``rgb:'' syntax, in which values are scaled). +For example, the string ``#3a7'' is the same as ``#3000a0007000''. +.NH 3 +RGB Intensity String Specification +.XS +\*(SN RGB Intensity String Specification +.XE +.LP +An RGB intensity specification is identified +by the prefix ``rgbi:'' and conforms to the following syntax: +.LP +.\" Start marker code here +.Ds 0 +rgbi:\fI<red>/<green>/<blue>\fP +.De +.\" End marker code here +.LP +Note that red, green, and blue are floating-point values +between 0.0 and 1.0, inclusive. +The input format for these values is an optional sign, +a string of numbers possibly containing a decimal point, +and an optional exponent field containing an E or e +followed by a possibly signed integer string. +.NH 3 +Device-Independent String Specifications +.XS +\*(SN Device-Independent String Specifications +.XE +.LP +The standard device-independent string specifications have +the following syntax: +.LP +.\" Start marker code here +.Ds 0 +CIEXYZ:\fI<X>/<Y>/<Z>\fP +CIEuvY:\fI<u>/<v>/<Y>\fP +CIExyY:\fI<x>/<y>/<Y>\fP +CIELab:\fI<L>/<a>/<b>\fP +CIELuv:\fI<L>/<u>/<v>\fP +TekHVC:\fI<H>/<V>/<C>\fP +.De +.\" End marker code here +.LP +All of the values (C, H, V, X, Y, Z, a, b, u, v, y, x) are +floating-point values. +The syntax for these values is an optional plus or minus sign, +a string of digits possibly containing a decimal point, +and an optional exponent field consisting of an ``E'' or ``e'' +followed by an optional plus or minus followed by a string of digits. +.NH 2 +Color Conversion Contexts and Gamut Mapping +.XS +\*(SN Color Conversion Contexts and Gamut Mapping +.XE +.LP +When Xlib converts device-independent color specifications +into device-dependent specifications and vice versa, +it uses knowledge about the color limitations of the screen hardware. +This information, typically called the device profile, +.IN "Device profile" +is available in a Color Conversion Context (CCC). +.IN "Color Conversion Context" +.IN "CCC" +.LP +Because a specified color may be outside the color gamut of the target screen +and the white point associated with the color specification may differ +from the white point inherent to the screen, +Xlib applies gamut mapping when it encounters certain conditions: +.IN "White point" +.IP \(bu 5 +Gamut compression occurs when conversion of device-independent +color specifications to device-dependent color specifications +results in a color out of the target screen's gamut. +.IP \(bu 5 +White adjustment occurs when the inherent white point of the screen +differs from the white point assumed by the client. +.LP +Gamut handling methods are stored as callbacks in the CCC, +which in turn are used by the color space conversion routines. +Client data is also stored in the CCC for each callback. +The CCC also contains the white point the client assumes to be +associated with color specifications (that is, the Client White Point). +.IN "Client White Point" +.IN "Gamut compression" +.IN "Gamut handling" +.IN "White point adjustment" +The client can specify the gamut handling callbacks and client data +as well as the Client White Point. +Xlib does not preclude the X client from performing other +forms of gamut handling (for example, gamut expansion); +however, Xlib does not provide direct support for gamut handling +other than white adjustment and gamut compression. +.LP +Associated with each colormap is an initial CCC transparently generated by +Xlib. +.IN "Color Conversion Context" "creation" +Therefore, +when you specify a colormap as an argument to an Xlib function, +you are indirectly specifying a CCC. +.IN "CCC" "of colormap" +.IN "Color Conversion Context" "of colormap" +There is a default CCC associated with each screen. +Newly created CCCs inherit attributes from the default CCC, +so the default CCC attributes can be modified to affect new CCCs. +.IN "CCC" "default" +.IN "Color Conversion Context" "default" +.LP +Xcms functions in which gamut mapping can occur return +.PN Status +and have specific status values defined for them, +as follows: +.IP \(bu 5 +.PN XcmsFailure +indicates that the function failed. +.IP \(bu 5 +.PN XcmsSuccess +indicates that the function succeeded. +In addition, +if the function performed any color conversion, +the colors did not need to be compressed. +.IP \(bu 5 +.PN XcmsSuccessWithCompression +indicates the function performed color conversion +and at least one of the colors needed to be compressed. +The gamut compression method is determined by the gamut compression +procedure in the CCC that is specified directly as a function argument +or in the CCC indirectly specified by means of the colormap argument. +.NH 2 +Creating, Copying, and Destroying Colormaps +.XS +\*(SN Creating, Copying, and Destroying Colormaps +.XE +.LP +To create a colormap for a screen, use +.PN XCreateColormap . +.IN "XCreateColormap" "" "@DEF@" +.sM +.FD 0 +Colormap XCreateColormap\^(\^\fIdisplay\fP, \fIw\fP\^, \fIvisual\fP\^, \fIalloc\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Window \fIw\fP\^; +.br + Visual *\fIvisual\fP\^; +.br + int \fIalloc\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.ds Wi on whose screen you want to create a colormap +.IP \fIw\fP 1i +Specifies the window \*(Wi. +.IP \fIvisual\fP 1i +Specifies a visual type supported on the screen. +If the visual type is not one supported by the screen, +a +.PN BadMatch +error results. +.IP \fIalloc\fP 1i +Specifies the colormap entries to be allocated. +You can pass +.PN AllocNone +or +.PN AllocAll . +.LP +.eM +The +.PN XCreateColormap +function creates a colormap of the specified visual type for the screen +on which the specified window resides and returns the colormap ID +associated with it. +Note that the specified window is only used to determine the screen. +.LP +The initial values of the colormap entries are undefined for the +visual classes +.PN GrayScale , +.PN PseudoColor , +and +.PN DirectColor . +For +.PN StaticGray , +.PN StaticColor , +and +.PN TrueColor , +the entries have defined values, +but those values are specific to the visual and are not defined by X. +For +.PN StaticGray , +.PN StaticColor , +and +.PN TrueColor , +alloc must be +.PN AllocNone , +or a +.PN BadMatch +error results. +For the other visual classes, +if alloc is +.PN AllocNone , +the colormap initially has no allocated entries, +and clients can allocate them. +For information about the visual types, +see section 3.1. +.LP +If alloc is +.PN AllocAll , +the entire colormap is allocated writable. +The initial values of all allocated entries are undefined. +For +.PN GrayScale +and +.PN PseudoColor , +the effect is as if an +.PN XAllocColorCells +call returned all pixel values from zero to N \- 1, +where N is the colormap entries value in the specified visual. +For +.PN DirectColor , +the effect is as if an +.PN XAllocColorPlanes +call returned a pixel value of zero and red_mask, green_mask, +and blue_mask values containing the same bits as the corresponding +masks in the specified visual. +However, in all cases, +none of these entries can be freed by using +.PN XFreeColors . +.LP +.PN XCreateColormap +can generate +.PN BadAlloc , +.PN BadMatch , +.PN BadValue , +and +.PN BadWindow +errors. +.LP +.sp +To create a new colormap when the allocation out of a previously +shared colormap has failed because of resource exhaustion, use +.PN XCopyColormapAndFree . +.IN "XCopyColormapAndFree" "" "@DEF@" +.sM +.FD 0 +Colormap XCopyColormapAndFree\^(\^\fIdisplay\fP, \fIcolormap\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.LP +.eM +The +.PN XCopyColormapAndFree +function creates a colormap of the same visual type and for the same screen +as the specified colormap and returns the new colormap ID. +It also moves all of the client's existing allocation from the specified +colormap to the new colormap with their color values intact +and their read-only or writable characteristics intact and frees those entries +in the specified colormap. +Color values in other entries in the new colormap are undefined. +If the specified colormap was created by the client with alloc set to +.PN AllocAll , +the new colormap is also created with +.PN AllocAll , +all color values for all entries are copied from the specified colormap, +and then all entries in the specified colormap are freed. +If the specified colormap was not created by the client with +.PN AllocAll , +the allocations to be moved are all those pixels and planes +that have been allocated by the client using +.PN XAllocColor , +.PN XAllocNamedColor , +.PN XAllocColorCells , +or +.PN XAllocColorPlanes +and that have not been freed since they were allocated. +.LP +.PN XCopyColormapAndFree +can generate +.PN BadAlloc +and +.PN BadColor +errors. +.LP +.sp +To destroy a colormap, use +.PN XFreeColormap . +.IN "XFreeColormap" "" "@DEF@" +.sM +.FD 0 +XFreeColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.ds Cm that you want to destroy +.IP \fIcolormap\fP 1i +Specifies the colormap \*(Cm. +.LP +.eM +The +.PN XFreeColormap +function deletes the association between the colormap resource ID +and the colormap and frees the colormap storage. +However, this function has no effect on the default colormap for a screen. +If the specified colormap is an installed map for a screen, +it is uninstalled (see +.PN XUninstallColormap ). +If the specified colormap is defined as the colormap for a window (by +.PN XCreateWindow , +.PN XSetWindowColormap , +or +.PN XChangeWindowAttributes ), +.PN XFreeColormap +changes the colormap associated with the window to +.PN None +and generates a +.PN ColormapNotify +event. +X does not define the colors displayed for a window with a colormap of +.PN None . +.LP +.PN XFreeColormap +can generate a +.PN BadColor +error. +.NH 2 +Mapping Color Names to Values +.XS +\*(SN Mapping Color Names to Values +.XE +.LP +.sp +To map a color name to an RGB value, use +.PN XLookupColor . +.IN "Color" "naming" +.IN "XLookupColor" "" "@DEF@" +.sM +.FD 0 +Status XLookupColor\^(\^\fIdisplay\fP, \fIcolormap\fP, \fIcolor_name\fP, \ +\fIexact_def_return\fP\^, \fIscreen_def_return\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + char *\fIcolor_name\fP\^; +.br + XColor *\fIexact_def_return\fP\^, *\fIscreen_def_return\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor_name\fP 1i +Specifies the color name string (for example, red) whose color +definition structure you want returned. +.IP \fIexact_def_return\fP 1i +Returns the exact RGB values. +.IP \fIscreen_def_return\fP 1i +Returns the closest RGB values provided by the hardware. +.LP +.eM +The +.PN XLookupColor +function looks up the string name of a color with respect to the screen +associated with the specified colormap. +It returns both the exact color values and +the closest values provided by the screen +with respect to the visual type of the specified colormap. +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +Use of uppercase or lowercase does not matter. +.PN XLookupColor +returns nonzero if the name is resolved; +otherwise, it returns zero. +.LP +.PN XLookupColor +can generate a +.PN BadColor +error. +.LP +.sp +To map a color name to the exact RGB value, use +.PN XParseColor . +.IN "Color" "naming" +.IN "XParseColor" "" "@DEF@" +.sM +.FD 0 +Status XParseColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \^\fIspec\fP\^, \fIexact_def_return\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + char *\fIspec\fP\^; +.br + XColor *\fIexact_def_return\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIspec\fP 1i +Specifies the color name string; +case is ignored. +.IP \fIexact_def_return\fP 1i +Returns the exact color value for later use and sets the +.PN DoRed , +.PN DoGreen , +and +.PN DoBlue +flags. +.LP +.eM +The +.PN XParseColor +function looks up the string name of a color with respect to the screen +associated with the specified colormap. +It returns the exact color value. +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +Use of uppercase or lowercase does not matter. +.PN XParseColor +returns nonzero if the name is resolved; +otherwise, it returns zero. +.LP +.PN XParseColor +can generate a +.PN BadColor +error. +.LP +.sp +To map a color name to a value in an arbitrary color space, use +.PN XcmsLookupColor . +.IN "Color" "naming" +.IN "XcmsLookupColor" "" "@DEF@" +.sM +.FD 0 +Status XcmsLookupColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor_string\fP\^, \fIcolor_exact_return\fP\^, \fIcolor_screen_return\fP\^, +.br + \fIresult_format\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + char *\fIcolor_string\fP\^; +.br + XcmsColor *\fIcolor_exact_return\fP\^, *\fIcolor_screen_return\fP\^; +.br + XcmsColorFormat \fIresult_format\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.ds St +.IP \fIcolor_string\fP 1i +Specifies the color string\*(St. +.IP \fIcolor_exact_return\fP 1i +Returns the color specification parsed from the color string +or parsed from the corresponding string found in a color-name database. +.IP \fIcolor_screen_return\fP 1i +Returns the color that can be reproduced on the screen. +.IP \fIresult_format\fP 1i +Specifies the color format for the returned color +specifications (color_screen_return and color_exact_return arguments). +If the format is +.PN XcmsUndefinedFormat +and the color string contains a +numerical color specification, +the specification is returned in the format used in that numerical +color specification. +If the format is +.PN XcmsUndefinedFormat +and the color string contains a color name, +the specification is returned in the format used +to store the color in the database. +.LP +.eM +The +.PN XcmsLookupColor +function looks up the string name of a color with respect to the screen +associated with the specified colormap. +It returns both the exact color values and +the closest values provided by the screen +with respect to the visual type of the specified colormap. +The values are returned in the format specified by result_format. +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +Use of uppercase or lowercase does not matter. +.PN XcmsLookupColor +returns +.PN XcmsSuccess +or +.PN XcmsSuccessWithCompression +if the name is resolved; otherwise, it returns +.PN XcmsFailure . +If +.PN XcmsSuccessWithCompression +is returned, the color specification returned in +color_screen_return is the result of gamut compression. +.NH 2 +Allocating and Freeing Color Cells +.XS +\*(SN Allocating and Freeing Color Cells +.XE +.LP +There are two ways of allocating color cells: +explicitly as read-only entries, one pixel value at a time, +or read/write, +where you can allocate a number of color cells and planes simultaneously. +.IN "Read-only colormap cells" +A read-only cell has its RGB value set by the server. +.IN "Read/write colormap cells" +Read/write cells do not have defined colors initially; +functions described in the next section must be used to store values into them. +Although it is possible for any client to store values into a read/write +cell allocated by another client, +read/write cells normally should be considered private to the client +that allocated them. +.LP +Read-only colormap cells are shared among clients. +The server counts each allocation and freeing of the cell by clients. +When the last client frees a shared cell, the cell is finally deallocated. +If a single client allocates the same read-only cell multiple +times, the server counts each such allocation, not just the first one. +.LP +.sp +To allocate a read-only color cell with an RGB value, use +.PN XAllocColor . +.IN "Allocation" "read-only colormap cells" +.IN "Read-only colormap cells" "allocating" +.IN "Color" "allocation" +.IN "XAllocColor" "" "@DEF@" +.sM +.FD 0 +Status XAllocColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIscreen_in_out\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XColor *\fIscreen_in_out\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIscreen_in_out\fP 1i +Specifies and returns the values actually used in the colormap. +.LP +.eM +The +.PN XAllocColor +function allocates a read-only colormap entry corresponding to the closest +RGB value supported by the hardware. +.PN XAllocColor +returns the pixel value of the color closest to the specified +RGB elements supported by the hardware +and returns the RGB value actually used. +The corresponding colormap cell is read-only. +In addition, +.PN XAllocColor +returns nonzero if it succeeded or zero if it failed. +.IN "Color map" +.IN "Color" "allocation" +.IN "Allocation" "colormap" +.IN "read-only colormap cells" +Multiple clients that request the same effective RGB value can be assigned +the same read-only entry, thus allowing entries to be shared. +When the last client deallocates a shared cell, it is deallocated. +.PN XAllocColor +does not use or affect the flags in the +.PN XColor +structure. +.LP +.PN XAllocColor +can generate a +.PN BadColor +error. +.EQ +delim %% +.EN +.LP +.sp +To allocate a read-only color cell with a color in arbitrary format, use +.PN XcmsAllocColor . +.IN "Allocation" "read-only colormap cells" +.IN "Read-only colormap cells" "allocating" +.IN "Color" "allocation" +.IN "XcmsAllocColor" "" "@DEF@" +.sM +.FD 0 +Status XcmsAllocColor\^(\^\fIdisplay\fP\^, \fIcolormap\fP\^, \fIcolor_in_out\fP\^, \fIresult_format\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XcmsColor *\fIcolor_in_out\fP\^; +.br + XcmsColorFormat \fIresult_format\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor_in_out\fP 1i +Specifies the color to allocate and returns the pixel and color +that is actually used in the colormap. +.IP \fIresult_format\fP 1i +Specifies the color format for the returned color specification. +.LP +.eM +The +.PN XcmsAllocColor +function is similar to +.PN XAllocColor +except the color can be specified in any format. +The +.PN XcmsAllocColor +function ultimately calls +.PN XAllocColor +to allocate a read-only color cell (colormap entry) with the specified color. +.PN XcmsAllocColor +first converts the color specified +to an RGB value and then passes this to +.PN XAllocColor . +.PN XcmsAllocColor +returns the pixel value of the color cell and the color specification +actually allocated. +This returned color specification is the result of converting the RGB value +returned by +.PN XAllocColor +into the format specified with the result_format argument. +If there is no interest in a returned color specification, +unnecessary computation can be bypassed if result_format is set to +.PN XcmsRGBFormat . +The corresponding colormap cell is read-only. +If this routine returns +.PN XcmsFailure , +the color_in_out color specification is left unchanged. +.LP +.PN XcmsAllocColor +can generate a +.PN BadColor +error. +.LP +.sp +To allocate a read-only color cell using a color name and return the closest +color supported by the hardware in RGB format, use +.PN XAllocNamedColor . +.IN "Allocation" "read-only colormap cells" +.IN "Read-only colormap cells" "allocating" +.IN "Color" "naming" +.IN "Color" "allocation" +.IN "XAllocNamedColor" "" "@DEF@" +.sM +.FD 0 +Status XAllocNamedColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \ +\fIcolor_name\fP\^, \fIscreen_def_return\fP\^, \fIexact_def_return\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + char *\fIcolor_name\fP\^; +.br + XColor *\fIscreen_def_return\fP\^, *\fIexact_def_return\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor_name\fP 1i +Specifies the color name string (for example, red) whose color +definition structure you want returned. +.IP \fIscreen_def_return\fP 1i +Returns the closest RGB values provided by the hardware. +.IP \fIexact_def_return\fP 1i +Returns the exact RGB values. +.LP +.eM +The +.PN XAllocNamedColor +function looks up the named color with respect to the screen that is +associated with the specified colormap. +It returns both the exact database definition and +the closest color supported by the screen. +The allocated color cell is read-only. +The pixel value is returned in screen_def_return. +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +Use of uppercase or lowercase does not matter. +If screen_def_return and exact_def_return +point to the same structure, the pixel field will be set correctly, +but the color values are undefined. +.PN XAllocNamedColor +returns nonzero if a cell is allocated; +otherwise, it returns zero. +.LP +.PN XAllocNamedColor +can generate a +.PN BadColor +error. +.LP +.sp +To allocate a read-only color cell using a color name and return the closest +color supported by the hardware in an arbitrary format, use +.PN XcmsAllocNamedColor . +.IN "Allocation" "read-only colormap cells" +.IN "Read-only colormap cells" "allocating" +.IN "Color" "naming" +.IN "Color" "allocation" +.IN "XcmsAllocNamedColor" "" "@DEF@" +.sM +.FD 0 +Status XcmsAllocNamedColor\^(\^\fIdisplay\fP\^, \fIcolormap\fP\^, \fIcolor_string\fP\^, \fIcolor_screen_return\fP\^, \fIcolor_exact_return\fP\^, +.br + \fIresult_format\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + char *\fIcolor_string\fP\^; +.br + XcmsColor *\fIcolor_screen_return\fP\^; +.br + XcmsColor *\fIcolor_exact_return\fP\^; +.br + XcmsColorFormat \fIresult_format\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.ds St \ whose color definition structure is to be returned +.IP \fIcolor_string\fP 1i +Specifies the color string\*(St. +.IP \fIcolor_screen_return\fP 1i +Returns the pixel value of the color cell and color specification +that actually is stored for that cell. +.IP \fIcolor_exact_return\fP 1i +Returns the color specification parsed from the color string +or parsed from the corresponding string found in a color-name database. +.IP \fIresult_format\fP 1i +Specifies the color format for the returned color +specifications (color_screen_return and color_exact_return arguments). +If the format is +.PN XcmsUndefinedFormat +and the color string contains a +numerical color specification, +the specification is returned in the format used in that numerical +color specification. +If the format is +.PN XcmsUndefinedFormat +and the color string contains a color name, +the specification is returned in the format used +to store the color in the database. +.LP +.eM +The +.PN XcmsAllocNamedColor +function is similar to +.PN XAllocNamedColor +except that the color returned can be in any format specified. +This function +ultimately calls +.PN XAllocColor +to allocate a read-only color cell with +the color specified by a color string. +The color string is parsed into an +.PN XcmsColor +structure (see +.PN XcmsLookupColor ), +converted +to an RGB value, and finally passed to +.PN XAllocColor . +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +Use of uppercase or lowercase does not matter. +.LP +This function returns both the color specification as a result +of parsing (exact specification) and the actual color specification +stored (screen specification). +This screen specification is the result of converting the RGB value +returned by +.PN XAllocColor +into the format specified in result_format. +If there is no interest in a returned color specification, +unnecessary computation can be bypassed if result_format is set to +.PN XcmsRGBFormat . +If color_screen_return and color_exact_return +point to the same structure, the pixel field will be set correctly, +but the color values are undefined. +.LP +.PN XcmsAllocNamedColor +can generate a +.PN BadColor +error. +.LP +.sp +To allocate read/write color cell and color plane combinations for a +.PN PseudoColor +model, use +.PN XAllocColorCells . +.IN "Read/write colormap cells" "allocating" +.IN "Allocation" "read/write colormap cells" +.IN "Color" "allocation" +.IN "XAllocColorCells" "" "@DEF@" +.sM +.FD 0 +Status XAllocColorCells\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcontig\fP\^, \ +\fIplane_masks_return\fP\^, \fInplanes\fP\^, +.br + \fIpixels_return\fP\^, \fInpixels\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + Bool \fIcontig\fP\^; +.br + unsigned long \fIplane_masks_return\fP[\^]\^; +.br + unsigned int \fInplanes\fP\^; +.br + unsigned long \fIpixels_return\fP[\^]\^; +.br + unsigned int \fInpixels\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcontig\fP 1i +Specifies a Boolean value that indicates whether the planes must be contiguous. +.IP \fIplane_mask_return\fP 1i +Returns an array of plane masks. +.\" *** JIM: NEED MORE INFO FOR THIS. *** +.IP \fInplanes\fP 1i +Specifies the number of plane masks that are to be returned in the plane masks +array. +.IP \fIpixels_return\fP 1i +Returns an array of pixel values. +.IP \fInpixels\fP 1i +Specifies the number of pixel values that are to be returned in the +pixels_return array. +.LP +.eM +.EQ +delim %% +.EN +The +.PN XAllocColorCells +function allocates read/write color cells. +The number of colors must be positive and the number of planes nonnegative, +or a +.PN BadValue +error results. +If ncolors and nplanes are requested, +then ncolors pixels +and nplane plane masks are returned. +No mask will have any bits set to 1 in common with +any other mask or with any of the pixels. +By ORing together each pixel with zero or more masks, +ncolors * %2 sup nplanes% distinct pixels can be produced. +All of these are +allocated writable by the request. +For +.PN GrayScale +or +.PN PseudoColor , +each mask has exactly one bit set to 1. +For +.PN DirectColor , +each has exactly three bits set to 1. +If contig is +.PN True +and if all masks are ORed +together, a single contiguous set of bits set to 1 will be formed for +.PN GrayScale +or +.PN PseudoColor +and three contiguous sets of bits set to 1 (one within each +pixel subfield) for +.PN DirectColor . +The RGB values of the allocated +entries are undefined. +.PN XAllocColorCells +returns nonzero if it succeeded or zero if it failed. +.LP +.PN XAllocColorCells +can generate +.PN BadColor +and +.PN BadValue +errors. +.LP +.sp +To allocate read/write color resources for a +.PN DirectColor +model, use +.PN XAllocColorPlanes . +.IN "Read/write colormap planes" "allocating" +.IN "Allocation" "read/write colormap planes" +.IN "Color" "allocation" +.IN "XAllocColorPlanes" "" "@DEF@" +.sM +.FD 0 +Status XAllocColorPlanes\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcontig\fP\^, \fIpixels_return\fP\^, \fIncolors\fP\^, \fInreds\fP\^, \fIngreens\fP\^, +.br + \fInblues\fP\^, \fIrmask_return\fP\^, \fIgmask_return\fP\^, \fIbmask_return\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + Bool \fIcontig\fP\^; +.br + unsigned long \fIpixels_return\fP[\^]\^; +.br + int \fIncolors\fP\^; +.br + int \fInreds\fP\^, \fIngreens\fP\^, \fInblues\fP\^; +.br + unsigned long *\fIrmask_return\fP\^, *\fIgmask_return\fP\^, *\fIbmask_return\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcontig\fP 1i +Specifies a Boolean value that indicates whether the planes must be contiguous. +.IP \fIpixels_return\fP 1i +Returns an array of pixel values. +.PN XAllocColorPlanes +returns the pixel values in this array. +.IP \fIncolors\fP 1i +Specifies the number of pixel values that are to be returned in the +pixels_return array. +.IP \fInreds\fP 1i +.br +.ns +.IP \fIngreens\fP 1i +.br +.ns +.IP \fInblues\fP 1i +.br +.ns +Specify the number of red, green, and blue planes. +The value you pass must be nonnegative. +.IP \fIrmask_return\fP 1i +.br +.ns +.IP \fIgmask_return\fP 1i +.br +.ns +.IP \fIbmask_return\fP 1i +Return bit masks for the red, green, and blue planes. +.LP +.eM +.EQ +delim %% +.EN +The specified ncolors must be positive; +and nreds, ngreens, and nblues must be nonnegative, +or a +.PN BadValue +error results. +If ncolors colors, nreds reds, ngreens greens, and nblues blues are requested, +ncolors pixels are returned; and the masks have nreds, ngreens, and +nblues bits set to 1, respectively. +If contig is +.PN True , +each mask will have +a contiguous set of bits set to 1. +No mask will have any bits set to 1 in common with +any other mask or with any of the pixels. +For +.PN DirectColor , +each mask +will lie within the corresponding pixel subfield. +By ORing together +subsets of masks with each pixel value, +ncolors * %2 sup (nreds+ngreens+nblues)% distinct pixel values can be produced. +All of these are allocated by the request. +However, in the +colormap, there are only ncolors * %2 sup nreds% independent red entries, +ncolors * %2 sup ngreens% independent green entries, +and ncolors * %2 sup nblues% independent blue entries. +This is true even for +.PN PseudoColor . +When the colormap entry of a pixel +value is changed (using +.PN XStoreColors , +.PN XStoreColor , +or +.PN XStoreNamedColor ), +the pixel is decomposed according to the masks, +and the corresponding independent entries are updated. +.PN XAllocColorPlanes +returns nonzero if it succeeded or zero if it failed. +.LP +.PN XAllocColorPlanes +can generate +.PN BadColor +and +.PN BadValue +errors. +.LP +.sp +.IN "Freeing" "colors" +To free colormap cells, use +.PN XFreeColors . +.IN "XFreeColors" "" "@DEF@" +.IN "Color" "deallocation" +.sM +.FD 0 +XFreeColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIpixels\fP\^, \fInpixels\fP\^, \fIplanes\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + unsigned long \fIpixels\fP\^[\^]; +.br + int \fInpixels\fP\^; +.br + unsigned long \fIplanes\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.ds Pi that map to the cells in the specified colormap +.IP \fIpixels\fP 1i +Specifies an array of pixel values \*(Pi. +.IP \fInpixels\fP 1i +Specifies the number of pixels. +.IP \fIplanes\fP 1i +Specifies the planes you want to free. +.LP +.eM +The +.PN XFreeColors +function frees the cells represented by pixels whose values are in the +pixels array. +The planes argument should not have any bits set to 1 in common with any of the +pixels. +The set of all pixels is produced by ORing together subsets of +the planes argument with the pixels. +The request frees all of these pixels that +were allocated by the client (using +.IN XAllocColor +.IN XAllocNamedColor +.IN XAllocColorCells +.IN XAllocColorPlanes +.PN XAllocColor , +.PN XAllocNamedColor , +.PN XAllocColorCells , +and +.PN XAllocColorPlanes ). +Note that freeing an +individual pixel obtained from +.PN XAllocColorPlanes +may not actually allow +it to be reused until all of its related pixels are also freed. +Similarly, +a read-only entry is not actually freed until it has been freed by all clients, +and if a client allocates the same read-only entry multiple times, +it must free the entry that many times before the entry is actually freed. +.LP +All specified pixels that are allocated by the client in the colormap are +freed, even if one or more pixels produce an error. +If a specified pixel is not a valid index into the colormap, a +.PN BadValue +error results. +If a specified pixel is not allocated by the +client (that is, is unallocated or is only allocated by another client) +or if the colormap was created with all entries writable (by passing +.PN AllocAll +to +.PN XCreateColormap ), +a +.PN BadAccess +error results. +If more than one pixel is in error, +the one that gets reported is arbitrary. +.LP +.PN XFreeColors +can generate +.PN BadAccess , +.PN BadColor , +and +.PN BadValue +errors. +.NH 2 +Modifying and Querying Colormap Cells +.XS +\*(SN Modifying and Querying Colormap Cells +.XE +.LP +.sp +To store an RGB value in a single colormap cell, use +.PN XStoreColor . +.IN "Color" "storing" +.IN "XStoreColor" "" "@DEF@" +.sM +.FD 0 +XStoreColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XColor *\fIcolor\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor\fP 1i +Specifies the pixel and RGB values. +.LP +.eM +The +.PN XStoreColor +function changes the colormap entry of the pixel value specified in the +pixel member of the +.PN XColor +structure. +You specified this value in the +pixel member of the +.PN XColor +structure. +This pixel value must be a read/write cell and a valid index into the colormap. +If a specified pixel is not a valid index into the colormap, +a +.PN BadValue +error results. +.PN XStoreColor +also changes the red, green, and/or blue color components. +You specify which color components are to be changed by setting +.PN DoRed , +.PN DoGreen , +and/or +.PN DoBlue +in the flags member of the +.PN XColor +structure. +If the colormap is an installed map for its screen, +the changes are visible immediately. +.LP +.PN XStoreColor +can generate +.PN BadAccess , +.PN BadColor , +and +.PN BadValue +errors. +.LP +.sp +To store multiple RGB values in multiple colormap cells, use +.PN XStoreColors . +.IN "Color" "storing" +.IN "XStoreColors" "" "@DEF@" +.sM +.FD 0 +XStoreColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^, \fIncolors\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XColor \fIcolor\fP\^[\^]\^; +.br + int \fIncolors\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor\fP 1i +Specifies an array of color definition structures to be stored. +.IP \fIncolors\fP 1i +.\"Specifies the number of color definition structures. +Specifies the number of +.PN XColor +structures in the color definition array. +.LP +.eM +The +.PN XStoreColors +function changes the colormap entries of the pixel values +specified in the pixel members of the +.PN XColor +structures. +You specify which color components are to be changed by setting +.PN DoRed , +.PN DoGreen , +and/or +.PN DoBlue +in the flags member of the +.PN XColor +structures. +If the colormap is an installed map for its screen, the +changes are visible immediately. +.PN XStoreColors +changes the specified pixels if they are allocated writable in the colormap +by any client, even if one or more pixels generates an error. +If a specified pixel is not a valid index into the colormap, a +.PN BadValue +error results. +If a specified pixel either is unallocated or is allocated read-only, a +.PN BadAccess +error results. +If more than one pixel is in error, +the one that gets reported is arbitrary. +.LP +.PN XStoreColors +can generate +.PN BadAccess , +.PN BadColor , +and +.PN BadValue +errors. +.LP +.sp +To store a color of arbitrary format in a single colormap cell, use +.PN XcmsStoreColor . +.IN "Color" "storing" +.IN "XcmsStoreColor" "" "@DEF@" +.sM +.FD 0 +Status XcmsStoreColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XcmsColor *\fIcolor\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor\fP 1i +Specifies the color cell and the color to store. +Values specified in this +.PN XcmsColor +structure remain unchanged on return. +.LP +.eM +The +.PN XcmsStoreColor +function converts the color specified in the +.PN XcmsColor +structure into RGB values. +It then uses this RGB specification in an +.PN XColor +structure, whose three flags +.Pn ( DoRed , +.PN DoGreen , +and +.PN DoBlue ) +are set, in a call to +.PN XStoreColor +to change the color cell specified by the pixel member of the +.PN XcmsColor +structure. +This pixel value must be a valid index for the specified colormap, +and the color cell specified by the pixel value must be a read/write cell. +If the pixel value is not a valid index, a +.PN BadValue +error results. +If the color cell is unallocated or is allocated read-only, a +.PN BadAccess +error results. +If the colormap is an installed map for its screen, +the changes are visible immediately. +.LP +Note that +.PN XStoreColor +has no return value; therefore, an +.PN XcmsSuccess +return value from this function indicates that the conversion +to RGB succeeded and the call to +.PN XStoreColor +was made. +To obtain the actual color stored, use +.PN XcmsQueryColor . +Because of the screen's hardware limitations or gamut compression, +the color stored in the colormap may not be identical +to the color specified. +.LP +.PN XcmsStoreColor +can generate +.PN BadAccess , +.PN BadColor , +and +.PN BadValue +errors. +.LP +.sp +To store multiple colors of arbitrary format in multiple colormap cells, use +.PN XcmsStoreColors . +.IN "Color" "storing" +.IN "XcmsStoreColors" "" "@DEF@" +.sM +.FD 0 +Status XcmsStoreColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolors\fP\^, \fIncolors\fP\^, \fIcompression_flags_return\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XcmsColor \fIcolors\fP\^[\^]\^; +.br + int \fIncolors\fP\^; +.br + Bool \fIcompression_flags_return\fP\^[\^]\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolors\fP 1i +Specifies the color specification array of +.PN XcmsColor +structures, each specifying a color cell and the color to store in that +cell. +Values specified in the array remain unchanged upon return. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.IP \fIcompression_flags_return\fP 1i +Returns an array of Boolean values indicating compression status. +If a non-NULL pointer is supplied, +each element of the array is set to +.PN True +if the corresponding color was compressed and +.PN False +otherwise. +Pass NULL if the compression status is not useful. +.LP +.eM +The +.PN XcmsStoreColors +function converts the colors specified in the array of +.PN XcmsColor +structures into RGB values and then uses these RGB specifications in +.PN XColor +structures, whose three flags +.Pn ( DoRed , +.PN DoGreen , +and +.PN DoBlue ) +are set, in a call to +.PN XStoreColors +to change the color cells specified by the pixel member of the corresponding +.PN XcmsColor +structure. +Each pixel value must be a valid index for the specified colormap, +and the color cell specified by each pixel value must be a read/write cell. +If a pixel value is not a valid index, a +.PN BadValue +error results. +If a color cell is unallocated or is allocated read-only, a +.PN BadAccess +error results. +If more than one pixel is in error, +the one that gets reported is arbitrary. +If the colormap is an installed map for its screen, +the changes are visible immediately. +.LP +Note that +.PN XStoreColors +has no return value; therefore, an +.PN XcmsSuccess +return value from this function indicates that conversions +to RGB succeeded and the call to +.PN XStoreColors +was made. +To obtain the actual colors stored, use +.PN XcmsQueryColors . +Because of the screen's hardware limitations or gamut compression, +the colors stored in the colormap may not be identical +to the colors specified. +.LP +.PN XcmsStoreColors +can generate +.PN BadAccess , +.PN BadColor , +and +.PN BadValue +errors. +.LP +.sp +To store a color specified by name in a single colormap cell, use +.PN XStoreNamedColor . +.IN "Color" "storing" +.IN "Color" "naming" +.IN "XStoreNamedColor" "" "@DEF@" +.sM +.FD 0 +XStoreNamedColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor\fP\^, \fIpixel\fP\^, \fIflags\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + char *\^\fIcolor\fP\^; +.br + unsigned long \fIpixel\fP\^; +.br + int \fIflags\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor\fP 1i +Specifies the color name string (for example, red). +.IP \fIpixel\fP 1i +Specifies the entry in the colormap. +.IP \fIflags\fP 1i +Specifies which red, green, and blue components are set. +.LP +.eM +The +.PN XStoreNamedColor +function looks up the named color with respect to the screen associated with +the colormap and stores the result in the specified colormap. +The pixel argument determines the entry in the colormap. +The flags argument determines which of the red, green, and blue components +are set. +You can set this member to the +bitwise inclusive OR of the bits +.PN DoRed , +.PN DoGreen , +and +.PN DoBlue . +If the color name is not in the Host Portable Character Encoding, +the result is implementation-dependent. +Use of uppercase or lowercase does not matter. +If the specified pixel is not a valid index into the colormap, a +.PN BadValue +error results. +If the specified pixel either is unallocated or is allocated read-only, a +.PN BadAccess +error results. +.LP +.PN XStoreNamedColor +can generate +.PN BadAccess , +.PN BadColor , +.PN BadName , +and +.PN BadValue +errors. +.LP +The +.PN XQueryColor +and +.PN XQueryColors +functions take pixel values in the pixel member of +.PN XColor +structures and store in the structures the RGB values for those +pixels from the specified colormap. +The values returned for an unallocated entry are undefined. +These functions also set the flags member in the +.PN XColor +structure to all three colors. +If a pixel is not a valid index into the specified colormap, a +.PN BadValue +error results. +If more than one pixel is in error, +the one that gets reported is arbitrary. +.LP +.sp +To query the RGB value of a single colormap cell, use +.PN XQueryColor . +.IN "Color" "querying" +.IN "XQueryColor" "" "@DEF@" +.sM +.FD 0 +XQueryColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIdef_in_out\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XColor *\fIdef_in_out\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIdef_in_out\fP 1i +Specifies and returns the RGB values for the pixel specified in the structure. +.LP +.eM +The +.PN XQueryColor +function returns the current RGB value for the pixel in the +.PN XColor +structure and sets the +.PN DoRed , +.PN DoGreen , +and +.PN DoBlue +flags. +.LP +.PN XQueryColor +can generate +.PN BadColor +and +.PN BadValue +errors. +.LP +.sp +To query the RGB values of multiple colormap cells, use +.PN XQueryColors . +.IN "Color" "querying" +.IN "XQueryColors" "" "@DEF@" +.sM +.FD 0 +XQueryColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIdefs_in_out\fP\^, \fIncolors\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XColor \fIdefs_in_out\fP[\^]\^; +.br + int \fIncolors\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIdefs_in_out\fP 1i +Specifies and returns an array of color definition structures for the pixel +specified in the structure. +.IP \fIncolors\fP 1i +.\"Specifies the number of color definition structures. +Specifies the number of +.PN XColor +structures in the color definition array. +.LP +.eM +The +.PN XQueryColors +function returns the RGB value for each pixel in each +.PN XColor +structure and sets the +.PN DoRed , +.PN DoGreen , +and +.PN DoBlue +flags in each structure. + +.LP +.PN XQueryColors +can generate +.PN BadColor +and +.PN BadValue +errors. +.sp +.LP +To query the color of a single colormap cell in an arbitrary format, use +.PN XcmsQueryColor . +.IN "Color" "querying" +.IN "XcmsQueryColor" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryColor\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolor_in_out\fP\^, \fIresult_format\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XcmsColor *\fIcolor_in_out\fP\^; +.br + XcmsColorFormat \fIresult_format\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolor_in_out\fP 1i +Specifies the pixel member that indicates the color cell to query. +The color specification stored for the color cell is returned in this +.PN XcmsColor +structure. +.IP \fIresult_format\fP 1i +Specifies the color format for the returned color specification. +.LP +.eM +The +.PN XcmsQueryColor +function obtains the RGB value +for the pixel value in the pixel member of the specified +.PN XcmsColor +structure and then +converts the value to the target format as +specified by the result_format argument. +If the pixel is not a valid index in the specified colormap, a +.PN BadValue +error results. +.LP +.PN XcmsQueryColor +can generate +.PN BadColor +and +.PN BadValue +errors. +.sp +.LP +To query the color of multiple colormap cells in an arbitrary format, use +.PN XcmsQueryColors . +.IN "Color" "querying" +.IN "XcmsQueryColors" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryColors\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fIresult_format\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XcmsColor \fIcolors_in_out\fP\^[\^]\^; +.br + unsigned int \fIncolors\fP\^; +.br + XcmsColorFormat \fIresult_format\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIcolors_in_out\fP 1i +Specifies an array of +.PN XcmsColor +structures, each pixel member indicating the color cell to query. +The color specifications for the color cells are returned in these structures. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.IP \fIresult_format\fP 1i +Specifies the color format for the returned color specification. +.LP +.eM +The +.PN XcmsQueryColors +function obtains the RGB values +for pixel values in the pixel members of +.PN XcmsColor +structures and then +converts the values to the target format as +specified by the result_format argument. +If a pixel is not a valid index into the specified colormap, a +.PN BadValue +error results. +If more than one pixel is in error, +the one that gets reported is arbitrary. +.LP +.PN XcmsQueryColors +can generate +.PN BadColor +and +.PN BadValue +errors. +.NH 2 +Color Conversion Context Functions +.XS +\*(SN Color Conversion Context Functions +.XE +.LP +This section describes functions to create, modify, +and query Color Conversion Contexts (CCCs). +.LP +Associated with each colormap is an initial CCC transparently generated by +Xlib. +.IN "Color Conversion Context" "creation" +Therefore, when you specify a colormap as an argument to a function, +you are indirectly specifying a CCC. +.IN "CCC" "of colormap" +.IN "Color Conversion Context" "of colormap" +The CCC attributes that can be modified by the X client are: +.IP \(bu 5 +Client White Point +.IP \(bu 5 +Gamut compression procedure and client data +.IP \(bu 5 +White point adjustment procedure and client data +.LP +The initial values for these attributes are implementation specific. +The CCC attributes for subsequently created CCCs can be defined +by changing the CCC attributes of the default CCC. +.IN "CCC" "default" +.IN "Color Conversion Context" "default" +There is a default CCC associated with each screen. +.NH 3 +Getting and Setting the Color Conversion Context of a Colormap +.XS +\*(SN Getting and Setting the Color Conversion Context of a Colormap +.XE +.LP +.sp +To obtain the CCC associated with a colormap, use +.PN XcmsCCCOfColormap . +.IN "XcmsCCCOfColormap" "" "@DEF@" +.IN "Colormap" "CCC of" +.IN "CCC" "of colormap" +.IN "Color Conversion Context" "of colormap" +.sM +.FD 0 +XcmsCCC XcmsCCCOfColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.LP +.eM +The +.PN XcmsCCCOfColormap +function returns the CCC associated with the specified colormap. +Once obtained, +the CCC attributes can be queried or modified. +Unless the CCC associated with the specified colormap is changed with +.PN XcmsSetCCCOfColormap , +this CCC is used when the specified colormap is used as an argument +to color functions. +.sp +.LP +To change the CCC associated with a colormap, use +.PN XcmsSetCCCOfColormap . +.IN "XcmsSetCCCOfColormap" "" "@DEF@" +.IN "Colormap" "CCC of" +.IN "CCC" "of colormap" +.IN "Color Conversion Context" "of colormap" +.sM +.FD 0 +XcmsCCC XcmsSetCCCOfColormap\^(\^\fIdisplay\fP, \fIcolormap\fP\^, \fIccc\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Colormap \fIcolormap\fP\^; +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIcolormap\fP 1i +Specifies the colormap. +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +The +.PN XcmsSetCCCOfColormap +function changes the CCC associated with the specified colormap. +It returns the CCC previously associated with the colormap. +If they are not used again in the application, +CCCs should be freed by calling +.PN XcmsFreeCCC . +Several colormaps may share the same CCC without restriction; this +includes the CCCs generated by Xlib with each colormap. Xlib, however, +creates a new CCC with each new colormap. +.NH 3 +Obtaining the Default Color Conversion Context +.XS +\*(SN Obtaining the Default Color Conversion Context +.XE +.LP +You can change the default CCC attributes for subsequently created CCCs +by changing the CCC attributes of the default CCC. +.IN "CCC" "default" +.IN "Color Conversion Context" "default" +A default CCC is associated with each screen. +.sp +.LP +To obtain the default CCC for a screen, use +.PN XcmsDefaultCCC . +.IN "XcmsDefaultCCC" "" "@DEF@" +.IN "Color Conversion Context" "default" +.IN "CCC" "default" +.sM +.FD 0 +XcmsCCC XcmsDefaultCCC\^(\^\fIdisplay\fP, \fIscreen_number\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + int \fIscreen_number\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIscreen_number\fP 1i +Specifies the appropriate screen number on the host server. +.LP +.eM +The +.PN XcmsDefaultCCC +function returns the default CCC for the specified screen. +Its visual is the default visual of the screen. +Its initial gamut compression and white point +adjustment procedures as well as the associated client data are implementation +specific. +.NH 3 +Color Conversion Context Macros +.XS +\*(SN Color Conversion Context Macros +.XE +.LP +Applications should not directly modify any part of the +.PN XcmsCCC . +The following lists the C language macros, their corresponding function +equivalents for other language bindings, and what data they both +can return. +.sp +.LP +.IN "DisplayOfCCC" "" "@DEF@" +.IN "XcmsDisplayOfCCC" "" "@DEF@" +.sM +.FD 0 +DisplayOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.sp +Display *XcmsDisplayOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +Both return the display associated with the specified CCC. +.LP +.sp +.IN "VisualOfCCC" "" "@DEF@" +.IN "XcmsVisualOfCCC" "" "@DEF@" +.sM +.FD 0 +VisualOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.sp +Visual *XcmsVisualOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +Both return the visual associated with the specified CCC. +.sp +.LP +.IN "ScreenNumberOfCCC" "" "@DEF@" +.IN "XcmsScreenNumberOfCCC" "" "@DEF@" +.sM +.FD 0 +ScreenNumberOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.sp +int XcmsScreenNumberOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +Both return the number of the screen associated with the specified CCC. +.sp +.LP +.IN "ScreenWhitePointOfCCC" "" "@DEF@" +.IN "XcmsScreenWhitePointOfCCC" "" "@DEF@" +.sM +.FD 0 +ScreenWhitePointOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.sp +XcmsColor *XcmsScreenWhitePointOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +Both return the white point of the screen associated with the specified CCC. +.sp +.LP +.IN "ClientWhitePointOfCCC" "" "@DEF@" +.IN "XcmsClientWhitePointOfCCC" "" "@DEF@" +.sM +.FD 0 +ClientWhitePointOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.sp +XcmsColor *XcmsClientWhitePointOfCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +Both return the Client White Point of the specified CCC. +.NH 3 +Modifying Attributes of a Color Conversion Context +.XS +\*(SN Modifying Attributes of a Color Conversion Context +.XE +.LP +To set the Client White Point in the CCC, use +.PN XcmsSetWhitePoint . +.IN "XcmsSetWhitePoint" "" "@DEF@" +.IN "Client White Point" "of Color Conversion Context" +.sM +.FD 0 +Status XcmsSetWhitePoint\^(\^\fIccc\fP\^, \fIcolor\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColor *\fIcolor\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.ds Co new Client White Point +.IP \fIcolor\fP 1i +Specifies the \*(Co. +.LP +.eM +The +.PN XcmsSetWhitePoint +function changes the Client White Point in the specified CCC. +Note that the pixel member is ignored +and that the color specification is left unchanged upon return. +The format for the new white point must be +.PN XcmsCIEXYZFormat , +.PN XcmsCIEuvYFormat , +.PN XcmsCIExyYFormat , +or +.PN XcmsUndefinedFormat . +If the color argument is NULL, this function sets the format component of the +Client White Point specification to +.PN XcmsUndefinedFormat , +indicating that the Client White Point is assumed to be the same as the +Screen White Point. +.LP +This function returns nonzero status +if the format for the new white point is valid; +otherwise, it returns zero. + +.sp +.LP +To set the gamut compression procedure and corresponding client data +in a specified CCC, use +.PN XcmsSetCompressionProc . +.IN "XcmsSetCompressionProc" "" "@DEF@" +.IN "Gamut compression" "setting in Color Conversion Context" +.IN "Gamut compression" "procedure" +.IN "Gamut compression" "client data" +.sM +.FD 0 +XcmsCompressionProc XcmsSetCompressionProc\^(\^\fIccc\fP\^, \fIcompression_proc\fP\^, \fIclient_data\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsCompressionProc \fIcompression_proc\fP\^; +.br + XPointer \fIclient_data\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.IP \fIcompression_proc\fP 1i +Specifies the gamut compression procedure that is to be applied +when a color lies outside the screen's color gamut. +If NULL is specified and a function using this CCC must convert +a color specification to a device-dependent format and encounters a color +that lies outside the screen's color gamut, +that function will return +.PN XcmsFailure . +.ds Cd the gamut compression procedure +.IP \fIclient_data\fP 1i +Specifies client data for \*(Cd or NULL. +.LP +.eM +The +.PN XcmsSetCompressionProc +function first sets the gamut compression procedure and client data +in the specified CCC with the newly specified procedure and client data +and then returns the old procedure. +.sp +.LP +To set the white point adjustment procedure and corresponding client data +in a specified CCC, use +.PN XcmsSetWhiteAdjustProc . +.IN "XcmsSetWhiteAdjustProc" "" "@DEF@" +.IN "White point adjustment" "setting in Color Conversion Context" +.IN "White point adjustment" "procedure" +.IN "White point adjustment" "client data" +.FD 0 +.sM +XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc\^(\^\fIccc\fP\^, \fIwhite_adjust_proc\fP\^, \fIclient_data\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsWhiteAdjustProc \fIwhite_adjust_proc\fP\^; +.br + XPointer \fIclient_data\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.IP \fIwhite_adjust_proc\fP 1i +Specifies the white point adjustment procedure. +.ds Cd the white point adjustment procedure +.IP \fIclient_data\fP 1i +Specifies client data for \*(Cd or NULL. +.LP +.eM +The +.PN XcmsSetWhiteAdjustProc +function first sets the white point adjustment procedure and client data +in the specified CCC with the newly specified procedure and client data +and then returns the old procedure. +.NH 3 +Creating and Freeing a Color Conversion Context +.XS +\*(SN Creating and Freeing a Color Conversion Context +.XE +.LP +You can explicitly create a CCC within your application by calling +.PN XcmsCreateCCC . +These created CCCs can then be used by those functions that explicitly +call for a CCC argument. +Old CCCs that will not be used by the application should be freed using +.PN XcmsFreeCCC . +.sp +.LP +To create a CCC, use +.PN XcmsCreateCCC . +.IN "XcmsCreateCCC" "" "@DEF@" +.IN "Color Conversion Context" "creation" +.IN "CCC" "creation" +.sM +.FD 0 +XcmsCCC XcmsCreateCCC\^(\^\fIdisplay\fP, \fIscreen_number\fP\^, \fIvisual\fP\^, \fIclient_white_point\fP\^, \fIcompression_proc\fP\^, +.br + \fIcompression_client_data\fP\^, \fIwhite_adjust_proc\fP\^, \fIwhite_adjust_client_data\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + int \fIscreen_number\fP\^; +.br + Visual *\fIvisual\fP\^; +.br + XcmsColor *\fIclient_white_point\fP\^; +.br + XcmsCompressionProc \fIcompression_proc\fP\^; +.br + XPointer \fIcompression_client_data\fP\^; +.br + XcmsWhiteAdjustProc \fIwhite_adjust_proc\fP\^; +.br + XPointer \fIwhite_adjust_client_data\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIscreen_number\fP 1i +Specifies the appropriate screen number on the host server. +.IP \fIvisual\fP 1i +Specifies the visual type. +.IP \fIclient_white_point\fP 1i +Specifies the Client White Point. +If NULL is specified, +the Client White Point is to be assumed to be the same as the +Screen White Point. +Note that the pixel member is ignored. +.IP \fIcompression_proc\fP 1i +Specifies the gamut compression procedure that is to be applied +when a color lies outside the screen's color gamut. +If NULL is specified and a function using this CCC must convert +a color specification to a device-dependent format and encounters a color +that lies outside the screen's color gamut, +that function will return +.PN XcmsFailure . +.IP \fIcompression_client_data\fP 1i +Specifies client data for use by the gamut compression procedure or NULL. +.IP \fIwhite_adjust_proc\fP 1i +Specifies the white adjustment procedure that is to be applied +when the Client White Point differs from the Screen White Point. +NULL indicates that no white point adjustment is desired. +.IP \fIwhite_adjust_client_data\fP 1i +Specifies client data for use with the white point adjustment procedure or NULL. +.LP +.eM +The +.PN XcmsCreateCCC +function creates a CCC for the specified display, screen, and visual. +.LP +.sp +To free a CCC, use +.PN XcmsFreeCCC . +.IN "XcmsFreeCCC" "" "@DEF@" +.IN "Color Conversion Context" "freeing" +.IN "CCC" "freeing" +.sM +.FD 0 +void XcmsFreeCCC\^(\^\fIccc\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.LP +.eM +The +.PN XcmsFreeCCC +function frees the memory used for the specified CCC. +Note that default CCCs and those currently associated with colormaps +are ignored. +.NH 2 +Converting between Color Spaces +.XS +\*(SN Converting between Color Spaces +.XE +.LP +.sp +To convert an array of color specifications in arbitrary color formats +to a single destination format, use +.PN XcmsConvertColors . +.IN "Color conversion" +.IN "Color" "conversion" +.IN "XcmsConvertColors" "" "@DEF@" +.sM +.FD 0 +Status XcmsConvertColors\^(\^\fIccc\fP\^, \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fItarget_format\fP\^, \fIcompression_flags_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColor \fIcolors_in_out\fP\^[\^]\^; +.br + unsigned int \fIncolors\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + Bool \fIcompression_flags_return\fP\^[\^]\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +If conversion is between device-independent color spaces only +(for example, TekHVC to CIELuv), +the CCC is necessary only to specify the Client White Point. +.IP \fIcolors_in_out\fP 1i +Specifies an array of color specifications. +Pixel members are ignored and remain unchanged upon return. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.IP \fIcompression_flags_return\fP 1i +Returns an array of Boolean values indicating compression status. +If a non-NULL pointer is supplied, +each element of the array is set to +.PN True +if the corresponding color was compressed and +.PN False +otherwise. +Pass NULL if the compression status is not useful. +.LP +.eM +The +.PN XcmsConvertColors +function converts the color specifications in the specified array of +.PN XcmsColor +structures from their current format to a single target format, +using the specified CCC. +When the return value is +.PN XcmsFailure , +the contents of the color specification array are left unchanged. +.LP +The array may contain a mixture of color specification formats +(for example, 3 CIE XYZ, 2 CIE Luv, and so on). +When the array contains both device-independent and +device-dependent color specifications and the target_format argument specifies +a device-dependent format (for example, +.PN XcmsRGBiFormat , +.PN XcmsRGBFormat ), +all specifications are converted to CIE XYZ format and then to the target +device-dependent format. +.NH 2 +Callback Functions +.XS +\*(SN Callback Functions +.XE +.LP +This section describes the gamut compression and white point +adjustment callbacks. +.LP +The gamut compression procedure specified in the CCC +is called when an attempt to convert a color specification from +.PN XcmsCIEXYZ +to a device-dependent format (typically +.PN XcmsRGBi ) +results in a color that lies outside the screen's color gamut. +If the gamut compression procedure requires client data, this data is passed +via the gamut compression client data in the CCC. +.LP +During color specification conversion between device-independent +and device-dependent color spaces, +if a white point adjustment procedure is specified in the CCC, +it is triggered when the Client White Point and Screen White Point differ. +If required, the client data is obtained from the CCC. +.NH 3 +Prototype Gamut Compression Procedure +.XS +\*(SN Prototype Gamut Compression Procedure +.XE +.LP +The gamut compression callback interface must adhere to the +following: +.IN "XcmsCompressionProc" "" "@DEF@" +.sM +.FD 0 +typedef Status (*\^XcmsCompressionProc\^)\^(\^\fIccc\fP\^, \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fIindex\fP\^, \fIcompression_flags_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColor \fIcolors_in_out[]\fP\^; +.br + unsigned int \fIncolors\fP\^; +.br + unsigned int \fIindex\fP\^; +.br + Bool \fIcompression_flags_return[]\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.IP \fIcolors_in_out\fP 1i +Specifies an array of color specifications. +Pixel members should be ignored and must remain unchanged upon return. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.IP \fIindex\fP 1i +Specifies the index into the array of +.PN XcmsColor +structures for the encountered color specification that lies outside the +screen's color gamut. +Valid values are 0 (for the first element) to ncolors \- 1. +.IP \fIcompression_flags_return\fP 1i +Returns an array of Boolean values for indicating compression status. +If a non-NULL pointer is supplied +and a color at a given index is compressed, then +.PN True +should be stored at the corresponding index in this array; +otherwise, the array should not be modified. +.LP +.eM +When implementing a gamut compression procedure, consider the following +rules and assumptions: +.IP \(bu 5 +The gamut compression procedure can attempt to compress one or multiple +specifications at a time. +.IP \(bu 5 +When called, elements 0 to index \- 1 in the color specification +array can be assumed to fall within the screen's color gamut. +In addition, these color specifications are already in some device-dependent +format (typically +.PN XcmsRGBi ). +If any modifications are made to these color specifications, +they must be in their initial device-dependent format upon return. +.IP \(bu 5 +When called, the element in the color specification array specified +by the index argument contains the color specification outside the +screen's color gamut encountered by the calling routine. +In addition, this color specification can be assumed to be in +.PN XcmsCIEXYZ . +Upon return, this color specification must be in +.PN XcmsCIEXYZ . +.IP \(bu 5 +When called, elements from index to ncolors \- 1 +in the color specification array may or may not fall within the +screen's color gamut. +In addition, these color specifications can be assumed to be in +.PN XcmsCIEXYZ . +If any modifications are made to these color specifications, +they must be in +.PN XcmsCIEXYZ +upon return. +.IP \(bu 5 +The color specifications passed to the gamut compression procedure +have already been adjusted to the Screen White Point. +This means that at this point the color specification's white point +is the Screen White Point. +.IP \(bu 5 +If the gamut compression procedure uses a device-independent color space not +initially accessible for use in the color management system, use +.PN XcmsAddColorSpace +to ensure that it is added. +.NH 3 +Supplied Gamut Compression Procedures +.XS +\*(SN Supplied Gamut Compression Procedures +.XE +.LP +The following equations are useful in describing gamut compression +functions: +.EQ +delim %% +.EN +.LP +.Ds 0 +%CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )% + +%CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]% + +%CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )% + +%CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]% +.De +.LP +The gamut compression callback procedures provided by Xlib are as follows: +.IP \(bu 5 +.PN XcmsCIELabClipL +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by reducing or increasing CIE metric lightness (L*) +in the CIE L*a*b* color space until the color is within the gamut. +If the Psychometric Chroma of the color specification +is beyond maximum for the Psychometric Hue Angle, +then while maintaining the same Psychometric Hue Angle, +the color will be clipped to the CIE L*a*b* coordinates of maximum +Psychometric Chroma. +See +.PN XcmsCIELabQueryMaxC . +No client data is necessary. +.IP \(bu 5 +.PN XcmsCIELabClipab +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by reducing Psychometric Chroma, +while maintaining Psychometric Hue Angle, +until the color is within the gamut. +No client data is necessary. +.IP \(bu 5 +.PN XcmsCIELabClipLab +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by replacing it with CIE L*a*b* coordinates +that fall within the color gamut while maintaining the original +Psychometric Hue +Angle and whose vector to the original coordinates is the shortest attainable. +No client data is necessary. +.IP \(bu 5 +.PN XcmsCIELuvClipL +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by reducing or increasing CIE metric lightness (L*) +in the CIE L*u*v* color space until the color is within the gamut. +If the Psychometric Chroma of the color specification +is beyond maximum for the Psychometric Hue Angle, +then, while maintaining the same Psychometric Hue Angle, +the color will be clipped to the CIE L*u*v* coordinates of maximum +Psychometric Chroma. +See +.PN XcmsCIELuvQueryMaxC . +No client data is necessary. +.IP \(bu 5 +.PN XcmsCIELuvClipuv +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by reducing +Psychometric Chroma, while maintaining Psychometric Hue Angle, +until the color is within the gamut. +No client data is necessary. +.IP \(bu 5 +.PN XcmsCIELuvClipLuv +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by replacing it with CIE L*u*v* coordinates +that fall within the color gamut while maintaining the original +Psychometric Hue +Angle and whose vector to the original coordinates is the shortest attainable. +No client data is necessary. +.IP \(bu 5 +.PN XcmsTekHVCClipV +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by reducing or increasing the Value dimension +in the TekHVC color space until the color is within the gamut. +If Chroma of the color specification is beyond maximum for the particular Hue, +then, while maintaining the same Hue, +the color will be clipped to the Value and Chroma coordinates +that represent maximum Chroma for that particular Hue. +No client data is necessary. +.IP \(bu 5 +.PN XcmsTekHVCClipC +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by reducing the Chroma dimension +in the TekHVC color space until the color is within the gamut. +No client data is necessary. +.IP \(bu 5 +.PN XcmsTekHVCClipVC +.IP +This brings the encountered out-of-gamut color specification into the +screen's color gamut by replacing it with TekHVC coordinates +that fall within the color gamut while maintaining the original Hue +and whose vector to the original coordinates is the shortest attainable. +No client data is necessary. +.NH 3 +Prototype White Point Adjustment Procedure +.XS +\*(SN Prototype White Point Adjustment Procedure +.XE +.LP +The white point adjustment procedure interface must adhere to the following: +.IN "XcmsWhiteAdjustProc" "" "@DEF@" +.sM +.FD 0 +typedef Status (*\^XcmsWhiteAdjustProc\^)\^(\^\fIccc\fP\^, \fIinitial_white_point\fP\^, \fItarget_white_point\fP\^, \fItarget_format\fP\^, +.br + \fIcolors_in_out\fP\^, \fIncolors\fP\^, \fIcompression_flags_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColor *\fIinitial_white_point\fP\^; +.br + XcmsColor *\fItarget_white_point\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + XcmsColor \fIcolors_in_out[]\fP\^; +.br + unsigned int \fIncolors\fP\^; +.br + Bool \fIcompression_flags_return[]\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.IP \fIinitial_white_point\fP 1i +Specifies the initial white point. +.IP \fItarget_white_point\fP 1i +Specifies the target white point. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.IP \fIcolors_in_out\fP 1i +Specifies an array of color specifications. +Pixel members should be ignored and must remain unchanged upon return. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.IP \fIcompression_flags_return\fP 1i +Returns an array of Boolean values for indicating compression status. +If a non-NULL pointer is supplied +and a color at a given index is compressed, then +.PN True +should be stored at the corresponding index in this array; +otherwise, the array should not be modified. +.LP +.eM +.NH 3 +Supplied White Point Adjustment Procedures +.XS +\*(SN Supplied White Point Adjustment Procedures +.XE +.LP +White point adjustment procedures provided by Xlib are as follows: +.IP \(bu 5 +.PN XcmsCIELabWhiteShiftColors +.IP +This uses the CIE L*a*b* color space for adjusting the chromatic character +of colors to compensate for the chromatic differences between the source +and destination white points. +This procedure simply converts the color specifications to +.PN XcmsCIELab +using the source white point and then converts to the target specification +format using the destination's white point. +No client data is necessary. +.IP \(bu 5 +.PN XcmsCIELuvWhiteShiftColors +.IP +This uses the CIE L*u*v* color space for adjusting the chromatic character +of colors to compensate for the chromatic differences between the source +and destination white points. +This procedure simply converts the color specifications to +.PN XcmsCIELuv +using the source white point and then converts to the target specification +format using the destination's white point. +No client data is necessary. +.IP \(bu 5 +.PN XcmsTekHVCWhiteShiftColors +.IP +This uses the TekHVC color space for adjusting the chromatic character +of colors to compensate for the chromatic differences between the source +and destination white points. +This procedure simply converts the color specifications to +.PN XcmsTekHVC +using the source white point and then converts to the target specification +format using the destination's white point. +An advantage of this procedure over those previously described +is an attempt to minimize hue shift. +No client data is necessary. +.LP +From an implementation point of view, +these white point adjustment procedures convert the color specifications +to a device-independent but white-point-dependent color space +(for example, CIE L*u*v*, CIE L*a*b*, TekHVC) using one white point +and then converting those specifications to the target color space +using another white point. +In other words, +the specification goes in the color space with one white point +but comes out with another white point, +resulting in a chromatic shift based on the chromatic displacement +between the initial white point and target white point. +The CIE color spaces that are assumed to be white-point-independent +are CIE u'v'Y, CIE XYZ, and CIE xyY. +When developing a custom white point adjustment procedure that uses a +device-independent color space not initially accessible for use in the +color management system, use +.PN XcmsAddColorSpace +to ensure that it is added. +.LP +As an example, +if the CCC specifies a white point adjustment procedure +and if the Client White Point and Screen White Point differ, the +.PN XcmsAllocColor +function will use the white point adjustment +procedure twice: +.IP \(bu 5 +Once to convert to +.PN XcmsRGB +.IP \(bu 5 +A second time to convert from +.PN XcmsRGB +.LP +For example, assume the specification is in +.PN XcmsCIEuvY +and the adjustment procedure is +.PN XcmsCIELuvWhiteShiftColors . +During conversion to +.PN XcmsRGB , +the call to +.PN XcmsAllocColor +results in the following series of color specification conversions: +.\" Do these need to be font coded? +.IP \(bu 5 +From +.PN XcmsCIEuvY +to +.PN XcmsCIELuv +using the Client White Point +.IP \(bu 5 +From +.PN XcmsCIELuv +to +.PN XcmsCIEuvY +using the Screen White Point +.IP \(bu 5 +From +.PN XcmsCIEuvY +to +.PN XcmsCIEXYZ +(CIE u'v'Y and XYZ are white-point-independent color spaces) +.IP \(bu 5 +From +.PN XcmsCIEXYZ +to +.PN XcmsRGBi +.IP \(bu 5 +From +.PN XcmsRGBi +to +.PN XcmsRGB +.LP +The resulting RGB specification is passed to +.PN XAllocColor , +and the RGB +specification returned by +.PN XAllocColor +is converted back to +.PN XcmsCIEuvY +by reversing the color conversion sequence. +.NH 2 +Gamut Querying Functions +.XS +\*(SN Gamut Querying Functions +.XE +.LP +This section describes the gamut querying functions that Xlib provides. +These functions allow the client to query the boundary +of the screen's color gamut in terms of the CIE L*a*b*, CIE L*u*v*, +and TekHVC color spaces. +.IN "Gamut querying" +Functions are also provided that allow you to query +the color specification of: +.IP \(bu 5 +White (full-intensity red, green, and blue) +.IP \(bu 5 +Red (full-intensity red while green and blue are zero) +.IP \(bu 5 +Green (full-intensity green while red and blue are zero) +.IP \(bu 5 +Blue (full-intensity blue while red and green are zero) +.IP \(bu 5 +Black (zero-intensity red, green, and blue) +.LP +The white point associated with color specifications passed to +and returned from these gamut querying +functions is assumed to be the Screen White Point. +.IN "Screen White Point" +This is a reasonable assumption, +because the client is trying to query the screen's color gamut. +.LP +The following naming convention is used for the Max and Min functions: +.LP +.Ds 0 +Xcms\fI<color_space>\fPQueryMax\fI<dimensions>\fP + +Xcms\fI<color_space>\fPQueryMin\fI<dimensions>\fP +.De +.LP +The <dimensions> consists of a letter or letters +that identify the dimensions of the color space +that are not fixed. +For example, +.PN XcmsTekHVCQueryMaxC +is given a fixed Hue and Value for which maximum Chroma is found. +.NH 3 +Red, Green, and Blue Queries +.XS +\*(SN Red, Green, and Blue Queries +.XE +.LP +To obtain the color specification for black +(zero-intensity red, green, and blue), use +.PN XcmsQueryBlack . +.IN "XcmsQueryBlack" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryBlack\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.ds Cs zero-intensity red, green, and blue +.IP \fIcolor_return\fP 1i +Returns the color specification in the specified target format +for \*(Cs. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsQueryBlack +function returns the color specification in the specified target format +for zero-intensity red, green, and blue. +.sp +.LP +To obtain the color specification for blue +(full-intensity blue while red and green are zero), use +.PN XcmsQueryBlue . +.IN "XcmsQueryBlue" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryBlue\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.ds Cs full-intensity blue while red and green are zero +.IP \fIcolor_return\fP 1i +Returns the color specification in the specified target format +for \*(Cs. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsQueryBlue +function returns the color specification in the specified target format +for full-intensity blue while red and green are zero. +.sp +.LP +To obtain the color specification for green +(full-intensity green while red and blue are zero), use +.PN XcmsQueryGreen . +.IN "XcmsQueryGreen" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryGreen\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.ds Cs full-intensity green while red and blue are zero +.IP \fIcolor_return\fP 1i +Returns the color specification in the specified target format +for \*(Cs. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsQueryGreen +function returns the color specification in the specified target format +for full-intensity green while red and blue are zero. +.sp +.LP +To obtain the color specification for red +(full-intensity red while green and blue are zero), use +.PN XcmsQueryRed . +.IN "XcmsQueryRed" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryRed\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.ds Cs full-intensity red while green and blue are zero +.IP \fIcolor_return\fP 1i +Returns the color specification in the specified target format +for \*(Cs. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsQueryRed +function returns the color specification in the specified target format +for full-intensity red while green and blue are zero. +.LP +.sp +To obtain the color specification for white +(full-intensity red, green, and blue), use +.PN XcmsQueryWhite . +.IN "XcmsQueryWhite" "" "@DEF@" +.sM +.FD 0 +Status XcmsQueryWhite\^(\^\fIccc\fP\^, \fItarget_format\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColorFormat \fItarget_format\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.IP \fItarget_format\fP 1i +Specifies the target color specification format. +.ds Cs full-intensity red, green, and blue +.IP \fIcolor_return\fP 1i +Returns the color specification in the specified target format +for \*(Cs. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsQueryWhite +function returns the color specification in the specified target format +for full-intensity red, green, and blue. +.NH 3 +CIELab Queries +.XS +\*(SN CIELab Queries +.XE +.LP +The following equations are useful in describing the CIELab query functions: +.EQ +delim %% +.EN +.LP +.IN "Psychometric Hue Angle" +.IN "CIE metric lightness" +.IN "Psychometric Chroma" +.IN "Psychometric Chroma" "maximum" +.Ds 0 +%CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )% + +%CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]% +.De +.sp +To obtain the CIE L*a*b* coordinates of maximum Psychometric Chroma +for a given Psychometric Hue Angle and CIE metric lightness (L*), use +.PN XcmsCIELabQueryMaxC . +.IN "XcmsCIELabQueryMaxC" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELabQueryMaxC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIL_star\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsFloat \fIL_star\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha maximum chroma +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Ls maximum chroma +.IP \fIL_star\fP 1i +Specifies the lightness (L*) at which to find \*(Ls. +.ds Lc maximum chroma +.ds lC hue angle and lightness +.IP \fIcolor_return\fP 1i +Returns the CIE L*a*b* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELabQueryMaxC +function, given a hue angle and lightness, +finds the point of maximum chroma displayable by the screen. +It returns this point in CIE L*a*b* coordinates. +.LP +.sp +To obtain the CIE L*a*b* coordinates of maximum CIE metric lightness (L*) +for a given Psychometric Hue Angle and Psychometric Chroma, use +.PN XcmsCIELabQueryMaxL . +.IN "Psychometric Hue Angle" +.IN "CIE metric lightness" +.IN "CIE metric lightness" "maximum" +.IN "XcmsCIELabQueryMaxL" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELabQueryMaxL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsFloat \fIchroma\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha maximum lightness +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Ch maximum lightness +.IP \fIchroma\fP 1i +Specifies the chroma at which to find \*(Ch. +.ds Lc maximum lightness +.ds lC hue angle and chroma +.IP \fIcolor_return\fP 1i +Returns the CIE L*a*b* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELabQueryMaxL +function, given a hue angle and chroma, +finds the point in CIE L*a*b* color space of maximum +lightness (L*) displayable by the screen. +It returns this point in CIE L*a*b* coordinates. +An +.PN XcmsFailure +return value usually indicates that the given chroma +is beyond maximum for the given hue angle. +.sp +.LP +To obtain the CIE L*a*b* coordinates of maximum Psychometric Chroma +for a given Psychometric Hue Angle, use +.PN XcmsCIELabQueryMaxLC . +.IN "Psychometric Hue Angle" +.IN "Psychometric Chroma" +.IN "CIE metric lightness" +.IN "Psychometric Chroma" "maximum" +.IN "CIE metric lightness" "maximum" +.IN "XcmsCIELabQueryMaxLC" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELabQueryMaxLC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha maximum chroma +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Lc maximum chroma +.ds lC hue angle +.IP \fIcolor_return\fP 1i +Returns the CIE L*a*b* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELabQueryMaxLC +function, given a hue angle, +finds the point of maximum chroma displayable by the screen. +It returns this point in CIE L*a*b* coordinates. +.sp +.LP +To obtain the CIE L*a*b* coordinates of minimum CIE metric lightness (L*) +for a given Psychometric Hue Angle and Psychometric Chroma, use +.PN XcmsCIELabQueryMinL . +.IN "Psychometric Hue Angle" +.IN "CIE metric lightness" +.IN "CIE metric lightness" "minimum" +.IN "XcmsCIELabQueryMinL" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELabQueryMinL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsFloat \fIchroma\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha minimum lightness +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Ch minimum lightness +.IP \fIchroma\fP 1i +Specifies the chroma at which to find \*(Ch. +.ds Lc minimum lightness +.ds lC hue angle and chroma +.IP \fIcolor_return\fP 1i +Returns the CIE L*a*b* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELabQueryMinL +function, given a hue angle and chroma, +finds the point of minimum lightness (L*) displayable by the screen. +It returns this point in CIE L*a*b* coordinates. +An +.PN XcmsFailure +return value usually indicates that the given chroma +is beyond maximum for the given hue angle. +.NH 3 +CIELuv Queries +.XS +\*(SN CIELuv Queries +.XE +.LP +The following equations are useful in describing the CIELuv query functions: +.EQ +delim %% +.EN +.LP +.IN "Psychometric Hue Angle" +.IN "CIE metric lightness" +.IN "Psychometric Chroma" +.IN "Psychometric Chroma" "maximum" +.Ds 0 +%CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )% + +%CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]% +.De +.sp +.LP +To obtain the CIE L*u*v* coordinates of maximum Psychometric Chroma +for a given Psychometric Hue Angle and CIE metric lightness (L*), use +.PN XcmsCIELuvQueryMaxC . +.IN "XcmsCIELuvQueryMaxC" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELuvQueryMaxC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIL_star\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsFloat \fIL_star\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha maximum chroma +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Ls maximum chroma +.IP \fIL_star\fP 1i +Specifies the lightness (L*) at which to find \*(Ls. +.ds Lc maximum chroma +.ds lC hue angle and lightness +.IP \fIcolor_return\fP 1i +Returns the CIE L*u*v* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELuvQueryMaxC +function, given a hue angle and lightness, +finds the point of maximum chroma displayable by the screen. +It returns this point in CIE L*u*v* coordinates. +.sp +.LP +To obtain the CIE L*u*v* coordinates of maximum CIE metric lightness (L*) +for a given Psychometric Hue Angle and Psychometric Chroma, use +.PN XcmsCIELuvQueryMaxL . +.IN "Psychometric Hue Angle" +.IN "CIE metric lightness" +.IN "CIE metric lightness" "maximum" +.IN "XcmsCIELuvQueryMaxL" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELuvQueryMaxL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsFloat \fIchroma\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha maximum lightness +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Ls maximum lightness +.IP \fIL_star\fP 1i +Specifies the lightness (L*) at which to find \*(Ls. +.ds Lc maximum lightness +.ds lC hue angle and chroma +.IP \fIcolor_return\fP 1i +Returns the CIE L*u*v* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELuvQueryMaxL +function, given a hue angle and chroma, +finds the point in CIE L*u*v* color space of maximum +lightness (L*) displayable by the screen. +It returns this point in CIE L*u*v* coordinates. +An +.PN XcmsFailure +return value usually indicates that the given chroma +is beyond maximum for the given hue angle. +.sp +.LP +To obtain the CIE L*u*v* coordinates of maximum Psychometric Chroma +for a given Psychometric Hue Angle, use +.PN XcmsCIELuvQueryMaxLC . +.IN "Psychometric Hue Angle" +.IN "Psychometric Chroma" +.IN "CIE metric lightness" +.IN "Psychometric Chroma" "maximum" +.IN "CIE metric lightness" "maximum" +.IN "XcmsCIELuvQueryMaxLC" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELuvQueryMaxLC\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha maximum chroma +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Lc maximum chroma +.ds lC hue angle +.IP \fIcolor_return\fP 1i +Returns the CIE L*u*v* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELuvQueryMaxLC +function, given a hue angle, +finds the point of maximum chroma displayable by the screen. +It returns this point in CIE L*u*v* coordinates. +.sp +.LP +To obtain the CIE L*u*v* coordinates of minimum CIE metric lightness (L*) +for a given Psychometric Hue Angle and Psychometric Chroma, use +.PN XcmsCIELuvQueryMinL . +.IN "Psychometric Hue Angle" +.IN "CIE metric lightness" +.IN "CIE metric lightness" "minimum" +.IN "XcmsCIELuvQueryMinL" "" "@DEF@" +.sM +.FD 0 +Status XcmsCIELuvQueryMinL\^(\^\fIccc\fP\^, \fIhue_angle\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue_angle\fP\^; +.br + XcmsFloat \fIchroma\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Ha minimum lightness +.IP \fIhue_angle\fP 1i +Specifies the hue angle (in degrees) at which to find \*(Ha. +.ds Ch minimum lightness +.IP \fIchroma\fP 1i +Specifies the chroma at which to find \*(Ch. +.ds Lc minimum lightness +.ds lC hue angle and chroma +.IP \fIcolor_return\fP 1i +Returns the CIE L*u*v* coordinates of \*(Lc +displayable by the screen for the given \*(lC. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsCIELuvQueryMinL +function, given a hue angle and chroma, +finds the point of minimum lightness (L*) displayable by the screen. +It returns this point in CIE L*u*v* coordinates. +An +.PN XcmsFailure +return value usually indicates that the given chroma +is beyond maximum for the given hue angle. +.NH 3 +TekHVC Queries +.XS +\*(SN TekHVC Queries +.XE +.LP +To obtain the maximum Chroma for a given Hue and Value, use +.PN XcmsTekHVCQueryMaxC . +.IN "Chroma" +.IN "Chroma" "maximum" +.IN "XcmsTekHVCQueryMaxC" "" "@DEF@" +.sM +.FD 0 +Status XcmsTekHVCQueryMaxC\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIvalue\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue\fP\^; +.br + XcmsFloat \fIvalue\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Hu in which to find the maximum Chroma +.IP \fIhue\fP 1i +Specifies the Hue \*(Hu. +.ds Va maximum Chroma +.IP \fIvalue\fP 1i +Specifies the Value in which to find the \*(Va. +.ds Lc maximum Chroma along with the actual Hue and Value +.ds lC maximum Chroma +.IP \fIcolor_return\fP 1i +Returns the \*(Lc at which the \*(lC was found. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsTekHVCQueryMaxC +function, given a Hue and Value, +determines the maximum Chroma in TekHVC color space +displayable by the screen. +It returns the maximum Chroma along with the actual Hue +and Value at which the maximum Chroma was found. +.sp +.LP +To obtain the maximum Value for a given Hue and Chroma, use +.PN XcmsTekHVCQueryMaxV . +.IN "Value" +.IN "Value" "maximum" +.IN "XcmsTekHVCQueryMaxV" "" "@DEF@" +.sM +.FD 0 +Status XcmsTekHVCQueryMaxV\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue\fP\^; +.br + XcmsFloat \fIchroma\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Hu in which to find the maximum Value +.IP \fIhue\fP 1i +Specifies the Hue \*(Hu. +.ds Ch maximum Value +.IP \fIchroma\fP 1i +Specifies the chroma at which to find \*(Ch. +.ds Lc maximum Value along with the Hue and Chroma +.ds lC maximum Value +.IP \fIcolor_return\fP 1i +Returns the \*(Lc at which the \*(lC was found. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsTekHVCQueryMaxV +function, given a Hue and Chroma, +determines the maximum Value in TekHVC color space +displayable by the screen. +It returns the maximum Value and the actual Hue and Chroma +at which the maximum Value was found. +.sp +.LP +To obtain the maximum Chroma and Value at which it is reached +for a specified Hue, use +.PN XcmsTekHVCQueryMaxVC . +.IN "Chroma" +.IN "Value" +.IN "Chroma" "maximum" +.IN "Value" "maximum" +.IN "XcmsTekHVCQueryMaxVC" "" "@DEF@" +.sM +.FD 0 +Status XcmsTekHVCQueryMaxVC\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Hu in which to find the maximum Chroma +.IP \fIhue\fP 1i +Specifies the Hue \*(Hu. +.ds Lc color specification in \ +XcmsTekHVC for the maximum Chroma, the Value at which \ +that maximum Chroma is reached, and the actual Hue +.ds lC maximum Chroma +.IP \fIcolor_return\fP 1i +Returns the \*(Lc at which the \*(lC was found. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsTekHVCQueryMaxVC +function, given a Hue, +determines the maximum Chroma in TekHVC color space displayable by the screen +and the Value at which that maximum Chroma is reached. +It returns the maximum Chroma, +the Value at which that maximum Chroma is reached, +and the actual Hue for which the maximum Chroma was found. +.sp +.LP +To obtain a specified number of TekHVC specifications such that they +contain maximum Values for a specified Hue and the +Chroma at which the maximum Values are reached, use +.PN XcmsTekHVCQueryMaxVSamples . +.IN "Chroma" +.IN "Value" +.IN "Chroma" "maximum" +.IN "Value" "maximum" +.IN "XcmsTekHVCQueryMaxVSamples" "" "@DEF@" +.sM +.FD 0 +Status XcmsTekHVCQueryMaxVSamples\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIcolors_return\fP\^, \fInsamples\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue\fP\^; +.br + XcmsColor \fIcolors_return[]\fP\^; +.br + unsigned int \fInsamples\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Hu for maximum Chroma/Value samples +.IP \fIhue\fP 1i +Specifies the Hue \*(Hu. +.IP \fInsamples\fP 1i +Specifies the number of samples. +.IP \fIcolors_return\fP 1i +Returns nsamples of color specifications in XcmsTekHVC +such that the Chroma is the maximum attainable for the Value and Hue. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsTekHVCQueryMaxVSamples +returns nsamples of maximum Value, the Chroma at which that maximum Value +is reached, and the actual Hue for which the maximum Chroma was found. +These sample points may then be used to plot the maximum Value/Chroma +boundary of the screen's color gamut for the specified Hue in TekHVC color +space. +.sp +.LP +To obtain the minimum Value for a given Hue and Chroma, use +.PN XcmsTekHVCQueryMinV . +.IN "Value" +.IN "Value" "minimum" +.IN "XcmsTekHVCQueryMinV" "" "@DEF@" +.sM +.FD 0 +Status XcmsTekHVCQueryMinV\^(\^\fIccc\fP\^, \fIhue\fP\^, \fIchroma\fP\^, \fIcolor_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsFloat \fIhue\fP\^; +.br + XcmsFloat \fIchroma\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +The CCC's Client White Point and white point adjustment procedures +are ignored. +.ds Hu in which to find the minimum Value +.IP \fIhue\fP 1i +Specifies the Hue \*(Hu. +.ds Va minimum Value +.IP \fIvalue\fP 1i +Specifies the Value in which to find the \*(Va. +.ds Lc minimum Value and the actual Hue and Chroma +.ds lC minimum Value +.IP \fIcolor_return\fP 1i +Returns the \*(Lc at which the \*(lC was found. +The white point associated with the returned +color specification is the Screen White Point. +The value returned in the pixel member is undefined. +.LP +.eM +The +.PN XcmsTekHVCQueryMinV +function, given a Hue and Chroma, +determines the minimum Value in TekHVC color space displayable by the screen. +It returns the minimum Value and the actual Hue and Chroma at which +the minimum Value was found. +.NH 2 +Color Management Extensions +.XS +\*(SN Color Management Extensions +.XE +.LP +The Xlib color management facilities can be extended in two ways: +.IP \(bu 5 +Device-Independent Color Spaces +.IP +Device-independent color spaces that are derivable to CIE XYZ +space can be added using the +.PN XcmsAddColorSpace +function. +.IP \(bu 5 +Color Characterization Function Set +.IP +A Color Characterization Function Set consists of +device-dependent color spaces and their functions that +convert between these color spaces and the CIE XYZ +color space, bundled together for a specific class of output devices. +A function set can be added using the +.PN XcmsAddFunctionSet +function. +.NH 3 +Color Spaces +.XS +\*(SN Color Spaces +.XE +.LP +The CIE XYZ color space serves as the hub for all +conversions between device-independent and device-dependent color spaces. +Therefore, the knowledge to convert an +.PN XcmsColor +structure to and from CIE XYZ format is associated with each color space. +For example, conversion from CIE L*u*v* to RGB requires the knowledge +to convert from CIE L*u*v* to CIE XYZ and from CIE XYZ to RGB. +This knowledge is stored as an array of functions that, +when applied in series, will convert the +.PN XcmsColor +structure to or from CIE XYZ format. +This color specification conversion mechanism facilitates +the addition of color spaces. +.LP +Of course, when converting between only device-independent color spaces +or only device-dependent color spaces, +shortcuts are taken whenever possible. +For example, conversion from TekHVC to CIE L*u*v* is performed +by intermediate conversion to CIE u*v*Y and then to CIE L*u*v*, +thus bypassing conversion between CIE u*v*Y and CIE XYZ. +.NH 3 +Adding Device-Independent Color Spaces +.XS +\*(SN Adding Device-Independent Color Spaces +.XE +.LP +To add a device-independent color space, use +.PN XcmsAddColorSpace . +.IN "XcmsAddColorSpace" "" "@DEF@" +.sM +.FD 0 +Status XcmsAddColorSpace\^(\^\fIcolor_space\fP\^) +.br + XcmsColorSpace *\fIcolor_space\fP\^; +.FN +.IP \fIcolor_space\fP 1i +Specifies the device-independent color space to add. +.LP +.eM +The +.PN XcmsAddColorSpace +function makes a device-independent color space (actually an +.PN XcmsColorSpace +structure) accessible by the color management system. +Because format values for unregistered color spaces are assigned at run time, +they should be treated as private to the client. +If references to an unregistered color space must be made +outside the client (for example, storing color specifications +in a file using the unregistered color space), +then reference should be made by color space prefix +(see +.PN XcmsFormatOfPrefix +and +.PN XcmsPrefixOfFormat ). +.LP +If the +.PN XcmsColorSpace +structure is already accessible in the color management system, +.PN XcmsAddColorSpace +returns +.PN XcmsSuccess . +.LP +Note that added +.PN XcmsColorSpaces +must be retained for reference by Xlib. +.NH 3 +Querying Color Space Format and Prefix +.XS +\*(SN Querying Color Space Format and Prefix +.XE +.LP +To obtain the format associated with the color space +associated with a specified color string prefix, use +.PN XcmsFormatOfPrefix . +.IN "XcmsFormatOfPrefix" "" "@DEF@" +.sM +.FD 0 +XcmsColorFormat XcmsFormatOfPrefix\^(\^\fIprefix\fP\^) +.br + char *\fIprefix\fP\^; +.FN +.IP \fIprefix\fP 1i +Specifies the string that contains the color space prefix. +.LP +.eM +The +.PN XcmsFormatOfPrefix +function returns the format for the specified color space prefix +(for example, the string ``CIEXYZ''). +The prefix is case-insensitive. +If the color space is not accessible in the color management system, +.PN XcmsFormatOfPrefix +returns +.PN XcmsUndefinedFormat . +.LP +.sp +To obtain the color string prefix associated with the color space +specified by a color format, use +.PN XcmsPrefixOfFormat . +.IN "XcmsPrefixOfFormat" "" "@DEF@" +.sM +.FD 0 +char *XcmsPrefixOfFormat\^(\^\fIformat\fP\^) +.br + XcmsColorFormat \fIformat\fP\^; +.FN +.IP \fIformat\fP 1i +Specifies the color specification format. +.LP +.eM +The +.PN XcmsPrefixOfFormat +function returns the string prefix associated with the color specification +encoding specified by the format argument. +Otherwise, if no encoding is found, it returns NULL. +The returned string must be treated as read-only. +.NH 3 +Creating Additional Color Spaces +.XS +\*(SN Creating Additional Color Spaces +.XE +.LP +Color space specific information necessary +for color space conversion and color string parsing is stored in an +.PN XcmsColorSpace +structure. +Therefore, a new structure containing this information is required +for each additional color space. +In the case of device-independent color spaces, +a handle to this new structure (that is, by means of a global variable) +is usually made accessible to the client program for use with the +.PN XcmsAddColorSpace +function. +.LP +If a new +.PN XcmsColorSpace +structure specifies a color space not registered with the X Consortium, +they should be treated as private to the client +because format values for unregistered color spaces are assigned at run time. +If references to an unregistered color space must be made outside the +client (for example, storing color specifications in a file using the +unregistered color space), then reference should be made by color space prefix +(see +.PN XcmsFormatOfPrefix +and +.PN XcmsPrefixOfFormat ). +.sM +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef (*XcmsConversionProc)(); +typedef XcmsConversionProc *XcmsFuncListPtr; + /* A NULL terminated list of function pointers*/ + +typedef struct _XcmsColorSpace { + char *prefix; + XcmsColorFormat format; + XcmsParseStringProc parseString; + XcmsFuncListPtr to_CIEXYZ; + XcmsFuncListPtr from_CIEXYZ; + int inverse_flag; +} XcmsColorSpace; +.De +.LP +.eM +The prefix member specifies the prefix that indicates a color string +is in this color space's string format. +For example, the strings ``ciexyz'' or ``CIEXYZ'' for CIE XYZ, +and ``rgb'' or ``RGB'' for RGB. +The prefix is case insensitive. +The format member specifies the color specification format. +Formats for unregistered color spaces are assigned at run time. +The parseString member contains a pointer to the function +that can parse a color string into an +.PN XcmsColor +structure. +This function returns an integer (int): nonzero if it succeeded +and zero otherwise. +The to_CIEXYZ and from_CIEXYZ members contain pointers, +each to a NULL terminated list of function pointers. +When the list of functions is executed in series, +it will convert the color specified in an +.PN XcmsColor +structure from/to the current color space format to/from the CIE XYZ format. +Each function returns an integer (int): nonzero if it succeeded +and zero otherwise. +The white point to be associated with the colors is specified +explicitly, even though white points can be found in the CCC. +The inverse_flag member, if nonzero, specifies that for each function listed +in to_CIEXYZ, +its inverse function can be found in from_CIEXYZ such that: +.LP +.Ds 0 +Given: n = number of functions in each list + +for each i, such that 0 <= i < n + from_CIEXYZ[n - i - 1] is the inverse of to_CIEXYZ[i]. +.De +.LP +This allows Xlib to use the shortest conversion path, +thus bypassing CIE XYZ if possible (for example, TekHVC to CIE L*u*v*). +.NH 3 +Parse String Callback +.XS +\*(SN Parse String Callback +.XE +.LP +The callback in the +.PN XcmsColorSpace +structure for parsing a color string for the particular color space must +adhere to the following software interface specification: +.IN "XcmsParseStringProc" "" "@DEF@" +.sM +.FD 0 +typedef int (*XcmsParseStringProc)\^(\^\fIcolor_string\fP, \fIcolor_return\fP\^) +.br + char *\fIcolor_string\fP\^; +.br + XcmsColor *\fIcolor_return\fP\^; +.FN +.IP \fIcolor_string\fP 1i +Specifies the color string to parse. +.IP \fIcolor_return\fP 1i +Returns the color specification in the color space's format. +.LP +.eM +.NH 3 +Color Specification Conversion Callback +.XS +\*(SN Color Specification Conversion Callback +.XE +.LP +Callback functions in the +.PN XcmsColorSpace +structure for converting a color specification between device-independent +spaces must adhere to the +following software interface specification: +.sM +.FD 0 +Status ConversionProc\^(\^\fIccc\fP, \fIwhite_point\fP, \fIcolors_in_out\fP, \fIncolors\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColor *\fIwhite_point\fP\^; +.br + XcmsColor *\fIcolors_in_out\fP\^; +.br + unsigned int \fIncolors\fP\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.IP \fIwhite_point\fP 1i +Specifies the white point associated with color specifications. +The pixel member should be ignored, +and the entire structure remain unchanged upon return. +.IP \fIcolors_in_out\fP 1i +Specifies an array of color specifications. +Pixel members should be ignored and must remain unchanged upon return. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.LP +.eM +.sp +Callback functions in the +.PN XcmsColorSpace +structure for converting a color specification to or from a device-dependent +space must adhere to the +following software interface specification: +.sM +.FD 0 +Status ConversionProc\^(\^\fIccc\fP, \fIcolors_in_out\fP, \fIncolors\fP, \fIcompression_flags_return\fP\^) +.br + XcmsCCC \fIccc\fP\^; +.br + XcmsColor *\fIcolors_in_out\fP\^; +.br + unsigned int \fIncolors\fP\^; +.br + Bool \fIcompression_flags_return\fP\^[\^]\^; +.FN +.IP \fIccc\fP 1i +Specifies the CCC. +.IP \fIcolors_in_out\fP 1i +Specifies an array of color specifications. +Pixel members should be ignored and must remain unchanged upon return. +.IP \fIncolors\fP 1i +Specifies the number of +.PN XcmsColor +structures in the color-specification array. +.IP \fIcompression_flags_return\fP 1i +Returns an array of Boolean values for indicating compression status. +If a non-NULL pointer is supplied +and a color at a given index is compressed, then +.PN True +should be stored at the corresponding index in this array; +otherwise, the array should not be modified. +.LP +.eM +Conversion functions are available globally for use by other color +spaces. +The conversion functions provided by Xlib are: +.TS H +lw(1.8i) lw(1.8i) lw(1.8i). +_ +.sp 6p +.B +Function Converts from Converts to +.sp 6p +_ +.sp 6p +.TH +.R +T{ +.PN XcmsCIELabToCIEXYZ +T} T{ +.PN XcmsCIELabFormat +T} T{ +.PN XcmsCIEXYZFormat +T} +T{ +.PN XcmsCIELuvToCIEuvY +T} T{ +.PN XcmsCIELuvFormat +T} T{ +.PN XcmsCIEuvYFormat +T} +T{ +.PN XcmsCIEXYZToCIELab +T} T{ +.PN XcmsCIEXYZFormat +T} T{ +.PN XcmsCIELabFormat +T} +T{ +.PN XcmsCIEXYZToCIEuvY +T} T{ +.PN XcmsCIEXYZFormat +T} T{ +.PN XcmsCIEuvYFormat +T} +T{ +.PN XcmsCIEXYZToCIExyY +T} T{ +.PN XcmsCIEXYZFormat +T} T{ +.PN XcmsCIExyYFormat +T} +T{ +.PN XcmsCIEXYZToRGBi +T} T{ +.PN XcmsCIEXYZFormat +T} T{ +.PN XcmsRGBiFormat +T} +T{ +.PN XcmsCIEuvYToCIELuv +T} T{ +.PN XcmsCIEuvYFormat +T} T{ +.PN XcmsCIELabFormat +T} +T{ +.PN XcmsCIEuvYToCIEXYZ +T} T{ +.PN XcmsCIEuvYFormat +T} T{ +.PN XcmsCIEXYZFormat +T} +T{ +.PN XcmsCIEuvYToTekHVC +T} T{ +.PN XcmsCIEuvYFormat +T} T{ +.PN XcmsTekHVCFormat +T} +T{ +.PN XcmsCIExyYToCIEXYZ +T} T{ +.PN XcmsCIExyYFormat +T} T{ +.PN XcmsCIEXYZFormat +T} +T{ +.PN XcmsRGBToRGBi +T} T{ +.PN XcmsRGBFormat +T} T{ +.PN XcmsRGBiFormat +T} +T{ +.PN XcmsRGBiToCIEXYZ +T} T{ +.PN XcmsRGBiFormat +T} T{ +.PN XcmsCIEXYZFormat +T} +T{ +.PN XcmsRGBiToRGB +T} T{ +.PN XcmsRGBiFormat +T} T{ +.PN XcmsRGBFormat +T} +T{ +.PN XcmsTekHVCToCIEuvY +T} T{ +.PN XcmsTekHVCFormat +T} T{ +.PN XcmsCIEuvYFormat +T} +.sp 6p +_ +.TE +.NH 3 +Function Sets +.XS +\*(SN Function Sets +.XE +.IN "Function set" +.IN "Function set" "LINEAR_RGB" +.LP +Functions to convert between device-dependent color spaces +and CIE XYZ may differ for different classes of output devices +(for example, color versus gray monitors). +Therefore, the notion of a Color Characterization Function Set +has been developed. +A function set consists of device-dependent color spaces +and the functions that convert color specifications +between these device-dependent color spaces and the CIE XYZ color space +appropriate for a particular class of output devices. +The function set also contains a function that reads +color characterization data off root window properties. +It is this characterization data that will differ between devices within +a class of output devices. +.IN "Device Color Characterization" +For details about how color characterization data is +stored in root window properties, +see the section on Device Color Characterization in the +\fIInter-Client Communication Conventions Manual\fP. +The LINEAR_RGB function set is provided by Xlib +and will support most color monitors. +Function sets may require data that differs +from those needed for the LINEAR_RGB function set. +In that case, +its corresponding data may be stored on different root window properties. +.NH 3 +Adding Function Sets +.XS +\*(SN Adding Function Sets +.XE +.LP +To add a function set, use +.PN XcmsAddFunctionSet . +.IN "XcmsAddFunctionSet" "" "@DEF@" +.sM +.FD 0 +Status XcmsAddFunctionSet\^(\^\fIfunction_set\fP\^) +.br + XcmsFunctionSet *\fIfunction_set\fP\^; +.FN +.IP \fIfunction_set\fP 1i +Specifies the function set to add. +.LP +.eM +The +.PN XcmsAddFunctionSet +function adds a function set to the color management system. +If the function set uses device-dependent +.PN XcmsColorSpace +structures not accessible in the color management system, +.PN XcmsAddFunctionSet +adds them. +If an added +.PN XcmsColorSpace +structure is for a device-dependent color space not registered +with the X Consortium, +they should be treated as private to the client +because format values for unregistered color spaces are assigned at run time. +If references to an unregistered color space must be made outside the +client (for example, storing color specifications in a file +using the unregistered color space), +then reference should be made by color space prefix +(see +.PN XcmsFormatOfPrefix +and +.PN XcmsPrefixOfFormat ). +.LP +Additional function sets should be added before any calls to other +Xlib routines are made. +If not, the +.PN XcmsPerScrnInfo +member of a previously created +.PN XcmsCCC +does not have the opportunity to initialize +with the added function set. +.NH 3 +Creating Additional Function Sets +.XS +\*(SN Creating Additional Function Sets +.XE +.LP +The creation of additional function sets should be +required only when an output device does not conform to existing +function sets or when additional device-dependent color spaces are necessary. +A function set consists primarily of a collection of device-dependent +.PN XcmsColorSpace +structures and a means to read and store a +screen's color characterization data. +This data is stored in an +.PN XcmsFunctionSet +structure. +A handle to this structure (that is, by means of global variable) +is usually made accessible to the client program for use with +.PN XcmsAddFunctionSet . +.LP +If a function set uses new device-dependent +.PN XcmsColorSpace +structures, +they will be transparently processed into the color management system. +Function sets can share an +.PN XcmsColorSpace +structure for a device-dependent color space. +In addition, multiple +.PN XcmsColorSpace +structures are allowed for a device-dependent color space; +however, a function set can reference only one of them. +These +.PN XcmsColorSpace +structures will differ in the functions to convert to and from CIE XYZ, +thus tailored for the specific function set. +.sM +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct _XcmsFunctionSet { + XcmsColorSpace **DDColorSpaces; + XcmsScreenInitProc screenInitProc; + XcmsScreenFreeProc screenFreeProc; +} XcmsFunctionSet; +.De +.LP +.eM +The DDColorSpaces member is a pointer to a NULL terminated list +of pointers to +.PN XcmsColorSpace +structures for the device-dependent color spaces that are supported +by the function set. +The screenInitProc member is set to the callback procedure (see the following +interface specification) that initializes the +.PN XcmsPerScrnInfo +structure for a particular screen. +.LP +The screen initialization callback must adhere to the following software +interface specification: +.IN "XcmsScreenInitProc" "" "@DEF@" +.sM +.FD 0 +typedef Status (*XcmsScreenInitProc)\^(\^\fIdisplay\fP, \fIscreen_number\fP, \fIscreen_info\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + int \fIscreen_number\fP\^; +.br + XcmsPerScrnInfo *\fIscreen_info\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIscreen_number\fP 1i +Specifies the appropriate screen number on the host server. +.IP \fIscreen_info\fP 1i +Specifies the +.PN XcmsPerScrnInfo +structure, which contains the per screen information. +.LP +.eM +The screen initialization callback in the +.PN XcmsFunctionSet +structure fetches the color characterization data (device profile) for +the specified screen, +typically off properties on the +screen's root window. +It then initializes the specified +.PN XcmsPerScrnInfo +structure. +.IN "Device profile" +.IN "Color Characterization Data" +If successful, the procedure fills in the +.PN XcmsPerScrnInfo +structure as follows: +.IP \(bu 5 +It sets the screenData member to the address +of the created device profile data structure +(contents known only by the function set). +.IP \(bu 5 +It next sets the screenWhitePoint member. +.IP \(bu 5 +It next sets the functionSet member to the address of the +.PN XcmsFunctionSet +structure. +.IP \(bu 5 +It then sets the state member to +.PN XcmsInitSuccess +and finally returns +.PN XcmsSuccess . +.LP +If unsuccessful, the procedure sets the state member to +.PN XcmsInitFailure +and returns +.PN XcmsFailure . +.LP +The +.PN XcmsPerScrnInfo +structure contains: +.sM +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct _XcmsPerScrnInfo { + XcmsColor screenWhitePoint; + XPointer functionSet; + XPointer screenData; + unsigned char state; + char pad[3]; +} XcmsPerScrnInfo; +.De +.LP +.eM +The screenWhitePoint member specifies the white point inherent to +the screen. +The functionSet member specifies the appropriate function set. +The screenData member specifies the device profile. +The state member is set to one of the following: +.IP \(bu 5 +.PN XcmsInitNone +indicates initialization has not been previously attempted. +.IP \(bu 5 +.PN XcmsInitFailure +indicates initialization has been previously attempted but failed. +.IP \(bu 5 +.PN XcmsInitSuccess +indicates initialization has been previously attempted and succeeded. +.LP +The screen free callback must adhere to the following software +interface specification: +.IN "XcmsScreenFreeProc" "" "@DEF@" +.sM +.FD 0 +typedef void (*XcmsScreenFreeProc)\^(\^\fIscreenData\fP\^) +.br + XPointer \fIscreenData\fP\^; +.FN +.IP \fIscreenData\fP 1i +Specifies the data to be freed. +.LP +.eM +This function is called to free the screenData stored in an +.PN XcmsPerScrnInfo +structure. +.bp |