1/*
2 * PCL6.h
3 * Copyright 1999-2000 Y.Takagi. All Rights Reserved.
4 * Copyright 2003 Michael Pfeiffer.
5 */
6#ifndef __PCL6_H
7#define __PCL6_H
8
9
10#include "GraphicsDriver.h"
11#include "PCL6Cap.h"
12#include "PCL6Writer.h"
13
14
15class Halftone;
16
17
18class PCL6Driver : public GraphicsDriver, public PCL6WriterStream
19{
20public:
21					PCL6Driver(BMessage* message, PrinterData* printerData,
22						const PrinterCap* printerCap);
23
24			void	Write(const uint8* data, uint32 size);
25
26protected:
27	virtual	bool	StartDocument();
28	virtual	bool	StartPage(int page);
29	virtual	bool	NextBand(BBitmap* bitmap, BPoint* offset);
30	virtual	bool	EndPage(int page);
31	virtual	bool	EndDocument(bool success);
32
33private:
34			bool	_SupportsRLECompression();
35			bool	_SupportsDeltaRowCompression();
36			bool	_UseColorMode();
37			PCL6Writer::MediaSize _MediaSize(JobData::Paper paper);
38			PCL6Writer::MediaSource	_MediaSource(JobData::PaperSource source);
39			void	_Move(int x, int y);
40			void	_JobStart();
41			void	_WriteBitmap(const uchar* buffer, int outSize, int rowSize,
42						int x, int y, int width, int height, int deltaRowSize);
43			void	_StartRasterGraphics(int x, int y, int width, int height,
44						PCL6Writer::Compression compressionMethod);
45			void	_EndRasterGraphics();
46			void	_RasterGraphics(const uchar* buffer, int bufferSize,
47						int dataSize, int rowSize, int height,
48						int compression_method);
49			void	_JobEnd();
50
51			PCL6Writer*	fWriter;
52			PCL6Writer::MediaSide fMediaSide; // side if in duplex mode
53			Halftone*	fHalftone;
54};
55
56#endif // __PCL6_H
57