home *** CD-ROM | disk | FTP | other *** search
- /*
- * $XConsortium: pgcCmap.c,v 1.2 91/07/16 13:11:53 jap Exp $
- *
- * Copyright IBM Corporation 1987,1988,1989,1990,1991
- *
- * All Rights Reserved
- *
- * License to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of IBM not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND
- * NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL
- * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- */
-
- #define NEED_EVENTS
-
- #include "X.h"
- #include "Xproto.h"
- #include "resource.h"
- #include "misc.h"
- #include "scrnintstr.h"
- #include "screenint.h"
- #include "colormapst.h"
- #include "colormap.h"
- #include "pixmapstr.h"
-
- #include "ibmTrace.h"
-
- #include "pgc.h"
-
- extern pgcScreenRec pgcScreenInfo[] ;
-
- void
- pgcStoreColors( pmap, ndef, pdefs )
- register ColormapPtr pmap ;
- register int ndef ;
- register xColorItem *pdefs ;
- {
- register void (*fnp)() ;
- register int i ;
- int this_is_installed ;
- int index ;
- pgcScreenPtr pPGCScreen ;
-
- index = pmap->pScreen->myNum ;
- pPGCScreen = &pgcScreenInfo[index] ;
-
- this_is_installed = ( pmap == pPGCScreen->InstalledColormap ) ;
-
- for ( fnp = pPGCScreen->setColor ; ndef-- ; pdefs++ ) {
- /* first, resolve colors into possible colors */
- (*pmap->pScreen->ResolveColor)( &(pdefs->red),
- &(pdefs->green),
- &(pdefs->blue),
- pmap->pVisual ) ;
- if ( ( i = pdefs->pixel ) > pmap->pVisual->ColormapEntries )
- ErrorF("pgcStoreColors: Bad pixel number\n") ;
- else {
- /* remember that the index to red is really the entry number */
- pmap->red[i].co.local.red = pdefs->red ;
- pmap->red[i].co.local.green = pdefs->green ;
- pmap->red[i].co.local.blue = pdefs->blue ;
- if ( this_is_installed )
- (*fnp)( i, pdefs->red, pdefs->green, pdefs->blue, index);
- }
- }
-
- return ;
- }
-
- int
- pgcListInstalledColormaps( pScreen, pCmapList )
- register ScreenPtr pScreen ;
- register Colormap *pCmapList ;
- {
- int index ;
- pgcScreenPtr pPGCScreen ;
-
- index = pScreen->myNum ;
- pPGCScreen = &pgcScreenInfo[index] ;
-
- if ( pPGCScreen->InstalledColormap ) {
- *pCmapList = pPGCScreen->InstalledColormap->mid ;
- return 1 ;
- }
- else {
- *pCmapList = 0 ;
- return 0 ;
- }
- /*NOTREACHED*/
- }
-
- void
- pgcInstallColormap( pColormap )
- register ColormapPtr pColormap ;
- {
- register int i ;
- register void (*fnp)() ;
- int index ;
- pgcScreenPtr pPGCScreen ;
- ScreenPtr pScreen = pColormap->pScreen ;
-
- TRACE( ( "pgcInstallColormap(pColormap=x%x)", pColormap ) ) ;
-
- index = pScreen->myNum ;
- pPGCScreen = &pgcScreenInfo[index] ;
-
- if ( !pColormap ) /* Re-Install of NULL map ?? */
- return ;
-
- fnp = pPGCScreen->setColor ;
-
- for ( i = pColormap->pVisual->ColormapEntries ; i-- ; )
- (*fnp)( i,
- pColormap->red[i].co.local.red,
- pColormap->red[i].co.local.green,
- pColormap->red[i].co.local.blue,
- index ) ;
-
- if ( pPGCScreen->InstalledColormap != pColormap ) {
- if ( pPGCScreen->InstalledColormap ) /* Remember it may not exist */
- WalkTree( pScreen, TellLostMap,
- &(pPGCScreen->InstalledColormap->mid) ) ;
- pPGCScreen->InstalledColormap = pColormap ;
- WalkTree( pScreen, TellGainedMap, &(pColormap->mid) ) ;
-
- }
-
- return ;
- }
-
- void
- pgcUninstallColormap( pColormap )
- register ColormapPtr pColormap ;
- {
- register ColormapPtr pCmap ;
-
- TRACE( ( "pgcUninstallColormap(pColormap=x%x)\n", pColormap ) ) ;
-
- pCmap = (ColormapPtr) LookupIDByType( pColormap->pScreen->defColormap,
- RT_COLORMAP ) ;
- if ( pCmap != pColormap ) /* never uninstall the default map */
- (* pColormap->pScreen->InstallColormap)( pCmap ) ;
-
- return ;
- }
-
- pgcRefreshColormaps(pScreen)
- ScreenPtr pScreen ;
- {
- ColormapPtr pCmap ;
- int index ;
- pgcScreenPtr pPGCScreen ;
-
- index = pScreen->myNum ;
- pPGCScreen = &pgcScreenInfo[index] ;
-
- pCmap = pPGCScreen->InstalledColormap ;
- pgcInstallColormap(pCmap);
-
- }
-