Move the remaining QPrinter dependencies out of qpf.*

Change-Id: I4fd0158d65afad1bc67c52eff17ce2e12ff60641
Reviewed-on: http://codereview.qt.nokia.com/3203
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
This commit is contained in:
Lars Knoll 2011-08-16 11:34:01 +02:00
parent 941de7608b
commit 2df117b8ad
6 changed files with 196 additions and 195 deletions

View File

@ -76,7 +76,6 @@ class QBitmap;
class QMovie;
class QImage;
class QPicture;
class QPrinter;
class QTimer;
class QTime;
class QClipboard;

View File

@ -66,7 +66,20 @@ static const bool interpolateImages = false;
QT_BEGIN_NAMESPACE
extern QSizeF qt_paperSizeToQSizeF(QPrinter::PaperSize size);
inline QPaintEngine::PaintEngineFeatures qt_pdf_decide_features()
{
QPaintEngine::PaintEngineFeatures f = QPaintEngine::AllFeatures;
f &= ~(QPaintEngine::PorterDuff | QPaintEngine::PerspectiveTransform
| QPaintEngine::ObjectBoundingModeGradients
#ifndef USE_NATIVE_GRADIENTS
| QPaintEngine::LinearGradientFill
#endif
| QPaintEngine::RadialGradientFill
| QPaintEngine::ConicalGradientFill);
return f;
}
/* also adds a space at the end of the number */
const char *qt_real_to_string(qreal val, char *buf) {
@ -900,28 +913,6 @@ const char *QPdf::toHex(uchar u, char *buffer)
return buffer;
}
#define Q_MM(n) int((n * 720 + 127) / 254)
#define Q_IN(n) int(n * 72)
static const char * const psToStr[QPrinter::NPaperSize+1] =
{
"A4", "B5", "Letter", "Legal", "Executive",
"A0", "A1", "A2", "A3", "A5", "A6", "A7", "A8", "A9", "B0", "B1",
"B10", "B2", "B3", "B4", "B6", "B7", "B8", "B9", "C5E", "Comm10E",
"DLE", "Folio", "Ledger", "Tabloid", 0
};
QPdf::PaperSize QPdf::paperSize(QPrinter::PaperSize paperSize)
{
QSizeF s = qt_paperSizeToQSizeF(paperSize);
PaperSize p = { Q_MM(s.width()), Q_MM(s.height()) };
return p;
}
const char *QPdf::paperSizeToString(QPrinter::PaperSize paperSize)
{
return psToStr[paperSize];
}
QPdfPage::QPdfPage()
: QPdf::ByteStream(true) // Enable file backing
@ -936,11 +927,23 @@ void QPdfPage::streamImage(int w, int h, int object)
}
QPdfEngine::QPdfEngine(QPdfEnginePrivate &dd, PaintEngineFeatures f)
: QAlphaPaintEngine(dd, f)
QPdfEngine::QPdfEngine(QPdfEnginePrivate &dd)
: QAlphaPaintEngine(dd, qt_pdf_decide_features())
{
}
QPdfEngine::QPdfEngine()
: QAlphaPaintEngine(*new QPdfEnginePrivate(), qt_pdf_decide_features())
{
}
void QPdfEngine::setOutputFilename(const QString &filename)
{
Q_D(QPdfEngine);
d->outputFileName = filename;
}
void QPdfEngine::drawPoints (const QPointF *points, int pointCount)
{
if (!points)
@ -1368,7 +1371,7 @@ void QPdfEngine::setPen()
Q_ASSERT(b.style() == Qt::SolidPattern && b.isOpaque());
QColor rgba = b.color();
if (d->colorMode == QPrinter::GrayScale) {
if (d->grayscale) {
qreal gray = qGray(rgba.rgba())/255.;
*d->currentPage << gray << gray << gray;
} else {
@ -1430,7 +1433,7 @@ void QPdfEngine::setBrush()
*d->currentPage << (patternObject ? "/PCSp cs " : "/CSp cs ");
if (specifyColor) {
QColor rgba = d->brush.color();
if (d->colorMode == QPrinter::GrayScale) {
if (d->grayscale) {
qreal gray = qGray(rgba.rgba())/255.;
*d->currentPage << gray << gray << gray;
} else {
@ -1475,7 +1478,7 @@ int QPdfEngine::metric(QPaintDevice::PaintDeviceMetric metricType) const
{
Q_D(const QPdfEngine);
int val;
QRect r = d->fullPage ? d->paperRect() : d->pageRect();
QRect r = d->pageRect();
switch (metricType) {
case QPaintDevice::PdmWidth:
val = r.width();
@ -1504,29 +1507,25 @@ int QPdfEngine::metric(QPaintDevice::PaintDeviceMetric metricType) const
val = 32;
break;
default:
qWarning("QPrinter::metric: Invalid metric command");
qWarning("QPdfWriter::metric: Invalid metric command");
return 0;
}
return val;
}
#define Q_MM(n) int((n * 720 + 127) / 254)
QPdfEnginePrivate::QPdfEnginePrivate(QPrinter::PrinterMode m)
QPdfEnginePrivate::QPdfEnginePrivate()
: clipEnabled(false), allClipped(false), hasPen(true), hasBrush(false), simplePen(false),
useAlphaEngine(false),
outDevice(0), fd(-1),
duplex(QPrinter::DuplexNone), collate(false), fullPage(false), embedFonts(true), copies(1),
pageOrder(QPrinter::FirstPageFirst), orientation(QPrinter::Portrait),
paperSize(QPrinter::A4), colorMode(QPrinter::Color), paperSource(QPrinter::Auto),
hasCustomPageMargins(false),
leftMargin(0), topMargin(0), rightMargin(0), bottomMargin(0)
fullPage(false), embedFonts(true),
landscape(false),
grayscale(false),
paperSize(Q_MM(210), Q_MM(297)), // A4
leftMargin(10), topMargin(10), rightMargin(10), bottomMargin(10) // ~3.5 mm
{
resolution = 72;
if (m == QPrinter::HighResolution)
resolution = 1200;
else if (m == QPrinter::ScreenResolution)
resolution = qt_defaultDpi();
resolution = 1200;
postscript = false;
currentObject = 1;
currentPage = 0;
@ -1535,9 +1534,6 @@ QPdfEnginePrivate::QPdfEnginePrivate(QPrinter::PrinterMode m)
streampos = 0;
stream = new QDataStream;
pageOrder = QPrinter::FirstPageFirst;
orientation = QPrinter::Portrait;
fullPage = false;
}
bool QPdfEngine::begin(QPaintDevice *pdev)
@ -1545,6 +1541,19 @@ bool QPdfEngine::begin(QPaintDevice *pdev)
Q_D(QPdfEngine);
d->pdev = pdev;
if (!d->outDevice) {
if (!d->outputFileName.isEmpty()) {
QFile *file = new QFile(d->outputFileName);
if (!file->open(QFile::WriteOnly|QFile::Truncate)) {
delete file;
return false;
}
d->outDevice = file;
} else {
return false;
}
}
d->postscript = false;
d->currentObject = 1;
@ -1589,6 +1598,19 @@ bool QPdfEngine::end()
delete d->currentPage;
d->currentPage = 0;
if (d->outDevice) {
d->outDevice->close();
if (d->fd >= 0)
#if defined(Q_OS_WIN) && defined(_MSC_VER) && _MSC_VER >= 1400
::_close(d->fd);
#else
::close(d->fd);
#endif
d->fd = -1;
delete d->outDevice;
d->outDevice = 0;
}
setActive(false);
return true;
}
@ -1602,25 +1624,10 @@ QPdfEnginePrivate::~QPdfEnginePrivate()
QRect QPdfEnginePrivate::paperRect() const
{
int w;
int h;
if (paperSize == QPrinter::Custom) {
w = qRound(customPaperSize.width()*resolution/72.);
h = qRound(customPaperSize.height()*resolution/72.);
} else {
if (!cupsPaperRect.isNull()) {
QRect r = cupsPaperRect;
w = r.width();
h = r.height();
} else{
QPdf::PaperSize s = QPdf::paperSize(paperSize);
w = s.width;
h = s.height;
}
w = qRound(w*resolution/72.);
h = qRound(h*resolution/72.);
}
if (orientation == QPrinter::Portrait)
int w = qRound(paperSize.width()*resolution/72.);
int h = qRound(paperSize.height()*resolution/72.);
if (!landscape)
return QRect(0, 0, w, h);
else
return QRect(0, 0, h, w);
@ -1628,46 +1635,14 @@ QRect QPdfEnginePrivate::paperRect() const
QRect QPdfEnginePrivate::pageRect() const
{
if(fullPage)
return paperRect();
QRect r = paperRect();
QRect r;
if (!hasCustomPageMargins && !cupsPageRect.isNull()) {
r = cupsPageRect;
if (r == cupsPaperRect) {
// if cups doesn't define any margins, give it at least approx 3.5 mm
r = QRect(10, 10, r.width() - 20, r.height() - 20);
}
} else {
QPdf::PaperSize s;
if (paperSize == QPrinter::Custom) {
s.width = qRound(customPaperSize.width());
s.height = qRound(customPaperSize.height());
} else {
s = QPdf::paperSize(paperSize);
}
if (hasCustomPageMargins)
r = QRect(0, 0, s.width, s.height);
else
r = QRect(72/3, 72/3, s.width - 2*72/3, s.height - 2*72/3);
}
int x = qRound(r.left()*resolution/72.);
int y = qRound(r.top()*resolution/72.);
int w = qRound(r.width()*resolution/72.);
int h = qRound(r.height()*resolution/72.);
if (orientation == QPrinter::Portrait)
r = QRect(x, y, w, h);
else
r = QRect(y, x, h, w);
if (hasCustomPageMargins) {
if(!fullPage)
r.adjust(qRound(leftMargin*(resolution/72.)),
qRound(topMargin*(resolution/72.)),
-qRound(rightMargin*(resolution/72.)),
-qRound(bottomMargin*(resolution/72.)));
}
return r;
}
@ -2437,7 +2412,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
bool hasAlpha = false;
bool hasMask = false;
if (QImageWriter::supportedImageFormats().contains("jpeg") && colorMode != QPrinter::GrayScale) {
if (QImageWriter::supportedImageFormats().contains("jpeg") && !grayscale) {
QBuffer buffer(&imageData);
QImageWriter writer(&buffer, "jpeg");
writer.setQuality(94);
@ -2459,13 +2434,13 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
}
}
} else {
imageData.resize(colorMode == QPrinter::GrayScale ? w * h : 3 * w * h);
imageData.resize(grayscale ? w * h : 3 * w * h);
uchar *data = (uchar *)imageData.data();
softMaskData.resize(w * h);
uchar *sdata = (uchar *)softMaskData.data();
for (int y = 0; y < h; ++y) {
const QRgb *rgb = (const QRgb *)image.scanLine(y);
if (colorMode == QPrinter::GrayScale) {
if (grayscale) {
for (int x = 0; x < w; ++x) {
*(data++) = qGray(*rgb);
uchar alpha = qAlpha(*rgb);
@ -2511,7 +2486,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
}
maskObject = writeImage(mask, w, h, 1, 0, 0);
}
object = writeImage(imageData, w, h, colorMode == QPrinter::GrayScale ? 8 : 32,
object = writeImage(imageData, w, h, grayscale ? 8 : 32,
maskObject, softMaskObject, dct);
}
imageCache.insert(serial_no, object);

View File

@ -60,16 +60,10 @@
#include "private/qfontengine_p.h"
#include "private/qfontsubset_p.h"
// ### remove!
#include <qprinter.h>
// #define USE_NATIVE_GRADIENTS
QT_BEGIN_NAMESPACE
#define PPK_CupsOptions QPrintEngine::PrintEnginePropertyKey(0xfe00)
#define PPK_CupsPageRect QPrintEngine::PrintEnginePropertyKey(0xfe01)
#define PPK_CupsPaperRect QPrintEngine::PrintEnginePropertyKey(0xfe02)
#define PPK_CupsStringPageSize QPrintEngine::PrintEnginePropertyKey(0xfe03)
const char *qt_real_to_string(qreal val, char *buf);
const char *qt_int_to_string(int val, char *buf);
@ -147,13 +141,6 @@ namespace QPdf {
const char *toHex(ushort u, char *buffer);
const char *toHex(uchar u, char *buffer);
struct PaperSize {
int width, height; // in postscript points
};
Q_GUI_EXPORT PaperSize paperSize(QPrinter::PaperSize paperSize);
Q_GUI_EXPORT const char *paperSizeToString(QPrinter::PaperSize paperSize);
}
@ -181,9 +168,13 @@ class QPdfEngine : public QAlphaPaintEngine
{
Q_DECLARE_PRIVATE(QPdfEngine)
public:
QPdfEngine(QPdfEnginePrivate &d, PaintEngineFeatures f);
QPdfEngine();
QPdfEngine(QPdfEnginePrivate &d);
~QPdfEngine() {}
void setOutputFilename(const QString &filename);
inline void setResolution(int resolution);
// reimplementations QPaintEngine
bool begin(QPaintDevice *pdev);
bool end();
@ -222,7 +213,7 @@ class QPdfEnginePrivate : public QAlphaPaintEnginePrivate
{
Q_DECLARE_PUBLIC(QPdfEngine)
public:
QPdfEnginePrivate(QPrinter::PrinterMode m);
QPdfEnginePrivate();
~QPdfEnginePrivate();
inline uint requestObject() { return currentObject++; }
@ -280,29 +271,16 @@ public:
// printer options
QString outputFileName;
QString printerName;
QString printProgram;
QString selectionOption;
QString title;
QString creator;
QPrinter::DuplexMode duplex;
bool collate;
bool fullPage;
bool embedFonts;
int copies;
int resolution;
QPrinter::PageOrder pageOrder;
QPrinter::Orientation orientation;
QPrinter::PaperSize paperSize;
QPrinter::ColorMode colorMode;
QPrinter::PaperSource paperSource;
bool landscape;
bool grayscale;
QStringList cupsOptions;
QRect cupsPaperRect;
QRect cupsPageRect;
QString cupsStringPageSize;
QSizeF customPaperSize; // in postscript points
bool hasCustomPageMargins;
// in postscript points
QSizeF paperSize;
qreal leftMargin, topMargin, rightMargin, bottomMargin;
#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
@ -346,6 +324,12 @@ private:
QHash<QPair<uint, uint>, uint > alphaCache;
};
void QPdfEngine::setResolution(int resolution)
{
Q_D(QPdfEngine);
d->resolution = resolution;
}
QT_END_NAMESPACE
#endif // QPDF_P_H

View File

@ -41,7 +41,7 @@
#include <qpdfwriter.h>
#include <QtCore/private/qobject_p.h>
#include "private/qprintengine_pdf_p.h"
#include "private/qpdf_p.h"
#include <QtCore/qfile.h>
@ -51,7 +51,7 @@ public:
QPdfWriterPrivate()
: QObjectPrivate()
{
engine = new QPdfPrintEngine(QPrinter::HighResolution);
engine = new QPdfEngine();
output = 0;
}
~QPdfWriterPrivate()
@ -60,7 +60,7 @@ public:
delete output;
}
QPdfPrintEngine *engine;
QPdfEngine *engine;
QFile *output;
};
@ -69,7 +69,7 @@ QPdfWriter::QPdfWriter(const QString &filename)
{
Q_D(QPdfWriter);
d->engine->setProperty(QPrintEngine::PPK_OutputFileName, filename);
d->engine->setOutputFilename(filename);
}
QPdfWriter::QPdfWriter(QIODevice *device)

View File

@ -52,12 +52,7 @@
#include <limits.h>
#include <math.h>
#if defined(Q_OS_WINCE)
#include "qwinfunctions_wince.h"
#endif
#include "qprintengine_pdf_p.h"
#include "private/qdrawhelper_p.h"
#ifdef Q_OS_UNIX
#include "private/qcore_unix_p.h" // overrides QT_OPEN
@ -67,22 +62,34 @@ QT_BEGIN_NAMESPACE
//#define FONT_DUMP
extern QSizeF qt_paperSizeToQSizeF(QPrinter::PaperSize size);
inline QPaintEngine::PaintEngineFeatures qt_pdf_decide_features()
#define Q_MM(n) int((n * 720 + 127) / 254)
#define Q_IN(n) int(n * 72)
static const char * const psToStr[QPrinter::NPaperSize+1] =
{
QPaintEngine::PaintEngineFeatures f = QPaintEngine::AllFeatures;
f &= ~(QPaintEngine::PorterDuff | QPaintEngine::PerspectiveTransform
| QPaintEngine::ObjectBoundingModeGradients
#ifndef USE_NATIVE_GRADIENTS
| QPaintEngine::LinearGradientFill
#endif
| QPaintEngine::RadialGradientFill
| QPaintEngine::ConicalGradientFill);
return f;
"A4", "B5", "Letter", "Legal", "Executive",
"A0", "A1", "A2", "A3", "A5", "A6", "A7", "A8", "A9", "B0", "B1",
"B10", "B2", "B3", "B4", "B6", "B7", "B8", "B9", "C5E", "Comm10E",
"DLE", "Folio", "Ledger", "Tabloid", 0
};
QPdf::PaperSize QPdf::paperSize(QPrinter::PaperSize paperSize)
{
QSizeF s = qt_paperSizeToQSizeF(paperSize);
PaperSize p = { Q_MM(s.width()), Q_MM(s.height()) };
return p;
}
const char *QPdf::paperSizeToString(QPrinter::PaperSize paperSize)
{
return psToStr[paperSize];
}
QPdfPrintEngine::QPdfPrintEngine(QPrinter::PrinterMode m)
: QPdfEngine(*new QPdfPrintEnginePrivate(m), qt_pdf_decide_features())
: QPdfEngine(*new QPdfPrintEnginePrivate(m))
{
Q_D(QPdfPrintEngine);
#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
@ -154,13 +161,14 @@ int QPdfPrintEngine::metric(QPaintDevice::PaintDeviceMetric m) const
void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &value)
{
Q_D(QPdfEngine);
Q_D(QPdfPrintEngine);
switch (int(key)) {
case PPK_CollateCopies:
d->collate = value.toBool();
break;
case PPK_ColorMode:
d->colorMode = QPrinter::ColorMode(value.toInt());
d->grayscale = (QPrinter::ColorMode(value.toInt()) == QPrinter::GrayScale);
break;
case PPK_Creator:
d->creator = value.toString();
@ -176,7 +184,7 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
d->copies = value.toInt();
break;
case PPK_Orientation:
d->orientation = QPrinter::Orientation(value.toInt());
d->landscape = (QPrinter::Orientation(value.toInt()) == QPrinter::Landscape);
break;
case PPK_OutputFileName:
d->outputFileName = value.toString();
@ -185,7 +193,8 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
d->pageOrder = QPrinter::PageOrder(value.toInt());
break;
case PPK_PaperSize:
d->paperSize = QPrinter::PaperSize(value.toInt());
d->printerPaperSize = QPrinter::PaperSize(value.toInt());
d->updatePaperSize();
break;
case PPK_PaperSource:
d->paperSource = QPrinter::PaperSource(value.toInt());
@ -221,8 +230,9 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
d->cupsStringPageSize = value.toString();
break;
case PPK_CustomPaperSize:
d->paperSize = QPrinter::Custom;
d->printerPaperSize = QPrinter::Custom;
d->customPaperSize = value.toSizeF();
d->updatePaperSize();
break;
case PPK_PageMargins:
{
@ -232,7 +242,6 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
d->topMargin = margins.at(1).toReal();
d->rightMargin = margins.at(2).toReal();
d->bottomMargin = margins.at(3).toReal();
d->hasCustomPageMargins = true;
break;
}
default:
@ -242,7 +251,7 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
{
Q_D(const QPdfEngine);
Q_D(const QPdfPrintEngine);
QVariant ret;
switch (int(key)) {
@ -250,7 +259,7 @@ QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
ret = d->collate;
break;
case PPK_ColorMode:
ret = d->colorMode;
ret = d->grayscale ? QPrinter::GrayScale : QPrinter::Color;
break;
case PPK_Creator:
ret = d->creator;
@ -281,7 +290,7 @@ QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
ret = d->copies;
break;
case PPK_Orientation:
ret = d->orientation;
ret = d->landscape ? QPrinter::Landscape : QPrinter::Portrait;
break;
case PPK_OutputFileName:
ret = d->outputFileName;
@ -340,14 +349,8 @@ QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
case PPK_PageMargins:
{
QList<QVariant> margins;
if (d->hasCustomPageMargins) {
margins << d->leftMargin << d->topMargin
<< d->rightMargin << d->bottomMargin;
} else {
const qreal defaultMargin = 10; // ~3.5 mm
margins << defaultMargin << defaultMargin
<< defaultMargin << defaultMargin;
}
margins << d->leftMargin << d->topMargin
<< d->rightMargin << d->bottomMargin;
ret = margins;
break;
}
@ -382,7 +385,7 @@ static void closeAllOpenFds()
bool QPdfPrintEnginePrivate::openPrintDevice()
{
if(outDevice)
if (outDevice)
return false;
if (!outputFileName.isEmpty()) {
@ -470,13 +473,13 @@ bool QPdfPrintEnginePrivate::openPrintDevice()
for (i = 0; i < lphack.size(); ++i)
lpargs[i+1] = (char *)lphack.at(i).constData();
#ifndef Q_OS_OSF
if (QPdf::paperSizeToString(paperSize)) {
if (QPdf::paperSizeToString(printerPaperSize)) {
char dash_o[] = "-o";
lpargs[++i] = dash_o;
lpargs[++i] = const_cast<char *>(QPdf::paperSizeToString(paperSize));
lpargs[++i] = const_cast<char *>(QPdf::paperSizeToString(printerPaperSize));
lpargs[++i] = dash_o;
media = "media=";
media += QPdf::paperSizeToString(paperSize);
media += QPdf::paperSizeToString(printerPaperSize);
lpargs[++i] = media.data();
}
#endif
@ -523,19 +526,6 @@ bool QPdfPrintEnginePrivate::openPrintDevice()
void QPdfPrintEnginePrivate::closePrintDevice()
{
if (!outDevice)
return;
outDevice->close();
if (fd >= 0)
#if defined(Q_OS_WIN) && defined(_MSC_VER) && _MSC_VER >= 1400
::_close(fd);
#else
::close(fd);
#endif
fd = -1;
delete outDevice;
outDevice = 0;
#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
if (!cupsTempFile.isEmpty()) {
QString tempFile = cupsTempFile;
@ -575,7 +565,7 @@ void QPdfPrintEnginePrivate::closePrintDevice()
switch(duplex) {
case QPrinter::DuplexNone: break;
case QPrinter::DuplexAuto:
if (orientation == QPrinter::Portrait)
if (!landscape)
options.append(QPair<QByteArray, QByteArray>("sides", "two-sided-long-edge"));
else
options.append(QPair<QByteArray, QByteArray>("sides", "two-sided-short-edge"));
@ -589,7 +579,7 @@ void QPdfPrintEnginePrivate::closePrintDevice()
}
}
if (QCUPSSupport::cupsVersion() >= 10300 && orientation == QPrinter::Landscape) {
if (QCUPSSupport::cupsVersion() >= 10300 && landscape) {
options.append(QPair<QByteArray, QByteArray>("landscape", ""));
}
@ -619,8 +609,19 @@ void QPdfPrintEnginePrivate::closePrintDevice()
QPdfPrintEnginePrivate::QPdfPrintEnginePrivate(QPrinter::PrinterMode m)
: QPdfEnginePrivate(m)
: QPdfEnginePrivate(),
duplex(QPrinter::DuplexNone),
collate(false),
copies(1),
pageOrder(QPrinter::FirstPageFirst),
paperSource(QPrinter::Auto),
printerPaperSize(QPrinter::A4)
{
resolution = 72;
if (m == QPrinter::HighResolution)
resolution = 1200;
else if (m == QPrinter::ScreenResolution)
resolution = qt_defaultDpi();
}
QPdfPrintEnginePrivate::~QPdfPrintEnginePrivate()
@ -628,6 +629,18 @@ QPdfPrintEnginePrivate::~QPdfPrintEnginePrivate()
}
void QPdfPrintEnginePrivate::updatePaperSize()
{
if (printerPaperSize == QPrinter::Custom) {
paperSize = customPaperSize;
} else if (!cupsPaperRect.isNull()) {
QRect r = cupsPaperRect;
paperSize = r.size();
} else{
QPdf::PaperSize s = QPdf::paperSize(printerPaperSize);
paperSize = QSize(s.width, s.height);
}
}
QT_END_NAMESPACE

View File

@ -71,8 +71,6 @@
QT_BEGIN_NAMESPACE
// #define USE_NATIVE_GRADIENTS
class QImage;
class QDataStream;
class QPen;
@ -81,6 +79,20 @@ class QRegion;
class QFile;
class QPdfPrintEngine;
#define PPK_CupsOptions QPrintEngine::PrintEnginePropertyKey(0xfe00)
#define PPK_CupsPageRect QPrintEngine::PrintEnginePropertyKey(0xfe01)
#define PPK_CupsPaperRect QPrintEngine::PrintEnginePropertyKey(0xfe02)
#define PPK_CupsStringPageSize QPrintEngine::PrintEnginePropertyKey(0xfe03)
namespace QPdf {
struct PaperSize {
int width, height; // in postscript points
};
Q_GUI_EXPORT PaperSize paperSize(QPrinter::PaperSize paperSize);
Q_GUI_EXPORT const char *paperSizeToString(QPrinter::PaperSize paperSize);
}
class QPdfPrintEnginePrivate;
class QPdfPrintEngine : public QPdfEngine, public QPrintEngine
@ -121,9 +133,27 @@ public:
bool openPrintDevice();
void closePrintDevice();
void updatePaperSize();
private:
Q_DISABLE_COPY(QPdfPrintEnginePrivate)
QString printerName;
QString printProgram;
QString selectionOption;
QStringList cupsOptions;
QString cupsStringPageSize;
QPrinter::DuplexMode duplex;
bool collate;
int copies;
QPrinter::PageOrder pageOrder;
QPrinter::PaperSource paperSource;
QPrinter::PaperSize printerPaperSize;
QRect cupsPaperRect;
QRect cupsPageRect;
QSizeF customPaperSize; // in postscript points
};
QT_END_NAMESPACE