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.
|