summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qpdf_p.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-08-12 14:20:08 +0200
committerLars Knoll <lars.knoll@nokia.com>2011-08-19 09:15:28 +0200
commitb91d30eae1d4f75aa9e05c2c4fa204e24e953f6d (patch)
treeaf043c317097555783537bbb49dc1659f22f6db3 /src/gui/painting/qpdf_p.h
parent8f47da7b8f8d83bd79cde05dee6046b14a292ba9 (diff)
Move the PDF related functionality into QPdf
Goal is to have all functionality related to PDF generation in QPdf, and then separate out the parts related to interfacing with the printing system into the pdf printengine. Change-Id: I8c30cb65365c503945fc270fad5cbcaabe59495d Reviewed-on: http://codereview.qt.nokia.com/3201 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Diffstat (limited to 'src/gui/painting/qpdf_p.h')
-rw-r--r--src/gui/painting/qpdf_p.h85
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