xref: /haiku/headers/libs/print/libprint/GraphicsDriver.h (revision 504033fbbeff50d39b7669ddbb1a17bdb65dd2f8)
1 /*
2  * GraphicsDriver.h
3  * Copyright 1999-2000 Y.Takagi. All Rights Reserved.
4  */
5 
6 #ifndef	__GRAPHICSDRIVER_H
7 #define	__GRAPHICSDRIVER_H
8 
9 #include "JobData.h"
10 #include "PrinterData.h"
11 #include "PrintProcess.h"
12 #include "SpoolMetaData.h"
13 #include "Transport.h"
14 #include "StatusWindow.h"
15 
16 class BView;
17 class BBitmap;
18 class BMessage;
19 class PrinterData;
20 class PrinterCap;
21 
22 enum {
23 	kGDFRotateBandBitmap = 1
24 };
25 
26 class GraphicsDriver {
27 public:
28 	GraphicsDriver(BMessage *, PrinterData *, const PrinterCap *);
29 	virtual ~GraphicsDriver();
30 	const JobData *getJobData(BFile *spoolFile);
31 	BMessage *takeJob(BFile *spoolFile, uint32 flags = 0);
32 	static BPoint getScale(int32 nup, BRect physicalRect, float scaling);
33 	static BPoint getOffset(int32 nup, int index, JobData::Orientation orientation, const BPoint *scale,
34 		BRect scaledPhysicalRect, BRect scaledPrintableRect, BRect physicalRect);
35 
36 protected:
37 	virtual bool startDoc();
38 	virtual bool startPage(int page_number);
39 	virtual bool nextBand(BBitmap *bitmap, BPoint *offset);
40 	virtual bool endPage(int page_number);
41 	virtual bool endDoc(bool success);
42 
43 	void writeSpoolData(const void *buffer, size_t size) throw(TransportException);
44 	void writeSpoolString(const char *buffer, ...) throw(TransportException);
45 	void writeSpoolChar(char c) throw(TransportException);
46 
47 	static void convert_to_rgb24(void* src, void* dst, int width, color_space cs);
48 	static void convert_to_gray(void* src, void* dst, int width, color_space cs);
49 
50 	const JobData *getJobData() const;
51 	const PrinterData *getPrinterData() const;
52 	const PrinterCap *getPrinterCap() const;
53 	const SpoolMetaData *getSpoolMetaData() const;
54 	int getProtocolClass() const;
55 
56 	int getPageWidth()  const;
57 	int getPageHeight() const;
58 	int getBandWidth()  const;
59 	int getBandHeight() const;
60 	int getPixelDepth() const;
61 
62 	GraphicsDriver(const GraphicsDriver &);
63 	GraphicsDriver &operator = (const GraphicsDriver &);
64 
65 private:
66 	bool setupData(BFile *file);
67 	void setupBitmap();
68 	void cleanupData();
69 	void cleanupBitmap();
70 	bool printPage(PageDataList *pages);
71 	bool collectPages(SpoolData *spool_data, PageDataList *pages);
72 	bool skipPages(SpoolData *spool_data);
73 	bool printDocument(SpoolData *spool_data);
74 	bool printJob(BFile *file);
75 	static void rgb32_to_rgb24(void* src, void* dst, int width);
76 	static void cmap8_to_rgb24(void* src, void* dst, int width);
77 	static uint8 gray(uint8 r, uint8 g, uint8 b);
78 	static void rgb32_to_gray(void* src, void* dst, int width);
79 	static void cmap8_to_gray(void* src, void* dst, int width);
80 
81 	uint32           fFlags;
82 	BMessage         *fMsg;
83 	BView            *fView;
84 	BBitmap          *fBitmap;
85 	Transport        *fTransport;
86 	JobData          *fOrgJobData;
87 	JobData          *fRealJobData;
88 	PrinterData      *fPrinterData;
89 	const PrinterCap *fPrinterCap;
90 	SpoolMetaData    *fSpoolMetaData;
91 
92 	int fPageWidth;
93 	int fPageHeight;
94 	int fBandWidth;
95 	int fBandHeight;
96 	int fPixelDepth;
97 	int fBandCount;
98 	int fInternalCopies;
99 
100 	uint32 fPageCount;
101 	StatusWindow *fStatusWindow;
102 };
103 
104 inline const JobData *GraphicsDriver::getJobData() const
105 {
106 	return fRealJobData;
107 }
108 
109 inline const PrinterData *GraphicsDriver::getPrinterData() const
110 {
111 	return fPrinterData;
112 }
113 
114 inline const PrinterCap *GraphicsDriver::getPrinterCap() const
115 {
116 	return fPrinterCap;
117 }
118 
119 inline const SpoolMetaData *GraphicsDriver::getSpoolMetaData() const
120 {
121 	return fSpoolMetaData;
122 }
123 
124 inline int GraphicsDriver::getProtocolClass() const
125 {
126 	return fPrinterData->getProtocolClass();
127 }
128 
129 inline int GraphicsDriver::getPageWidth() const
130 {
131 	return fPageWidth;
132 }
133 
134 inline int GraphicsDriver::getPageHeight() const
135 {
136 	return fPageHeight;
137 }
138 
139 inline int GraphicsDriver::getBandWidth() const
140 {
141 	return fBandWidth;
142 }
143 
144 inline int GraphicsDriver::getBandHeight() const
145 {
146 	return fBandHeight;
147 }
148 
149 #endif	/* __GRAPHICSDRIVER_H */
150