1 /***********************************************************
3 Copyright 1987, 1998 The Open Group
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 Except as contained in this notice, the name of The Open Group shall not be
22 used in advertising or otherwise to promote the sale, use or other dealings
23 in this Software without prior written authorization from The Open Group.
26 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
30 Permission to use, copy, modify, and distribute this software and its
31 documentation for any purpose and without fee is hereby granted,
32 provided that the above copyright notice appear in all copies and that
33 both that copyright notice and this permission notice appear in
34 supporting documentation, and that the name of Digital not be
35 used in advertising or publicity pertaining to distribution of the
36 software without specific, written prior permission.
38 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
39 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
40 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
41 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
42 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
43 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
46 ******************************************************************/
47 #ifdef HAVE_DIX_CONFIG_H
48 #include <dix-config.h>
52 #include "scrnintstr.h"
53 #include "colormapst.h"
58 /* A monochrome frame buffer is a static gray colormap with two entries.
59 * We have a "required list" of length 1. Because we can only support 1
60 * colormap, we never have to change it, but we may have to change the
61 * name we call it. If someone installs a new colormap, we know it must
62 * look just like the old one (because we've checked in dispatch that it was
63 * a valid colormap identifier, and all the colormap IDs for this device
64 * look the same). Nevertheless, we still have to uninstall the old colormap
65 * and install the new one. Similarly, if someone uninstalls a colormap,
66 * we have to install the default map, even though we know those two looked
68 * The required list concept is pretty much irrelevant when you can only
69 * have one map installed at a time.
73 mfbListInstalledColormaps(pScreen
, pmaps
)
77 return miListInstalledColormaps(pScreen
, pmaps
);
82 mfbInstallColormap(pmap
)
85 miInstallColormap(pmap
);
89 mfbUninstallColormap(pmap
)
92 miUninstallColormap(pmap
);
97 mfbResolveColor (pred
, pgreen
, pblue
, pVisual
)
99 unsigned short *pgreen
;
100 unsigned short *pblue
;
104 * Gets intensity from RGB. If intensity is >= half, pick white, else
105 * pick black. This may well be more trouble than it's worth.
107 *pred
= *pgreen
= *pblue
=
110 11L * *pblue
) >> 8) >= (((1<<8)-1)*50)) ? ~0 : 0;
114 mfbCreateColormap(pMap
)
118 unsigned short red0
, green0
, blue0
;
119 unsigned short red1
, green1
, blue1
;
122 pScreen
= pMap
->pScreen
;
123 if (pScreen
->whitePixel
== 0)
125 red0
= green0
= blue0
= ~0;
126 red1
= green1
= blue1
= 0;
130 red0
= green0
= blue0
= 0;
131 red1
= green1
= blue1
= ~0;
134 /* this is a monochrome colormap, it only has two entries, just fill
135 * them in by hand. If it were a more complex static map, it would be
136 * worth writing a for loop or three to initialize it */
138 /* this will be pixel 0 */
140 if (AllocColor(pMap
, &red0
, &green0
, &blue0
, &pix
, 0) != Success
)
143 /* this will be pixel 1 */
144 if (AllocColor(pMap
, &red1
, &green1
, &blue1
, &pix
, 0) != Success
)
151 mfbDestroyColormap (pMap
)
158 mfbCreateDefColormap (pScreen
)
161 return miCreateDefColormap(pScreen
);