summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorMichael Sweet <michael.r.sweet@gmail.com>2016-12-14 09:01:18 -0500
committerMichael Sweet <michael.r.sweet@gmail.com>2016-12-14 09:01:18 -0500
commit073e58a9fb9a1b6a76961413d01f03407f37c4a6 (patch)
treee1c6c65871399c9b8f941c8abc9da0b29dafe872 /filter
parent49c5929363cbbefcf6a91501fc5e632c0708e3a6 (diff)
downloadcups-073e58a9fb9a1b6a76961413d01f03407f37c4a6.tar.gz
Fix asymmetric resolution bug, address unit test issues.
Diffstat (limited to 'filter')
-rw-r--r--filter/raster.c21
-rw-r--r--filter/testraster.c16
2 files changed, 32 insertions, 5 deletions
diff --git a/filter/raster.c b/filter/raster.c
index 8db783027..febc0400b 100644
--- a/filter/raster.c
+++ b/filter/raster.c
@@ -36,7 +36,8 @@ struct _cups_raster_s /**** Raster stream data ****/
cups_raster_iocb_t iocb; /* IO callback */
cups_mode_t mode; /* Read/write mode */
cups_page_header2_t header; /* Raster header for current page */
- unsigned count, /* Current row run-length count */
+ unsigned rowheight, /* Row height in lines */
+ count, /* Current row run-length count */
remaining, /* Remaining rows in page image */
bpp; /* Bytes per pixel/color */
unsigned char *pixels, /* Pixels for current row */
@@ -1008,7 +1009,7 @@ cupsRasterWriteHeader(
* 'cupsRasterWriteHeader2()' - Write a raster page header from a version 2
* page header structure.
*
- * The page header can be initialized using @link cupsRasterInterpretPPD@.
+ * The page header can be initialized using @link cupsRasterInitPWGHeader@.
*
* @since CUPS 1.2/macOS 10.5@
*/
@@ -1031,6 +1032,16 @@ cupsRasterWriteHeader2(
if (!cups_raster_update(r))
return (0);
+ if (r->mode == CUPS_RASTER_WRITE_APPLE)
+ {
+ r->rowheight = h->HWResolution[0] / h->HWResolution[1];
+
+ if (h->HWResolution[0] != (r->rowheight * h->HWResolution[1]))
+ return (0);
+ }
+ else
+ r->rowheight = 1;
+
/*
* Write the raster header...
*/
@@ -1277,7 +1288,7 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
* Increase the repeat count...
*/
- r->count ++;
+ r->count += r->rowheight;
r->pcurrent = r->pixels;
/*
@@ -1293,7 +1304,7 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
else
return (len);
}
- else if (r->count == 256)
+ else if (r->count > (256 - r->rowheight))
{
if (cups_raster_write(r, r->pixels) <= 0)
return (0);
@@ -1322,7 +1333,7 @@ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
* Increase the repeat count...
*/
- r->count ++;
+ r->count += r->rowheight;
r->pcurrent = r->pixels;
/*
diff --git a/filter/testraster.c b/filter/testraster.c
index 112876d98..d3482186d 100644
--- a/filter/testraster.c
+++ b/filter/testraster.c
@@ -553,6 +553,12 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
header.cupsWidth = 256;
header.cupsHeight = 256;
header.cupsBytesPerLine = 256;
+ header.HWResolution[0] = 64;
+ header.HWResolution[1] = 64;
+ header.PageSize[0] = 288;
+ header.PageSize[1] = 288;
+ header.cupsPageSize[0] = 288.0f;
+ header.cupsPageSize[1] = 288.0f;
if (page & 1)
{
@@ -679,6 +685,16 @@ do_raster_tests(cups_mode_t mode) /* O - Write mode */
expected.cupsWidth = 256;
expected.cupsHeight = 256;
expected.cupsBytesPerLine = 256;
+ expected.HWResolution[0] = 64;
+ expected.HWResolution[1] = 64;
+ expected.PageSize[0] = 288;
+ expected.PageSize[1] = 288;
+
+ if (mode != CUPS_RASTER_WRITE_PWG)
+ {
+ expected.cupsPageSize[0] = 288.0f;
+ expected.cupsPageSize[1] = 288.0f;
+ }
if (mode >= CUPS_RASTER_WRITE_PWG)
{