Source Code (Use browser search to find items of interest.)
Class Index
qt'QPSPrinter (./qt-2.1.0/src/kernel/qpsprinter_p.h:51)
class Q_EXPORT QPSPrinter : public QPaintDevice
{
private:
// QPrinter uses these
QPSPrinter( QPrinter *, int );
~QPSPrinter();
bool cmd ( int, QPainter *, QPDevCmdParam * );
enum { NewPage = 100, AbortPrinting };
friend class QPrinter;
private:
// QPrinter does not use these
QPrinter *printer;
QPSPrinterPrivate *d;
QTextStream stream;
int pageCount;
bool dirtyMatrix;
bool dirtyNewPage;
bool epsf;
QString fontsUsed;
void matrixSetup( QPainter * );
void clippingSetup( QPainter * );
virtual void setClippingOff( QPainter * );
void orientationSetup();
void newPageSetup( QPainter * );
void resetDrawingTools( QPainter * );
void emitHeader( bool finished );
virtual void setFont( const QFont & );
void drawImage( QPainter *, const QPoint &, const QImage & );
// Disabled copy constructor and operator=
QPSPrinter( const QPSPrinter & );
QPSPrinter &operator=( const QPSPrinter & );
};
qt'QPSPrinter::QPSPrinter() (./qt-2.1.0/src/kernel/qpsprinter.cpp:1922)
QPSPrinter::QPSPrinter( QPrinter *prt, int fd )
: QPaintDevice( QInternal::Printer | QInternal::ExternalDevice )
{
printer = prt;
d = new QPSPrinterPrivate( fd );
}
qt'QPSPrinter::~QPSPrinter() (./qt-2.1.0/src/kernel/qpsprinter.cpp:1930)
QPSPrinter::~QPSPrinter()
{
if ( d->fd >= 0 )
#if defined(_OS_WIN32_)
::_close( d->fd );
#else
::close( d->fd );
#endif
delete d;
}
static const struct {
qt'QPSPrinter::setFont() (./qt-2.1.0/src/kernel/qpsprinter.cpp:1970)
void QPSPrinter::setFont( const QFont & f )
{
if ( f.rawMode() ) {
QFont fnt( QString::fromLatin1("Helvetica"), 12 );
setFont( fnt );
return;
}
if ( f.pointSize() == 0 ) {
#if defined(CHECK_RANGE)
qWarning( "QPrinter: Cannot set a font with zero point size." );
#endif
return;
}
if ( !fixed_ps_header )
makeFixedStrings();
QString family = f.family();
QString ps;
int weight = f.weight();
bool italic = f.italic();
family = family.lower();
int i;
// try to make a "good" postscript name
ps = family.simplifyWhiteSpace();
i = 0;
while( (unsigned int)i < ps.length() ) {
if ( i == 0 || ps[i-1] == ' ' ) {
ps[i] = ps[i].upper();
if ( i )
ps.remove( i-1, 1 );
else
i++;
} else {
i++;
}
}
// see if the table has a better name
i = 0;
while( postscriptFontNames[i].input &&
QString::fromLatin1(postscriptFontNames[i].input) != family )
i++;
if ( postscriptFontNames[i].roman ) {
ps = QString::fromLatin1(postscriptFontNames[i].roman);
int p = ps.find( '-' );
if ( p > -1 )
ps.truncate( p );
}
// get the right modification, or build something
if ( weight >= QFont::Bold && italic ) {
if ( postscriptFontNames[i].boldItalic )
ps = QString::fromLatin1(postscriptFontNames[i].boldItalic);
else
ps.append( QString::fromLatin1("-BoldItalic") );
} else if ( weight >= QFont::Bold ) {
if ( postscriptFontNames[i].bold )
ps = QString::fromLatin1(postscriptFontNames[i].bold);
else
ps.append( QString::fromLatin1("-Bold") );
} else if ( weight >= QFont::DemiBold && italic ) {
if ( postscriptFontNames[i].italic )
ps = QString::fromLatin1(postscriptFontNames[i].italic);
else
ps.append( QString::fromLatin1("-Italic") );
} else if ( weight <= QFont::Light && italic ) {
if ( postscriptFontNames[i].lightItalic )
ps = QString::fromLatin1(postscriptFontNames[i].lightItalic);
else
ps.append( QString::fromLatin1("-LightItalic") );
} else if ( weight <= QFont::Light ) {
if ( postscriptFontNames[i].light )
ps = QString::fromLatin1(postscriptFontNames[i].light);
else
ps.append( QString::fromLatin1("-Light") );
} else if ( italic ) {
if ( postscriptFontNames[i].italic )
ps = QString::fromLatin1(postscriptFontNames[i].italic);
else
ps.append( QString::fromLatin1("-Italic") );
} else {
if ( postscriptFontNames[i].roman )
ps = QString::fromLatin1(postscriptFontNames[i].roman);
else
ps.append( QString::fromLatin1("-Roman") );
}
QString key;
int cs = (int)f.charSet();
if ( cs == QFont::AnyCharSet ) {
QIntDictIterator<void> it( d->headerEncodings );
if ( it.current() )
cs = it.currentKey();
else
cs = QFont::Latin1;
}
key.sprintf( "%s %d %d", ps.ascii(), f.pointSize(), cs );
QString * tmp;
tmp = d->headerFontNames.find( key );
if ( !tmp && !d->buffer )
tmp = d->pageFontNames.find( key );
QString fontName;
if ( tmp )
fontName = *tmp;
if ( fontName.isEmpty() ) {
QString key2;
key2.sprintf( "%s %d", ps.ascii(), cs );
tmp = d->headerFontNames.find( key );
QString fontEncoding;
fontEncoding.sprintf( " FE%d", cs );
if ( d->buffer ) {
if ( !d->headerEncodings.find( cs ) ) {
QString * vector = font_vectors->find( cs );
if ( vector ) {
d->fontStream << *vector << "\n";
d->headerEncodings.insert( cs, (void*)42 );
} else {
d->fontStream << "% wanted font encoding "
<< cs << "\n";
}
}
if ( tmp ) {
fontName = *tmp;
} else {
fontName.sprintf( "/F%d", ++d->headerFontNumber );
d->fontStream << fontName << fontEncoding << "/"
<< ps << " MF\n";
d->headerFontNames.insert( key2, new QString( fontName ) );
}
++d->headerFontNumber;
d->fontStream << "/F" << d->headerFontNumber << " "
<< f.pointSize() << fontName << " DF\n";
fontName.sprintf( "F%d", d->headerFontNumber );
d->headerFontNames.insert( key, new QString( fontName ) );
} else {
if ( !d->headerEncodings.find( cs ) &&
!d->pageEncodings.find( cs ) ) {
QString * vector = font_vectors->find( cs );
if ( !vector )
vector = font_vectors->find( QFont::Latin1 );
stream << *vector << "\n";
d->pageEncodings.insert( cs, (void*)42 );
}
if ( !tmp )
tmp = d->pageFontNames.find( key );
if ( tmp ) {
fontName = *tmp;
} else {
fontName.sprintf( "/F%d", ++d->pageFontNumber );
stream << fontName << fontEncoding << "/" << ps << " MF\n";
d->pageFontNames.insert( key2, new QString( fontName ) );
}
++d->pageFontNumber;
stream << "/F" << d->pageFontNumber << " "
<< f.pointSize() << fontName << " DF\n";
fontName.sprintf( "F%d", d->pageFontNumber );
d->pageFontNames.insert( key, new QString( fontName ) );
}
}
stream << fontName << " F\n";
ps.append( ' ' );
ps.prepend( ' ' );
if ( !fontsUsed.contains( ps ) )
fontsUsed += ps;
}
qt'QPSPrinter::cmd() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2225)
bool QPSPrinter::cmd( int c , QPainter *paint, QPDevCmdParam *p )
{
if ( c == PdcBegin ) { // start painting
d->pagesInBuffer = 0;
d->buffer = new QBuffer();
d->buffer->open( IO_WriteOnly );
stream.setEncoding( QTextStream::Latin1 );
stream.setDevice( d->buffer );
d->fontBuffer = new QBuffer();
d->fontBuffer->open( IO_WriteOnly );
d->fontStream.setEncoding( QTextStream::Latin1 );
d->fontStream.setDevice( d->fontBuffer );
d->headerFontNumber = 0;
pageCount = 1; // initialize state
dirtyMatrix = TRUE;
d->dirtyClipping = FALSE; // No clipping is default.
dirtyNewPage = FALSE; // setup done by QPainter
// for the first page.
d->firstClipOnPage = TRUE;
d->boundingBox = QRect( 0, 0, -1, -1 );
fontsUsed = QString::fromLatin1("");
stream << "%%Page: " << pageCount << ' ' << pageCount << endl
<< "QI\n";
return TRUE;
}
if ( c == PdcEnd ) { // painting done
bool pageCountAtEnd = (d->buffer == 0);
if ( !pageCountAtEnd )
emitHeader( TRUE );
stream << "QP\n"
<< "%%Trailer\n";
if ( pageCountAtEnd )
stream << "%%Pages: " << pageCount << "\n%%DocumentFonts: "
<< fontsUsed.simplifyWhiteSpace() << '\n';
stream.unsetDevice();
d->realDevice->close();
if ( d->fd >= 0 )
::close( d->fd );
d->fd = -1;
delete d->realDevice;
d->realDevice = 0;
}
if ( c >= PdcDrawFirst && c <= PdcDrawLast ) {
if ( !paint )
return FALSE; // sanity
if ( dirtyMatrix )
matrixSetup( paint );
if ( dirtyNewPage )
newPageSetup( paint );
if ( d->dirtyClipping ) // Must be after matrixSetup and newPageSetup
clippingSetup( paint );
}
switch( c ) {
case PdcDrawPoint:
stream << POINT(0) << "P\n";
break;
case PdcMoveTo:
stream << POINT(0) << "M\n";
break;
case PdcLineTo:
stream << POINT(0) << "L\n";
break;
case PdcDrawLine:
stream << POINT(0) << POINT(1) << "DL\n";
break;
case PdcDrawRect:
stream << RECT(0) << "R\n";
break;
case PdcDrawRoundRect:
stream << RECT(0) << INT_ARG(1) << INT_ARG(2) << "RR\n";
break;
case PdcDrawEllipse:
stream << RECT(0) << "E\n";
break;
case PdcDrawArc:
stream << RECT(0) << INT_ARG(1) << INT_ARG(2) << "A\n";
break;
case PdcDrawPie:
stream << RECT(0) << INT_ARG(1) << INT_ARG(2) << "PIE\n";
break;
case PdcDrawChord:
stream << RECT(0) << INT_ARG(1) << INT_ARG(2) << "CH\n";
break;
case PdcDrawLineSegments:
if ( p[0].ptarr->size() > 0 ) {
QPointArray a = *p[0].ptarr;
QPoint pt;
stream << "NP\n";
for ( int i=0; i<(int)a.size(); i+=2 ) {
pt = a.point( i );
stream << XCOORD(pt.x()) << ' '
<< YCOORD(pt.y()) << " MT\n";
pt = a.point( i+1 );
stream << XCOORD(pt.x()) << ' '
<< YCOORD(pt.y()) << " LT\n";
}
stream << "QS\n";
}
break;
case PdcDrawPolyline:
if ( p[0].ptarr->size() > 1 ) {
QPointArray a = *p[0].ptarr;
QPoint pt = a.point( 0 );
stream << "NP\n"
<< XCOORD(pt.x()) << ' ' << YCOORD(pt.y()) << " MT\n";
for ( int i=1; i<(int)a.size(); i++ ) {
pt = a.point( i );
stream << XCOORD(pt.x()) << ' '
<< YCOORD(pt.y()) << " LT\n";
}
stream << "QS\n";
}
break;
case PdcDrawPolygon:
if ( p[0].ptarr->size() > 2 ) {
QPointArray a = *p[0].ptarr;
if ( p[1].ival )
stream << "/WFi true d\n";
QPoint pt = a.point(0);
stream << "NP\n";
stream << XCOORD(pt.x()) << ' '
<< YCOORD(pt.y()) << " MT\n";
for( int i=1; i<(int)a.size(); i++) {
pt = a.point( i );
stream << XCOORD(pt.x()) << ' '
<< YCOORD(pt.y()) << " LT\n";
}
stream << "CP BF QS\n";
if ( p[1].ival )
stream << "/WFi false d\n";
}
break;
case PdcDrawQuadBezier:
if ( p[0].ptarr->size() == 4 ) {
stream << "NP\n";
QPointArray a = *p[0].ptarr;
stream << XCOORD(a[0].x()) << ' '
<< YCOORD(a[0].y()) << " MT ";
for ( int i=1; i<4; i++ ) {
stream << XCOORD(a[i].x()) << ' '
<< YCOORD(a[i].y()) << ' ';
}
stream << "BZ\n";
}
break;
case PdcDrawText2:
if ( !p[1].str->isEmpty() ) {
// #### Unicode ignored
char * tmp = new char[ p[1].str->length() * 2 + 2 ];
#if defined(CHECK_NULL)
CHECK_PTR( tmp );
#endif
const char* from = p[1].str->ascii();
char * to = tmp;
while ( *from ) {
if ( *from == '\\' || *from == '(' || *from == ')' )
*to++ = '\\'; // escape special chars
*to++ = *from++;
}
if ( to != tmp && to[-1] == ' ' )
to--;
*to = '\0';
stream<< "(" << tmp << ")" << POINT(0) << "T\n";
delete [] tmp;
}
break;
case PdcDrawText2Formatted:;
return FALSE; // uses QPainter instead
case PdcDrawPixmap: {
if ( p[1].pixmap->isNull() )
break;
QPoint pnt = *(p[0].point);
QImage img;
img = *(p[1].pixmap);
drawImage( paint, pnt, img );
break;
}
case PdcDrawImage: {
if ( p[1].image->isNull() )
break;
QPoint pnt = *(p[0].point);
QImage img = *(p[1].image);
drawImage( paint, pnt, img );
break;
}
case PdcSetBkColor:
stream << COLOR(*(p[0].color)) << "BC\n";
break;
case PdcSetBkMode:
if ( p[0].ival == Qt::TransparentMode )
stream << "/OMo false d\n";
else
stream << "/OMo true d\n";
break;
case PdcSetROP:
#if defined(CHECK_RANGE)
if ( p[0].ival != Qt::CopyROP )
qWarning( "QPrinter: Raster operation setting not supported" );
#endif
break;
case PdcSetBrushOrigin:
break;
case PdcSetFont:
setFont( *(p[0].font) );
break;
case PdcSetPen:
stream << (int)p[0].pen->style() << ' ' << p[0].pen->width()
<< ' ' << COLOR(p[0].pen->color()) << "PE\n";
break;
case PdcSetBrush:
if ( p[0].brush->style() == Qt::CustomPattern ) {
#if defined(CHECK_RANGE)
qWarning( "QPrinter: Pixmap brush not supported" );
#endif
return FALSE;
}
stream << (int)p[0].brush->style() << ' '
<< COLOR(p[0].brush->color()) << "B\n";
break;
case PdcSetTabStops:
case PdcSetTabArray:
return FALSE;
case PdcSetUnit:
break;
case PdcSetVXform:
case PdcSetWindow:
case PdcSetViewport:
case PdcSetWXform:
case PdcSetWMatrix:
case PdcRestoreWMatrix:
dirtyMatrix = TRUE;
break;
case PdcSetClip:
d->dirtyClipping = TRUE;
break;
case PdcSetClipRegion:
d->dirtyClipping = TRUE;
break;
case NewPage:
pageCount++;
stream << "QP\n%%Page: "
<< pageCount << ' ' << pageCount
<< "\nQI\n";
dirtyNewPage = TRUE;
d->dirtyClipping = TRUE;
d->firstClipOnPage = TRUE;
delete d->savedImage;
d->savedImage = 0;
break;
case AbortPrinting:
break;
default:
break;
}
return TRUE;
}
qt'QPSPrinter::drawImage() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2488)
void QPSPrinter::drawImage( QPainter *paint, const QPoint &pnt,
const QImage &img )
{
if ( pnt.x() || pnt.y() )
stream << pnt.x() << " " << pnt.y() << " TR\n";
int width = img.width();
int height = img.height();
QColor fgCol = paint->pen().color();
QColor bgCol = paint->backgroundColor();
if ( width * height > 21840 ) { // 65535/3, tolerance for broken printers
delete d->savedImage;
d->savedImage = 0;
stream << "/sl " << width*3 << " string d\n"
<< width << ' ' << height << " 8[1 0 0 1 0 0]"
<< "{currentfile sl readhexstring pop}QCI\n";
ps_dumpPixmapData( stream, img, fgCol, bgCol );
} else if ( d->savedImage && img == *d->savedImage ) {
stream << width << ' ' << height << " 8[1 0 0 1 0 0]{sl}QCI\n";
} else {
if ( !d->savedImage ||
d->savedImage->width()*d->savedImage->height() != width*height )
stream << "/sl " << width*3*height << " string d\n";
stream << "currentfile sl readhexstring\n";
ps_dumpPixmapData( stream, img, fgCol, bgCol );
stream << "pop pop\n";
delete d->savedImage;
d->savedImage = new QImage( img );
d->savedImage->detach();
stream << width << ' ' << height << " 8[1 0 0 1 0 0]{sl}QCI\n";
}
if ( pnt.x() || pnt.y() )
stream << -pnt.x() << " " << -pnt.y() << " TR\n";
}
qt'QPSPrinter::matrixSetup() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2526)
void QPSPrinter::matrixSetup( QPainter *paint )
{
QWMatrix tmp;
if ( paint->hasViewXForm() ) {
QRect viewport = paint->viewport();
QRect window = paint->window();
tmp.translate( viewport.x(), viewport.y() );
tmp.scale( 1.0 * viewport.width() / window.width(),
1.0 * viewport.height() / window.height() );
tmp.translate( -window.x(), -window.y() );
}
if ( paint->hasWorldXForm() ) {
tmp = paint->worldMatrix() * tmp;
}
stream << "["
<< tmp.m11() << ' ' << tmp.m12() << ' '
<< tmp.m21() << ' ' << tmp.m22() << ' '
<< tmp.dx() << ' ' << tmp.dy()
<< "]ST\n";
dirtyMatrix = FALSE;
}
qt'QPSPrinter::orientationSetup() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2548)
void QPSPrinter::orientationSetup()
{
if ( printer->orientation() == QPrinter::Landscape )
stream << "QLS\n";
}
qt'QPSPrinter::emitHeader() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2754)
void QPSPrinter::emitHeader( bool finished )
{
QString title = printer->docName();
QString creator = printer->creator();
if ( !creator ) // default creator
creator = QString::fromLatin1("Qt " QT_VERSION_STR);
d->realDevice = new QFile();
(void)((QFile *)d->realDevice)->open( IO_WriteOnly, d->fd );
stream.setDevice( d->realDevice );
stream << "%!PS-Adobe-1.0";
if ( finished && pageCount == 1 && printer->numCopies() == 1 &&
printer->fullPage() ) {
QPaintDeviceMetrics m( printer );
if ( !d->boundingBox.isValid() )
d->boundingBox.setRect( 0, 0, m.width(), m.height() );
if ( printer->orientation() == QPrinter::Landscape )
stream << " EPSF-3.0\n%%BoundingBox: "
<< m.height() - d->boundingBox.bottom() << " " // llx
<< m.width() - d->boundingBox.right() << " " // lly
<< m.height() - d->boundingBox.top() << " " // urx
<< m.width() - d->boundingBox.left();// ury
else
stream << " EPSF-3.0\n%%BoundingBox: "
<< d->boundingBox.left() << " "
<< m.height() - d->boundingBox.bottom() - 1 << " "
<< d->boundingBox.right() + 1 << " "
<< m.height() - d->boundingBox.top();
}
stream << "\n%%Creator: " << creator;
if ( !!title )
stream << "\n%%Title: " << title;
stream << "\n%%CreationDate: " << QDateTime::currentDateTime().toString();
stream << "\n%%Orientation: ";
if ( printer->orientation() == QPrinter::Landscape )
stream << "Landscape";
else
stream << "Portrait";
if ( finished )
stream << "\n%%Pages: " << pageCount << "\n%%DocumentFonts: "
<< fontsUsed.simplifyWhiteSpace();
else
stream << "\n%%Pages: (atend)"
<< "\n%%DocumentFonts: (atend)";
stream << "\n%%EndComments\n\n";
if ( printer->numCopies() > 1 )
stream << "/#copies " << printer->numCopies() << " def\n";
if ( !fixed_ps_header )
makeFixedStrings();
if ( finished ) {
QString r( stripHeader( *fixed_ps_header,
d->buffer->buffer().data(),
d->buffer->buffer().size(),
d->fontBuffer->buffer().size() > 0 ) );
stream << "% Optimized Qt prolog\n" << r << "\n";
} else {
stream << "% Standard Qt prolog\n" << *fixed_ps_header << "\n";
}
if ( !printer->fullPage() )
stream << "% lazy-margin hack: QPrinter::setFullPage(FALSE)\n"
<< printer->margins().width() << " "
<< printer->margins().height() << " translate\n";
if ( printer->orientation() == QPrinter::Portrait ) {
QPaintDeviceMetrics m( printer );
stream << "% " << m.widthMM() << "*" << m.heightMM()
<< "mm (portrait)\n0 " << m.height()
<< " translate 1 -1 scale/defM matrix CM d\n";
} else {
QPaintDeviceMetrics m( printer );
stream << "% " << m.heightMM() << "*" << m.widthMM()
<< " mm (landscape)\n90 rotate 1 -1 scale/defM matrix CM d\n";
}
if ( d->fontBuffer->buffer().size() ) {
if ( pageCount == 1 || finished )
stream << "% Fonts and encodings used\n";
else
stream << "% Fonts and encodings used on pages 1-"
<< pageCount << "\n";
stream.writeRawBytes( d->fontBuffer->buffer().data(),
d->fontBuffer->buffer().size() );
}
stream << "%%EndProlog\n";
stream.writeRawBytes( d->buffer->buffer().data(),
d->buffer->buffer().size() );
delete d->buffer;
d->buffer = 0;
d->fontStream.unsetDevice();
delete d->fontBuffer;
d->fontBuffer = 0;
}
qt'QPSPrinter::newPageSetup() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2851)
void QPSPrinter::newPageSetup( QPainter *paint )
{
if ( d->buffer && d->pagesInBuffer++ > 4 )
emitHeader( FALSE );
if ( !d->buffer ) {
d->pageEncodings.clear();
d->pageFontNames.clear();
}
resetDrawingTools( paint );
dirtyNewPage = FALSE;
d->pageFontNumber = d->headerFontNumber;
}
/*
Called whenever a restore has been done. Currently done at the top of a
new page and whenever clipping is turned off.
*/
qt'QPSPrinter::resetDrawingTools() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2871)
void QPSPrinter::resetDrawingTools( QPainter *paint )
{
QPDevCmdParam param[1];
QPen defaultPen; // default drawing tools
QBrush defaultBrush;
param[0].color = &paint->backgroundColor();
if ( *param[0].color != Qt::white )
cmd( PdcSetBkColor, paint, param );
param[0].ival = paint->backgroundMode();
if (param[0].ival != Qt::TransparentMode )
cmd( PdcSetBkMode, paint, param );
param[0].font = &paint->font();
cmd( PdcSetFont, paint, param );
param[0].pen = &paint->pen();
if (*param[0].pen != defaultPen )
cmd( PdcSetPen, paint,param );
param[0].brush = &paint->brush();
if (*param[0].brush != defaultBrush )
cmd( PdcSetBrush, paint, param);
if ( paint->hasViewXForm() || paint->hasWorldXForm() )
matrixSetup( paint );
}
qt'QPSPrinter::setClippingOff() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2910)
void QPSPrinter::setClippingOff( QPainter *paint )
{
stream << "CLO\n"; // clipping off, includes a restore
resetDrawingTools( paint ); // so drawing tools must be reset
}
qt'QPSPrinter::clippingSetup() (./qt-2.1.0/src/kernel/qpsprinter.cpp:2917)
void QPSPrinter::clippingSetup( QPainter *paint )
{
if ( paint->hasClipping() ) {
if ( !d->firstClipOnPage )
setClippingOff( paint );
const QRegion rgn = paint->clipRegion();
QArray<QRect> rects = rgn.rects();
int i;
stream<< "CLSTART\n"; // start clipping
for( i = 0 ; i < (int)rects.size() ; i++ ) {
putRect( stream, rects[i] );
stream << "ACR\n"; // add clip rect
if ( pageCount == 1 )
d->boundingBox = d->boundingBox.unite( rects[i] );
}
stream << "CLEND\n"; // end clipping
d->firstClipOnPage = FALSE;
} else {
if ( !d->firstClipOnPage ) // no need to turn off if first on page
setClippingOff( paint );
// if we're painting without clipping, the bounding box must
// be everything. NOTE: this assumes that this function is
// only ever called when something is to be painted.
QPaintDeviceMetrics m( printer );
if ( !d->boundingBox.isValid() )
d->boundingBox.setRect( 0, 0, m.width(), m.height() );
}
d->dirtyClipping = FALSE;
}