diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2010-07-27 19:02:39 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2010-07-27 19:02:39 +0000 |
commit | 269d40cbcc43b41f621ca6d91c182952f60ec48e (patch) | |
tree | 872f2fddd3f2207e57a28595e73886713ce4a77a /xserver/hw/kdrive/src/kcmap.c | |
parent | 917a2249b787451cad3f9697872aeccfd0da3324 (diff) |
Update to xserver 1.8. Tested by many. Ok oga@, todd@.
Diffstat (limited to 'xserver/hw/kdrive/src/kcmap.c')
-rw-r--r-- | xserver/hw/kdrive/src/kcmap.c | 151 |
1 files changed, 50 insertions, 101 deletions
diff --git a/xserver/hw/kdrive/src/kcmap.c b/xserver/hw/kdrive/src/kcmap.c index 92ce5b920..40697e091 100644 --- a/xserver/hw/kdrive/src/kcmap.c +++ b/xserver/hw/kdrive/src/kcmap.c @@ -1,6 +1,4 @@ /* - * Id: kcmap.c,v 1.1 1999/11/02 03:54:46 keithp Exp $ - * * Copyright © 1999 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its @@ -21,7 +19,6 @@ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ -/* $RCSId: xc/programs/Xserver/hw/kdrive/kcmap.c,v 1.4 2000/05/24 23:57:56 keithp Exp $ */ #ifdef HAVE_CONFIG_H #include <kdrive-config.h> @@ -33,10 +30,10 @@ */ void -KdSetColormap (ScreenPtr pScreen, int fb) +KdSetColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); - ColormapPtr pCmap = pScreenPriv->pInstalledmap[fb]; + ColormapPtr pCmap = pScreenPriv->pInstalledmap; Pixel pixels[KD_MAX_PSEUDO_SIZE]; xrgb colors[KD_MAX_PSEUDO_SIZE]; xColorItem defs[KD_MAX_PSEUDO_SIZE]; @@ -44,12 +41,12 @@ KdSetColormap (ScreenPtr pScreen, int fb) if (!pScreenPriv->card->cfuncs->putColors) return; - if (pScreenPriv->screen->fb[fb].depth > KD_MAX_PSEUDO_DEPTH) + if (pScreenPriv->screen->fb.depth > KD_MAX_PSEUDO_DEPTH) return; - + if (!pScreenPriv->enabled) return; - + if (!pCmap) return; @@ -57,13 +54,13 @@ KdSetColormap (ScreenPtr pScreen, int fb) * Make DIX convert pixels into RGB values -- this handles * true/direct as well as pseudo/static visuals */ - - for (i = 0; i < (1 << pScreenPriv->screen->fb[fb].depth); i++) + + for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) pixels[i] = i; - QueryColors (pCmap, (1 << pScreenPriv->screen->fb[fb].depth), pixels, colors); - - for (i = 0; i < (1 << pScreenPriv->screen->fb[fb].depth); i++) + QueryColors (pCmap, (1 << pScreenPriv->screen->fb.depth), pixels, colors); + + for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) { defs[i].pixel = i; defs[i].red = colors[i].red; @@ -72,8 +69,8 @@ KdSetColormap (ScreenPtr pScreen, int fb) defs[i].flags = DoRed|DoGreen|DoBlue; } - (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, fb, - (1 << pScreenPriv->screen->fb[fb].depth), + (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, + (1 << pScreenPriv->screen->fb.depth), defs); /* recolor hardware cursor */ @@ -90,77 +87,35 @@ KdEnableColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); int i; - int fb; - Bool done = FALSE; if (!pScreenPriv->card->cfuncs->putColors) return; - for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++) + + if (pScreenPriv->screen->fb.depth <= KD_MAX_PSEUDO_DEPTH) { - if (pScreenPriv->screen->fb[fb].depth <= KD_MAX_PSEUDO_DEPTH && !done) - { - for (i = 0; i < (1 << pScreenPriv->screen->fb[fb].depth); i++) - pScreenPriv->systemPalette[i].pixel = i; - (*pScreenPriv->card->cfuncs->getColors) (pScreen, fb, - (1 << pScreenPriv->screen->fb[fb].depth), - pScreenPriv->systemPalette); - done = TRUE; - } - KdSetColormap (pScreen, fb); + for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) + pScreenPriv->systemPalette[i].pixel = i; + (*pScreenPriv->card->cfuncs->getColors) (pScreen, + (1 << pScreenPriv->screen->fb.depth), + pScreenPriv->systemPalette); } + KdSetColormap (pScreen); } void KdDisableColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); - int fb; if (!pScreenPriv->card->cfuncs->putColors) return; - for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++) - { - if (pScreenPriv->screen->fb[fb].depth <= KD_MAX_PSEUDO_DEPTH) - { - (*pScreenPriv->card->cfuncs->putColors) (pScreen, fb, - (1 << pScreenPriv->screen->fb[fb].depth), - pScreenPriv->systemPalette); - break; - } - } -} -static int -KdColormapFb (ColormapPtr pCmap) -{ - ScreenPtr pScreen = pCmap->pScreen; - KdScreenPriv (pScreen); - KdScreenInfo *screen = pScreenPriv->screen; - int d; - DepthPtr depth; - int v; - VisualID vid = pCmap->pVisual->vid; - int fb; - - if (screen->fb[1].depth) + if (pScreenPriv->screen->fb.depth <= KD_MAX_PSEUDO_DEPTH) { - for (d = 0; d < pScreen->numDepths; d++) - { - depth = &pScreen->allowedDepths[d]; - for (v = 0; v < depth->numVids; v++) - { - if (depth->vids[v] == vid) - { - for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++) - { - if (depth->depth == screen->fb[fb].depth) - return fb; - } - } - } - } + (*pScreenPriv->card->cfuncs->putColors) (pScreen, + (1 << pScreenPriv->screen->fb.depth), + pScreenPriv->systemPalette); } - return 0; } /* @@ -176,21 +131,20 @@ void KdInstallColormap (ColormapPtr pCmap) { KdScreenPriv(pCmap->pScreen); - int fb = KdColormapFb (pCmap); - if (pCmap == pScreenPriv->pInstalledmap[fb]) + if (pCmap == pScreenPriv->pInstalledmap) return; /* Tell X clients that the installed colormap is going away. */ - if (pScreenPriv->pInstalledmap[fb]) - WalkTree(pScreenPriv->pInstalledmap[fb]->pScreen, TellLostMap, - (pointer) &(pScreenPriv->pInstalledmap[fb]->mid)); + if (pScreenPriv->pInstalledmap) + WalkTree(pScreenPriv->pInstalledmap->pScreen, TellLostMap, + (pointer) &(pScreenPriv->pInstalledmap->mid)); /* Take note of the new installed colorscreen-> */ - pScreenPriv->pInstalledmap[fb] = pCmap; + pScreenPriv->pInstalledmap = pCmap; + + KdSetColormap (pCmap->pScreen); - KdSetColormap (pCmap->pScreen, fb); - /* Tell X clients of the new colormap */ WalkTree(pCmap->pScreen, TellGainedMap, (pointer) &(pCmap->mid)); } @@ -198,7 +152,7 @@ KdInstallColormap (ColormapPtr pCmap) /* * KdUninstallColormap * - * This function uninstalls a colormap by either installing + * This function uninstalls a colormap by either installing * the default X colormap or erasing the installed colormap pointer. * The default X colormap itself cannot be uninstalled. */ @@ -206,12 +160,11 @@ void KdUninstallColormap (ColormapPtr pCmap) { KdScreenPriv(pCmap->pScreen); - int fb = KdColormapFb (pCmap); Colormap defMapID; ColormapPtr defMap; /* ignore if not installed */ - if (pCmap != pScreenPriv->pInstalledmap[fb]) + if (pCmap != pScreenPriv->pInstalledmap) return; /* ignore attempts to uninstall default colormap */ @@ -219,16 +172,17 @@ KdUninstallColormap (ColormapPtr pCmap) if ((Colormap) pCmap->mid == defMapID) return; - /* install default if on same fb */ - defMap = (ColormapPtr) LookupIDByType(defMapID, RT_COLORMAP); - if (defMap && KdColormapFb (defMap) == fb) + /* install default */ + dixLookupResourceByType((pointer *)&defMap, defMapID, RT_COLORMAP, + serverClient, DixInstallAccess); + if (defMap) (*pCmap->pScreen->InstallColormap)(defMap); else { /* uninstall and clear colormap pointer */ WalkTree(pCmap->pScreen, TellLostMap, (pointer) &(pCmap->mid)); - pScreenPriv->pInstalledmap[fb] = 0; + pScreenPriv->pInstalledmap = 0; } } @@ -236,16 +190,12 @@ int KdListInstalledColormaps (ScreenPtr pScreen, Colormap *pCmaps) { KdScreenPriv(pScreen); - int fb; int n = 0; - - for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++) + + if (pScreenPriv->pInstalledmap) { - if (pScreenPriv->pInstalledmap[fb]) - { - *pCmaps++ = pScreenPriv->pInstalledmap[fb]->mid; - n++; - } + *pCmaps++ = pScreenPriv->pInstalledmap->mid; + n++; } return n; } @@ -263,20 +213,19 @@ KdStoreColors (ColormapPtr pCmap, int ndef, xColorItem *pdefs) KdScreenPriv(pCmap->pScreen); VisualPtr pVisual; xColorItem expanddefs[KD_MAX_PSEUDO_SIZE]; - int fb = KdColormapFb (pCmap); - if (pCmap != pScreenPriv->pInstalledmap[fb]) + if (pCmap != pScreenPriv->pInstalledmap) return; - + if (!pScreenPriv->card->cfuncs->putColors) return; - - if (pScreenPriv->screen->fb[fb].depth > KD_MAX_PSEUDO_DEPTH) + + if (pScreenPriv->screen->fb.depth > KD_MAX_PSEUDO_DEPTH) return; - + if (!pScreenPriv->enabled) return; - + /* Check for DirectColor or TrueColor being simulated on a PseudoColor device. */ pVisual = pCmap->pVisual; if ((pVisual->class | DynamicClass) == DirectColor) @@ -289,8 +238,8 @@ KdStoreColors (ColormapPtr pCmap, int ndef, xColorItem *pdefs) pdefs = expanddefs; } - (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, fb, ndef, pdefs); - + (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, ndef, pdefs); + /* recolor hardware cursor */ if (pScreenPriv->card->cfuncs->recolorCursor) (*pScreenPriv->card->cfuncs->recolorCursor) (pCmap->pScreen, ndef, pdefs); |