summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'base/gscrdp.h')
-rw-r--r--base/gscrdp.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/base/gscrdp.h b/base/gscrdp.h
new file mode 100644
index 00000000..f443ca95
--- /dev/null
+++ b/base/gscrdp.h
@@ -0,0 +1,103 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* Interface for device-specified CRDs */
+
+#ifndef gscrdp_INCLUDED
+# define gscrdp_INCLUDED
+
+#include "gscie.h"
+#include "gsparam.h"
+#include "gsdevice.h"
+
+/*
+ * A driver can provide any number of its own CRDs through (read-only)
+ * device parameters whose values are slightly modified PostScript-style
+ * dictionaries. The driver doesn't need to concern itself with how the
+ * parameters are encoded: it simply constructs a CRD and calls
+ * param_write_cie_render1.
+ *
+ * Logically, the pcrd parameter for this procedure and the next one
+ * should be declared as const gs_cie_render *, but the procedures may
+ * cause certain cached (idempotent) values to be computed.
+ */
+int param_write_cie_render1(gs_param_list * plist, gs_param_name key,
+ gs_cie_render * pcrd,
+ gs_memory_t * mem);
+
+/*
+ * For internal use, we also provide an API that writes the CRD directly
+ * into a parameter list, rather than as a named parameter in a larger
+ * list.
+ */
+int param_put_cie_render1(gs_param_list * plist, gs_cie_render * pcrd,
+ gs_memory_t * mem);
+
+/*
+ * Client code that wants to initialize a CRD from a device parameter
+ * uses the following complementary procedure. The customary way to
+ * use this is:
+
+ gs_c_param_list list;
+ ...
+ gs_c_param_list_write(&list, mem);
+ gs_c_param_request(&list, "ParamName");
+ code = gs_getdeviceparams(dev, &list);
+ << error if code < 0 >>
+ gs_c_param_list_read(&list);
+ code = gs_cie_render1_param_initialize(pcrd, &list, "ParamName", dev);
+ gs_c_param_list_release(&list);
+ << error if code < 0 >>
+
+ * where "ParamName" is the parameter name, e.g., "CRDDefault".
+ */
+int gs_cie_render1_param_initialize(gs_cie_render * pcrd,
+ gs_param_list * plist,
+ gs_param_name key,
+ gx_device * dev);
+
+/*
+ * Again, we provide an internal procedure that doesn't involve a
+ * parameter name.
+ */
+int param_get_cie_render1(gs_cie_render * pcrd,
+ gs_param_list * plist,
+ gx_device * dev);
+
+/*
+ * The actual representation of the CRD is a slightly modified PostScript
+ * ColorRenderingType 1 dictionary. THE FOLLOWING IS SUBJECT TO CHANGE
+ * WITHOUT NOTICE. Specifically, the following keys are different:
+ * ColorRenderingType = GX_DEVICE_CRD1_TYPE
+ */
+#define GX_DEVICE_CRD1_TYPE 101
+/*
+ * (Instead of TransformPQR = [T1 T2 T3]:)
+ * TransformPQRName = procedure name (a name)
+ * TransformPQRData = procedure data (a string)
+ * (Instead of EncodeLMN/ABC = [E1 E2 E3]:)
+ * EncodeLMN/ABCValues = [V1,1 V1,2 ... V3,N], where Vi,j is the
+ * j'th sampled value of the i'th encoding array, mapped linearly
+ * to the corresponding domain (see gscie.h)
+ * (Instead of RenderTable = [NA NB NC table m T1 ... Tm]:)
+ * RenderTableSize = [NA NB NC m]
+ * RenderTableTable = table (an array of strings)
+ * RenderTableTValues = [V1,1 V1,2 ... Vm,N] (see above)
+ * The PostScript setcolorrendering operator selects the correct operator
+ * according to the ColorRenderingType key.
+ */
+
+#endif /* gscrdp_INCLUDED */