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