fcccd8b759
* libprint based drivers can now show a preview window and show progress window while printing contributed in part by Hartmut Reh. * Libprint and PCL6 driver bug fixes. * Code clean-up (removed code duplications, coding style, copyright text) Builds under Linux. Not tested under BeOS. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19882 a95241bf-73f2-0310-859d-f6bbb57e9c96
150 lines
3.7 KiB
C++
150 lines
3.7 KiB
C++
/*
|
|
* GraphicsDriver.h
|
|
* Copyright 1999-2000 Y.Takagi. All Rights Reserved.
|
|
*/
|
|
|
|
#ifndef __GRAPHICSDRIVER_H
|
|
#define __GRAPHICSDRIVER_H
|
|
|
|
#include "JobData.h"
|
|
#include "PrinterData.h"
|
|
#include "PrintProcess.h"
|
|
#include "SpoolMetaData.h"
|
|
#include "Transport.h"
|
|
#include "StatusWindow.h"
|
|
|
|
class BView;
|
|
class BBitmap;
|
|
class BMessage;
|
|
class PrinterData;
|
|
class PrinterCap;
|
|
|
|
enum {
|
|
kGDFRotateBandBitmap = 1
|
|
};
|
|
|
|
class GraphicsDriver {
|
|
public:
|
|
GraphicsDriver(BMessage *, PrinterData *, const PrinterCap *);
|
|
virtual ~GraphicsDriver();
|
|
const JobData *getJobData(BFile *spoolFile);
|
|
BMessage *takeJob(BFile *spool, uint32 flags = 0);
|
|
static BPoint getScale(int32 nup, BRect physicalRect, float scaling);
|
|
static BPoint getOffset(int32 nup, int index, JobData::Orientation orientation, const BPoint *scale,
|
|
BRect scaledPhysicalRect, BRect scaledPrintableRect, BRect physicalRect);
|
|
|
|
protected:
|
|
virtual bool startDoc();
|
|
virtual bool startPage(int page_number);
|
|
virtual bool nextBand(BBitmap *bitmap, BPoint *offset);
|
|
virtual bool endPage(int page_number);
|
|
virtual bool endDoc(bool success);
|
|
|
|
void writeSpoolData(const void *buffer, size_t size) throw(TransportException);
|
|
void writeSpoolString(const char *buffer, ...) throw(TransportException);
|
|
void writeSpoolChar(char c) throw(TransportException);
|
|
|
|
static void convert_to_rgb24(void* src, void* dst, int width, color_space cs);
|
|
static void convert_to_gray(void* src, void* dst, int width, color_space cs);
|
|
|
|
const JobData *getJobData() const;
|
|
const PrinterData *getPrinterData() const;
|
|
const PrinterCap *getPrinterCap() const;
|
|
const SpoolMetaData *getSpoolMetaData() const;
|
|
int getProtocolClass() const;
|
|
|
|
int getPageWidth() const;
|
|
int getPageHeight() const;
|
|
int getBandWidth() const;
|
|
int getBandHeight() const;
|
|
int getPixelDepth() const;
|
|
|
|
GraphicsDriver(const GraphicsDriver &);
|
|
GraphicsDriver &operator = (const GraphicsDriver &);
|
|
|
|
private:
|
|
bool setupData(BFile *file);
|
|
void setupBitmap();
|
|
void cleanupData();
|
|
void cleanupBitmap();
|
|
bool printPage(PageDataList *pages);
|
|
bool collectPages(SpoolData *spool_data, PageDataList *pages);
|
|
bool skipPages(SpoolData *spool_data);
|
|
bool printDocument(SpoolData *spool_data);
|
|
bool printJob(BFile *file);
|
|
static void rgb32_to_rgb24(void* src, void* dst, int width);
|
|
static void cmap8_to_rgb24(void* src, void* dst, int width);
|
|
static uint8 gray(uint8 r, uint8 g, uint8 b);
|
|
static void rgb32_to_gray(void* src, void* dst, int width);
|
|
static void cmap8_to_gray(void* src, void* dst, int width);
|
|
|
|
uint32 fFlags;
|
|
BMessage *fMsg;
|
|
BView *fView;
|
|
BBitmap *fBitmap;
|
|
Transport *fTransport;
|
|
JobData *fOrgJobData;
|
|
JobData *fRealJobData;
|
|
PrinterData *fPrinterData;
|
|
const PrinterCap *fPrinterCap;
|
|
SpoolMetaData *fSpoolMetaData;
|
|
|
|
int fPageWidth;
|
|
int fPageHeight;
|
|
int fBandWidth;
|
|
int fBandHeight;
|
|
int fPixelDepth;
|
|
int fBandCount;
|
|
int fInternalCopies;
|
|
|
|
uint32 fPageCount;
|
|
StatusWindow *fStatusWindow;
|
|
};
|
|
|
|
inline const JobData *GraphicsDriver::getJobData() const
|
|
{
|
|
return fRealJobData;
|
|
}
|
|
|
|
inline const PrinterData *GraphicsDriver::getPrinterData() const
|
|
{
|
|
return fPrinterData;
|
|
}
|
|
|
|
inline const PrinterCap *GraphicsDriver::getPrinterCap() const
|
|
{
|
|
return fPrinterCap;
|
|
}
|
|
|
|
inline const SpoolMetaData *GraphicsDriver::getSpoolMetaData() const
|
|
{
|
|
return fSpoolMetaData;
|
|
}
|
|
|
|
inline int GraphicsDriver::getProtocolClass() const
|
|
{
|
|
return fPrinterData->getProtocolClass();
|
|
}
|
|
|
|
inline int GraphicsDriver::getPageWidth() const
|
|
{
|
|
return fPageWidth;
|
|
}
|
|
|
|
inline int GraphicsDriver::getPageHeight() const
|
|
{
|
|
return fPageHeight;
|
|
}
|
|
|
|
inline int GraphicsDriver::getBandWidth() const
|
|
{
|
|
return fBandWidth;
|
|
}
|
|
|
|
inline int GraphicsDriver::getBandHeight() const
|
|
{
|
|
return fBandHeight;
|
|
}
|
|
|
|
#endif /* __GRAPHICSDRIVER_H */
|