Home | History | Annotate | Line # | Download | only in xcms
      1 
      2 /*
      3  * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
      4  * 	All Rights Reserved
      5  *
      6  * This file is a component of an X Window System-specific implementation
      7  * of Xcms based on the TekColor Color Management System.  Permission is
      8  * hereby granted to use, copy, modify, sell, and otherwise distribute this
      9  * software and its documentation for any purpose and without fee, provided
     10  * that this copyright, permission, and disclaimer notice is reproduced in
     11  * all copies of this software and in supporting documentation.  TekColor
     12  * is a trademark of Tektronix, Inc.
     13  *
     14  * Tektronix makes no representation about the suitability of this software
     15  * for any purpose.  It is provided "as is" and with all faults.
     16  *
     17  * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
     18  * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
     19  * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
     20  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
     21  * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
     22  * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     23  * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
     24  *
     25  *
     26  *	NAME
     27  *		XcmsStCols.c
     28  *
     29  *	DESCRIPTION
     30  *		Source for XcmsStoreColors
     31  *
     32  *
     33  */
     34 
     35 #ifdef HAVE_CONFIG_H
     36 #include <config.h>
     37 #endif
     38 #include "Xlibint.h"
     39 #include "Xcmsint.h"
     40 #include "Cv.h"
     41 #include "reallocarray.h"
     42 
     43 
     44 /************************************************************************
     46  *									*
     47  *			PUBLIC ROUTINES					*
     48  *									*
     49  ************************************************************************/
     50 
     51 /*
     52  *	NAME
     53  *		XcmsStoreColors - Store Colors
     54  *
     55  *	SYNOPSIS
     56  */
     57 Status
     58 XcmsStoreColors(
     59     Display *dpy,
     60     Colormap colormap,
     61     XcmsColor *pColors_in,
     62     unsigned int nColors,
     63     Bool *pCompressed)
     64 /*
     65  *	DESCRIPTION
     66  *		Given device-dependent or device-independent color
     67  *		specifications, this routine will convert them to X RGB
     68  *		values then use it in a call to XStoreColors.
     69  *
     70  *	RETURNS
     71  *		XcmsFailure if failed;
     72  *		XcmsSuccess if it succeeded without gamut compression;
     73  *		XcmsSuccessWithCompression if it succeeded with gamut
     74  *			compression;
     75  *
     76  *		Since XStoreColors has no return value, this routine
     77  *		does not return color specifications of the colors actually
     78  *		stored.
     79  */
     80 {
     81     XcmsColor Color1;
     82     XcmsColor *pColors_tmp;
     83     Status retval;
     84 
     85     /*
     86      * Make copy of array of color specifications so we don't
     87      * overwrite the contents.
     88      */
     89     if (nColors > 1) {
     90 	pColors_tmp = Xmallocarray(nColors, sizeof(XcmsColor));
     91 	if (pColors_tmp == NULL)
     92 	    return(XcmsFailure);
     93     } else {
     94 	pColors_tmp = &Color1;
     95     }
     96     memcpy((char *)pColors_tmp, (char *)pColors_in,
     97  	    nColors * sizeof(XcmsColor));
     98 
     99     /*
    100      * Call routine to store colors using the copied color structures
    101      */
    102     retval = _XcmsSetGetColors (XStoreColors, dpy, colormap,
    103 	    pColors_tmp, nColors, XcmsRGBFormat, pCompressed);
    104 
    105     /*
    106      * Free copies as needed.
    107      */
    108     if (nColors > 1) {
    109 	Xfree(pColors_tmp);
    110     }
    111 
    112     /*
    113      * Ah, finally return.
    114      */
    115     return(retval);
    116 }
    117