summaryrefslogtreecommitdiff
path: root/cups
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2019-12-02 10:19:36 -0500
committerMichael R Sweet <michael.r.sweet@gmail.com>2019-12-02 10:19:36 -0500
commite6330cabb85bed745891e21530765f5a337dce58 (patch)
tree44fe4dfef0d660d2740f7fa74ecc72aa5cdcefdc /cups
parent1a3915dded85df1f6ab6c0546ecfbb403d1b1fd8 (diff)
downloadcups-e6330cabb85bed745891e21530765f5a337dce58.tar.gz
Fix a few issues with Apple Raster support (rdar://55301114)
Diffstat (limited to 'cups')
-rw-r--r--cups/raster-stream.c60
-rw-r--r--cups/testraster.c9
2 files changed, 58 insertions, 11 deletions
diff --git a/cups/raster-stream.c b/cups/raster-stream.c
index d7db020f1..365c5e0e4 100644
--- a/cups/raster-stream.c
+++ b/cups/raster-stream.c
@@ -1,7 +1,7 @@
/*
* Raster file routines for CUPS.
*
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* This file is part of the CUPS Imaging library.
@@ -32,6 +32,24 @@ typedef void (*_cups_copyfunc_t)(void *dst, const void *src, size_t bytes);
* Local globals...
*/
+static const char * const apple_media_types[] =
+{ /* media-type values for Apple Raster */
+ "auto",
+ "stationery",
+ "transparency",
+ "envelope",
+ "cardstock",
+ "labels",
+ "stationery-letterhead",
+ "disc",
+ "photographic-matte",
+ "photographic-satin",
+ "photographic-semi-gloss",
+ "photographic-glossy",
+ "photographic-high-gloss",
+ "other"
+};
+
#ifdef DEBUG
static const char * const cups_modes[] =
{ /* Open modes */
@@ -638,7 +656,7 @@ _cupsRasterReadHeader(
{
CUPS_CSPACE_SW,
CUPS_CSPACE_SRGB,
- CUPS_CSPACE_RGBW,
+ CUPS_CSPACE_CIELab,
CUPS_CSPACE_ADOBERGB,
CUPS_CSPACE_W,
CUPS_CSPACE_RGB,
@@ -648,7 +666,7 @@ _cupsRasterReadHeader(
{
1,
3,
- 4,
+ 3,
3,
1,
3,
@@ -681,8 +699,21 @@ _cupsRasterReadHeader(
r->header.cupsPageSize[1] = (float)(r->header.cupsHeight * 72.0 / r->header.HWResolution[1]);
}
- r->header.cupsInteger[0] = r->apple_page_count;
- r->header.cupsInteger[7] = 0xffffff;
+ r->header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount] = r->apple_page_count;
+ r->header.cupsInteger[CUPS_RASTER_PWG_AlternatePrimary] = 0xffffff;
+ r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality] = appleheader[3];
+
+ if (appleheader[2] >= 2)
+ r->header.Duplex = 1;
+ if (appleheader[2] == 2)
+ r->header.Tumble = 1;
+
+ r->header.MediaPosition = appleheader[5];
+
+ if (appleheader[4] < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])))
+ strlcpy(r->header.MediaType, apple_media_types[appleheader[4]], sizeof(r->header.MediaType));
+ else
+ strlcpy(r->header.MediaType, "other", sizeof(r->header.MediaType));
}
break;
}
@@ -1072,8 +1103,9 @@ _cupsRasterWriteHeader(
* zeroed.
*/
- unsigned char appleheader[32]; /* Raw page header */
- unsigned height = r->header.cupsHeight * r->rowheight;
+ int i; /* Looping var */
+ unsigned char appleheader[32];/* Raw page header */
+ unsigned height = r->header.cupsHeight * r->rowheight;
/* Computed page height */
if (r->apple_page_count == 0xffffffffU)
@@ -1101,11 +1133,14 @@ _cupsRasterWriteHeader(
appleheader[0] = (unsigned char)r->header.cupsBitsPerPixel;
appleheader[1] = r->header.cupsColorSpace == CUPS_CSPACE_SRGB ? 1 :
- r->header.cupsColorSpace == CUPS_CSPACE_RGBW ? 2 :
+ r->header.cupsColorSpace == CUPS_CSPACE_CIELab ? 2 :
r->header.cupsColorSpace == CUPS_CSPACE_ADOBERGB ? 3 :
r->header.cupsColorSpace == CUPS_CSPACE_W ? 4 :
r->header.cupsColorSpace == CUPS_CSPACE_RGB ? 5 :
r->header.cupsColorSpace == CUPS_CSPACE_CMYK ? 6 : 0;
+ appleheader[2] = r->header.Duplex ? (r->header.Tumble ? 2 : 3) : 1;
+ appleheader[3] = r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality];
+ appleheader[5] = (unsigned char)(r->header.MediaPosition);
appleheader[12] = (unsigned char)(r->header.cupsWidth >> 24);
appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16);
appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8);
@@ -1119,6 +1154,15 @@ _cupsRasterWriteHeader(
appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8);
appleheader[23] = (unsigned char)(r->header.HWResolution[0]);
+ for (i = 0; i < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])); i ++)
+ {
+ if (!strcmp(r->header.MediaType, apple_media_types[i]))
+ {
+ appleheader[4] = i;
+ break;
+ }
+ }
+
return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
}
else
diff --git a/cups/testraster.c b/cups/testraster.c
index d3dab4bbc..de72a4bfb 100644
--- a/cups/testraster.c
+++ b/cups/testraster.c
@@ -1,7 +1,7 @@
/*
* Raster test program routines for CUPS.
*
- * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
@@ -22,8 +22,7 @@
static int do_ras_file(const char *filename);
static int do_raster_tests(cups_mode_t mode);
-static void print_changes(cups_page_header2_t *header,
- cups_page_header2_t *expected);
+static void print_changes(cups_page_header2_t *header, cups_page_header2_t *expected);
/*
@@ -174,6 +173,8 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
header.cupsPageSize[0] = 288.0f;
header.cupsPageSize[1] = 288.0f;
+ strlcpy(header.MediaType, "auto", sizeof(header.MediaType));
+
if (page & 1)
{
header.cupsBytesPerLine *= 4;
@@ -308,6 +309,8 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
expected.PageSize[0] = 288;
expected.PageSize[1] = 288;
+ strlcpy(expected.MediaType, "auto", sizeof(expected.MediaType));
+
if (mode != CUPS_RASTER_WRITE_PWG)
{
expected.cupsPageSize[0] = 288.0f;