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 10 #include "JobData.h" 11 #include "PrinterData.h" 12 #include "PrintProcess.h" 13 #include "SpoolMetaData.h" 14 #include "Transport.h" 15 #include "StatusWindow.h" 16 17 18 class BView; 19 class BBitmap; 20 class BMessage; 21 class PrinterData; 22 class PrinterCap; 23 24 25 class GraphicsDriver { 26 public: 27 GraphicsDriver(BMessage* message, PrinterData* printerData, 28 const PrinterCap *printerCap); 29 virtual ~GraphicsDriver(); 30 31 const JobData* GetJobData(BFile* spoolFile); 32 BMessage* TakeJob(BFile* spoolFile); 33 static BPoint GetScale(int32 nup, BRect physicalRect, float scaling); 34 static BPoint GetOffset(int32 nup, int index, 35 JobData::Orientation orientation, const BPoint* scale, 36 BRect scaledPhysicalRect, BRect scaledPrintableRect, 37 BRect physicalRect); 38 39 protected: 40 GraphicsDriver(const GraphicsDriver &); 41 42 GraphicsDriver& operator = (const GraphicsDriver &); 43 44 virtual bool StartDocument(); 45 virtual bool StartPage(int page_number); 46 virtual bool NextBand(BBitmap* bitmap, BPoint* offset); 47 virtual bool EndPage(int page_number); 48 virtual bool EndDocument(bool success); 49 50 void WriteSpoolData(const void* buffer, size_t size) 51 /* throw (TransportException) */; 52 void WriteSpoolString(const char* buffer, ...) 53 /* throw (TransportException) */; 54 void WriteSpoolChar(char c) 55 /* throw (TransportException) */; 56 57 void ReadSpoolData(void* buffer, size_t size) 58 /* throw (TransportException) */; 59 int ReadSpoolChar() 60 /* throw (TransportException) */; 61 62 static void ConvertToRGB24(const void* src, void* dst, int width, 63 color_space cs); 64 static void ConvertToGray(const void* src, void* dst, int width, 65 color_space cs); 66 67 const JobData* GetJobData() const; 68 const PrinterData* GetPrinterData() const; 69 const PrinterCap* GetPrinterCap() const; 70 const SpoolMetaData* GetSpoolMetaData() const; 71 int GetProtocolClass() const; 72 73 int GetPageHeight() const; 74 75 private: 76 bool _SetupData(BFile* file); 77 void _SetupBitmap(); 78 void _CleanupData(); 79 void _CleanupBitmap(); 80 bool _PrintPage(PageDataList* pages); 81 bool _PrintBand(BBitmap* band, BPoint* offset); 82 void _RotateInto(BBitmap* target, const BBitmap* source); 83 bool _CollectPages(SpoolData* spoolData, PageDataList* pages); 84 bool _SkipPages(SpoolData* spoolData); 85 bool _PrintDocument(SpoolData* spoolData); 86 bool _PrintJob(BFile* file); 87 88 bool _NeedRotateBitmapBand() const; 89 90 static void _ConvertRGB32ToRGB24(const void* src, void* dst, int width); 91 static void _ConvertCMAP8ToRGB24(const void* src, void* dst, int width); 92 static uint8 _ConvertToGray(uint8 r, uint8 g, uint8 b); 93 static void _ConvertRGB32ToGray(const void* src, void* dst, int width); 94 static void _ConvertCMAP8ToGray(const void* src, void* dst, int width); 95 96 BMessage* fMessage; 97 BView* fView; 98 BBitmap* fBitmap; 99 BBitmap* fRotatedBitmap; 100 Transport* fTransport; 101 JobData* fOrgJobData; 102 JobData* fRealJobData; 103 PrinterData* fPrinterData; 104 const PrinterCap* fPrinterCap; 105 SpoolMetaData* fSpoolMetaData; 106 107 int fPageWidth; 108 int fPageHeight; 109 int fBandWidth; 110 int fBandHeight; 111 int fPixelDepth; 112 int fBandCount; 113 int fInternalCopies; 114 115 uint32 fPageCount; 116 117 StatusWindow* fStatusWindow; 118 }; 119 120 121 inline const JobData* 122 GraphicsDriver::GetJobData() const 123 { 124 return fRealJobData; 125 } 126 127 128 inline const PrinterData* 129 GraphicsDriver::GetPrinterData() const 130 { 131 return fPrinterData; 132 } 133 134 135 inline const PrinterCap* 136 GraphicsDriver::GetPrinterCap() const 137 { 138 return fPrinterCap; 139 } 140 141 142 inline const SpoolMetaData* 143 GraphicsDriver::GetSpoolMetaData() const 144 { 145 return fSpoolMetaData; 146 } 147 148 149 inline int 150 GraphicsDriver::GetProtocolClass() const 151 { 152 return fPrinterData->GetProtocolClass(); 153 } 154 155 156 inline int 157 GraphicsDriver::GetPageHeight() const 158 { 159 if (!_NeedRotateBitmapBand()) 160 return fPageHeight; 161 return fPageWidth; 162 } 163 164 #endif /* __GRAPHICSDRIVER_H */ 165