diff options
Diffstat (limited to 'src/gui/painting/qpdf_p.h')
-rw-r--r-- | src/gui/painting/qpdf_p.h | 85 |
1 files changed, 69 insertions, 16 deletions
diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h index c9e14b6b7b..8efa51743d 100644 --- a/src/gui/painting/qpdf_p.h +++ b/src/gui/painting/qpdf_p.h @@ -56,14 +56,12 @@ #include "QtCore/qstring.h" #include "QtCore/qvector.h" #include "private/qstroker_p.h" +#include "private/qpaintengine_alpha_p.h" #include "private/qfontengine_p.h" -#include "QtGui/qprinter.h" #include "private/qfontsubset_p.h" -#include "private/qpaintengine_alpha_p.h" -#include "qprintengine.h" -#include "qbuffer.h" -#ifndef QT_NO_PRINTER +// ### remove! +#include <qprinter.h> QT_BEGIN_NAMESPACE @@ -179,7 +177,7 @@ private: class QPdfBaseEnginePrivate; -class QPdfBaseEngine : public QAlphaPaintEngine, public QPrintEngine +class QPdfBaseEngine : public QAlphaPaintEngine { Q_DECLARE_PRIVATE(QPdfBaseEngine) public: @@ -198,18 +196,22 @@ public: void drawTextItem(const QPointF &p, const QTextItem &textItem); + void drawPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QRectF & sr); + void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, + Qt::ImageConversionFlags flags = Qt::AutoColor); + void drawTiledPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QPointF & point); + void updateState(const QPaintEngineState &state); int metric(QPaintDevice::PaintDeviceMetric metricType) const; + Type type() const; // end reimplementations QPaintEngine // Printer stuff... bool newPage(); - void setProperty(PrintEnginePropertyKey key, const QVariant &value); - QVariant property(PrintEnginePropertyKey key) const; void setPen(); - virtual void setBrush() = 0; + void setBrush(); void setupGraphicsState(QPaintEngine::DirtyFlags flags); private: @@ -223,16 +225,33 @@ public: QPdfBaseEnginePrivate(QPrinter::PrinterMode m); ~QPdfBaseEnginePrivate(); - bool openPrintDevice(); - void closePrintDevice(); - - - virtual void drawTextItem(const QPointF &p, const QTextItemInt &ti); inline uint requestObject() { return currentObject++; } QRect paperRect() const; QRect pageRect() const; + int width() const { + QRect r = paperRect(); + return qRound(r.width()*72./resolution); + } + int height() const { + QRect r = paperRect(); + return qRound(r.height()*72./resolution); + } + + void writeHeader(); + void writeTail(); + + int addImage(const QImage &image, bool *bitmap, qint64 serial_no); + int addConstantAlphaObject(int brushAlpha, int penAlpha = 255); + int addBrushPattern(const QTransform &matrix, bool *specifyColor, int *gStateObject); + + void drawTextItem(const QPointF &p, const QTextItemInt &ti); + + QTransform pageMatrix() const; + + void newPage(); + bool postscript; int currentObject; @@ -289,11 +308,45 @@ public: #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) QString cupsTempFile; #endif + +private: +#ifdef USE_NATIVE_GRADIENTS + int gradientBrush(const QBrush &b, const QMatrix &matrix, int *gStateObject); +#endif + + void writeInfo(); + void writePageRoot(); + void writeFonts(); + void embedFont(QFontSubset *font); + + QVector<int> xrefPositions; + QDataStream* stream; + int streampos; + + int writeImage(const QByteArray &data, int width, int height, int depth, + int maskObject, int softMaskObject, bool dct = false); + void writePage(); + + int addXrefEntry(int object, bool printostr = true); + void printString(const QString &string); + void xprintf(const char* fmt, ...); + inline void write(const QByteArray &data) { + stream->writeRawData(data.constData(), data.size()); + streampos += data.size(); + } + + int writeCompressed(const char *src, int len); + inline int writeCompressed(const QByteArray &data) { return writeCompressed(data.constData(), data.length()); } + int writeCompressed(QIODevice *dev); + + // various PDF objects + int pageRoot, catalog, info, graphicsState, patternColorSpace; + QVector<uint> pages; + QHash<qint64, uint> imageCache; + QHash<QPair<uint, uint>, uint > alphaCache; }; QT_END_NAMESPACE -#endif // QT_NO_PRINTER - #endif // QPDF_P_H |