1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: zcolor1.c 9043 2008-08-28 22:48:19Z giles $ */
15
/* Level 1 extended color operators */
33
/* - currentblackgeneration <proc> */
35
zcurrentblackgeneration(i_ctx_t *i_ctx_p)
40
*op = istate->black_generation;
44
/* - currentcolortransfer <redproc> <greenproc> <blueproc> <grayproc> */
46
zcurrentcolortransfer(i_ctx_t *i_ctx_p)
51
op[-3] = istate->transfer_procs.red;
52
op[-2] = istate->transfer_procs.green;
53
op[-1] = istate->transfer_procs.blue;
54
*op = istate->transfer_procs.gray;
58
/* - currentundercolorremoval <proc> */
60
zcurrentundercolorremoval(i_ctx_t *i_ctx_p)
65
*op = istate->undercolor_removal;
69
/* <proc> setblackgeneration - */
71
zsetblackgeneration(i_ctx_t *i_ctx_p)
77
check_ostack(zcolor_remap_one_ostack - 1);
78
check_estack(1 + zcolor_remap_one_estack);
79
code = gs_setblackgeneration_remap(igs, gs_mapped_transfer, false);
82
istate->black_generation = *op;
84
push_op_estack(zcolor_remap_color);
85
return zcolor_remap_one(i_ctx_p, &istate->black_generation,
86
igs->black_generation, igs,
87
zcolor_remap_one_finish);
90
/* <redproc> <greenproc> <blueproc> <grayproc> setcolortransfer - */
92
zsetcolortransfer(i_ctx_t *i_ctx_p)
101
check_ostack(zcolor_remap_one_ostack * 4 - 4);
102
check_estack(1 + zcolor_remap_one_estack * 4);
103
istate->transfer_procs.red = op[-3];
104
istate->transfer_procs.green = op[-2];
105
istate->transfer_procs.blue = op[-1];
106
istate->transfer_procs.gray = *op;
107
if ((code = gs_setcolortransfer_remap(igs,
108
gs_mapped_transfer, gs_mapped_transfer,
109
gs_mapped_transfer, gs_mapped_transfer,
113
/* Use osp rather than op here, because zcolor_remap_one pushes. */
115
push_op_estack(zcolor_reset_transfer);
116
if ((code = zcolor_remap_one(i_ctx_p,
117
&istate->transfer_procs.red,
118
igs->set_transfer.red, igs,
119
zcolor_remap_one_finish)) < 0 ||
120
(code = zcolor_remap_one(i_ctx_p,
121
&istate->transfer_procs.green,
122
igs->set_transfer.green, igs,
123
zcolor_remap_one_finish)) < 0 ||
124
(code = zcolor_remap_one(i_ctx_p,
125
&istate->transfer_procs.blue,
126
igs->set_transfer.blue, igs,
127
zcolor_remap_one_finish)) < 0 ||
128
(code = zcolor_remap_one(i_ctx_p, &istate->transfer_procs.gray,
129
igs->set_transfer.gray, igs,
130
zcolor_remap_one_finish)) < 0
133
return o_push_estack;
136
/* <proc> setundercolorremoval - */
138
zsetundercolorremoval(i_ctx_t *i_ctx_p)
144
check_ostack(zcolor_remap_one_ostack - 1);
145
check_estack(1 + zcolor_remap_one_estack);
146
code = gs_setundercolorremoval_remap(igs, gs_mapped_transfer, false);
149
istate->undercolor_removal = *op;
151
push_op_estack(zcolor_remap_color);
152
return zcolor_remap_one(i_ctx_p, &istate->undercolor_removal,
153
igs->undercolor_removal, igs,
154
zcolor_remap_one_signed_finish);
158
/* ------ Initialization procedure ------ */
160
const op_def zcolor1_op_defs[] =
162
{"0currentblackgeneration", zcurrentblackgeneration},
163
{"0currentcolortransfer", zcurrentcolortransfer},
164
{"0currentundercolorremoval", zcurrentundercolorremoval},
165
{"1setblackgeneration", zsetblackgeneration},
166
{"4setcolortransfer", zsetcolortransfer},
167
{"1setundercolorremoval", zsetundercolorremoval},