diff options
Diffstat (limited to 'pcl/pccrd.h')
-rw-r--r-- | pcl/pccrd.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/pcl/pccrd.h b/pcl/pccrd.h new file mode 100644 index 000000000..9c922d8d5 --- /dev/null +++ b/pcl/pccrd.h @@ -0,0 +1,137 @@ +/* Portions Copyright (C) 2001 artofcode LLC. + Portions Copyright (C) 1996, 2001 Artifex Software Inc. + Portions Copyright (C) 1988, 2000 Aladdin Enterprises. + This software is based in part on the work of the Independent JPEG Group. + All Rights Reserved. + + This software is distributed under license and may not be copied, modified + or distributed except as expressly authorized under the terms of that + license. Refer to licensing information at http://www.artifex.com/ or + contact Artifex Software, Inc., 101 Lucas Valley Road #110, + San Rafael, CA 94903, (415)492-9861, for further information. */ +/*$Id$ */ + +/* pccrd.h - PCL interface to color rendering dictionaries */ + +#ifndef pccrd_INCLUDED +#define pccrd_INCLUDED + +#include "gx.h" +#include "gsstruct.h" +#include "gsrefct.h" +#include "gsmatrix.h" +#include "gscspace.h" +#include "gscolor2.h" +#include "gscie.h" +#include "gscrd.h" +#include "pcident.h" +#include "pcstate.h" + +/* + * In PCL, color rendering dictionaries are set by the device, but the + * default white point is specified by the language, and the white point + * may be modified by the language via the "View Illuminant" command. + * + * Though trivial in principle, this arrangement is a bit awkward for the + * graphic library as there is no make-unique functionality provided + * for color rendering dictionaries (none is necessary for PostScript as + * color rendering dictionaries may not be modified once they are set). + * + * This code hides some of the structure of the graphic library color + * rendering objects from the rest of the PCL code. + */ + +/* + * The PCL id exists to provide an identifier for a color rendering + * dictionary. Having such an identifier is important to avoid the need + * to repeatedly re-insert the color rendering dictionary into the + * graphic state. + * + * The is_dflt_illum flag is used to optimize the case in which a CRD that + * already uses the default view illuminant is once again set to use this + * view illuminant. + */ +struct pcl_crd_s { + rc_header rc; + bool is_dflt_illum; + gs_cie_render * pgscrd; +}; + +#define private_st_crd_t() \ + gs_private_st_ptrs1( st_crd_t, \ + pcl_crd_t, \ + "pcl color rendering dictionary", \ + crd_enum_ptrs, \ + crd_reloc_ptrs, \ + pgscrd \ + ) + +#ifndef pcl_crd_DEFINED +#define pcl_crd_DEFINED +typedef struct pcl_crd_s pcl_crd_t; +#endif + +/* + * The usual copy, init, and release macros. + */ +#define pcl_crd_init_from(pto, pfrom) \ + BEGIN \ + rc_increment(pfrom); \ + (pto) = (pfrom); \ + END + +#define pcl_crd_copy_from(pto, pfrom) \ + BEGIN \ + if ((pto) != (pfrom)) { \ + rc_increment(pfrom); \ + rc_decrement(pto, "pcl_crd_copy_from"); \ + (pto) = (pfrom); \ + } \ + END + +#define pcl_crd_release(pindexed) \ + rc_decrement(pindexed, "pcl_crd_release") + +/* + * Unlike other elements of the PCL "palette", color rendering dictionaries + * are for the most part not a feature that can be controlled from the language. + * Except for the white point, the parameters of a color rendering dictionary + * are determined by the output device rather than the language. + */ + +/* + * Build the default color rendering dictionary. + * + * This routine should be called only once, and then only when there is no + * current CRD. + * + * Returns 0 on success, < 0 in the event of an error. + */ +int pcl_crd_build_default_crd(pcl_state_t *pcs); + +/* + * Set the viewing illuminant. + * + * Though this code goes through the motions of an "unshare" operation, it + * will almost always allocate a new structure, as the CRD will be referred + * to both by the palette and the graphic state. + * + * Returns 0 on success, < 0 in the event of an error. + */ +int pcl_crd_set_view_illuminant( + pcl_state_t * pcs, + pcl_crd_t ** ppcrd, + const gs_vector3 * pwht_pt +); + +/* + * Set a color rendering dictionary into the graphic state. If the rendering + * dictionary does not yet exist, create a default color rendering dictionary. + * + * Returns 0 on success, < 0 in the event of an error. + */ +int pcl_crd_set_crd(pcl_crd_t **ppcrd, pcl_state_t *pcs); + +void free_crd(gs_memory_t *pmem, void *pvcrd, client_name_t cname); + +#endif /* pccrd_INCLUDED */ |