summaryrefslogtreecommitdiff
path: root/psi/zdevice.c
diff options
context:
space:
mode:
authorRay Johnston <ray.johnston@artifex.com>2020-11-03 22:00:17 -0800
committerMichael Vrhel <michael.vrhel@artifex.com>2020-11-04 16:29:48 -0800
commitbdf7cf8b6c7c97531aac14e16b9d2c16775ae8c8 (patch)
treea69a0a8d5ddd9838d39d4b37c0ac69322d51c4dd /psi/zdevice.c
parente6d34e7d08dac91b5b3b858c23e186a0d3bcbefc (diff)
downloadghostpdl-bdf7cf8b6c7c97531aac14e16b9d2c16775ae8c8.tar.gz
Fix Bug 702034. Missing image to DeviceN devices.
The file from Bug 693300 has a blank image when going to DeviceN devices such as psdcmyk and tiffsep. The CompatibleOverprint blend mode must be set before the transparency group is pushed. Add a .special_op for SupportsDevn to let the PostScript PDF interpreter detect that the device supports separations. Make sure the mark fill rect for the knockout case handles the hybrid case of additive process colors with subtractive spots and overprint. And make sure the group that is pushed in gstrans.c for text knockouts uses compatible overprint if needed. Ray did the PS parts and Michael did the pdf14dev parts.
Diffstat (limited to 'psi/zdevice.c')
-rw-r--r--psi/zdevice.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/psi/zdevice.c b/psi/zdevice.c
index 6cc7aab1a..8a3767273 100644
--- a/psi/zdevice.c
+++ b/psi/zdevice.c
@@ -590,6 +590,7 @@ struct spec_op_s {
spec_op_t spec_op_defs[] = {
{(char *)"GetDeviceParam", 0},
{(char *)"EventInfo", 1},
+ {(char *)"SupportsDevn", 2},
};
/* <any> <any> .... /spec_op name .special_op <any> <any> .....
@@ -684,8 +685,8 @@ zspec_op(i_ctx_t *i_ctx_p)
stack_param_list list;
dev_param_req_t request;
ref rkeys;
- /* Get a single device parameter, we should be supplied with
- * the name of the paramter, as a name object.
+ /* EventInfo we should be supplied with a name object which we
+ * pass as the event info to the dev_spec_op
*/
check_op(1);
if (!r_has_type(op, t_name))
@@ -723,6 +724,19 @@ zspec_op(i_ctx_t *i_ctx_p)
}
}
break;
+ case 2:
+ {
+ /* SupportsDevn. Return the boolean from the device */
+
+ code = dev_proc(dev, dev_spec_op)(dev, gxdso_supports_devn, NULL, 0);
+ if (code < 0 && code != gs_error_undefined)
+ return_error(code); /* any other error leaves the stack unchanged */
+
+ op = osp;
+ push(1);
+ make_bool(op, code > 0 ? 1 : 0); /* return true/false */
+ }
+ break;
default:
/* Belt and braces; it shold not be possible to get here, as the table
* containing the names should mirror the entries in this switch. If we