ADC Home > Reference Library > Technical Q&As > Legacy Documents > Graphics & Imaging >

Legacy Documentclose button

Important: This document is part of the Legacy section of the ADC Reference Library. This information should not be used for new development.

Current information on this Reference Library topic can be found here:

Quickdraw GX Raster Printer Drivers

Important for all Apple Printing and Graphics Developers:

The information in this Technical Q & A is still relevant up to and including Mac OS 7.6 with QuickDraw GX 1.1.5. Beginning with the release of Mac OS 8.0, however, Apple plans to deliver a system which incorporates QuickDraw GX graphics and typography only. QuickDraw GX printer drivers and GX printing extensions will not be supported in Mac OS 8.0 or in future Mac OS releases. Apple's goal is to simplify the user experience of printing by unifying the Macintosh graphic and printing architectures and standardizing on the classic Printing Manager.

For details on Apple's official announcement, refer to </dev/technotes/gxchange.html>

Q: I'm having a problem with my GX raster driver (for a monochrome plotter): I need to call my RasterPackageBitmap override for all the lines in a print, regardless of whether the lines are dirty or not. It seems that RasterDataIn is checking for clean lines, but not bothering to call RasterPackageBitmap for these lines, and is just calling RasterLineFeed on its own. Is there a way for me to use the default RasterDataIn to accomplish this task, or do I have to override it myself?

It seems that there are plenty of options available in the resources to send all bands, regardless of whether they are dirty, but this doesn't seem to help individual blank lines to get through to PackageBitmap. I've tried setting dirtyRectangle to bandRectangle, but this doesn't work for individual blank lines within bands.

A: There are two possible causes for your problem. The first is the 'rdip' resource of your driver. The gxSendAllBands flag of the 'rdip' should be set to force the default implementation of RasterDataIn to call RasterPackageBitmap, even if a line isn't dirty. You should also override RasterLineFeed. In this override, you should package up blank lines in the same way that you package up dirty lines in RasterPackageBitmap. You have to override both these messages if you use the default implementation of RasterDataIn.

There is also a bug in QuickDraw GX 1.0.x, where the gxOnePlaneAtATime bit is wrongly used to invoke this behavior. To quickly find out if this is the cause of your problem, try setting the gxOnePlaneAtATime bit instead. This bug was fixed in the GX 1.1.1.

If you need a workaround that works with GX 1.0.x, you should have your RasterDataIn override pad the output with the appropriate number of empty lines before and after forwarding the message. Pad the output again after Forward_RenderPage for any empty bands at the tail end of the page.

It is also possible that the problem is caused, at least in part, by the approach that your driver is taking. We've found that most raster drivers completely override the RasterDataIn message (which circumvents RasterPackageBitmap altogether) in order to have total control of the banding and the buffering (i.e., SendBufferData) process. This is a much easier way to implement your driver.

[May 01 1995]

Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.