325 lines
9.3 KiB
C++
325 lines
9.3 KiB
C++
/*
|
|
* File: wx_dcps.h
|
|
* Purpose: PostScript device context
|
|
* Author: Julian Smart
|
|
* Created: 1993
|
|
* Updated:
|
|
* Copyright: (c) 2004-2010 PLT Scheme Inc.
|
|
* Copyright: (c) 1993, AIAI, University of Edinburgh
|
|
*/
|
|
|
|
#ifndef wx_dcpsh
|
|
#define wx_dcpsh
|
|
|
|
#ifdef __GNUG__
|
|
# ifndef wx_mac
|
|
# pragma interface
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef wx_xt
|
|
class wxBitmap;
|
|
class wxBrush;
|
|
class wxColour;
|
|
class wxColourMap;
|
|
class wxFont;
|
|
class wxList;
|
|
class wxPen;
|
|
class ofstream;
|
|
#else
|
|
#include "wx_dc.h"
|
|
#endif
|
|
|
|
class wxMemoryDC;
|
|
class wxPath;
|
|
#ifdef wx_mac
|
|
class wxPrintData;
|
|
#endif
|
|
|
|
#if USE_POSTSCRIPT
|
|
|
|
#ifdef IN_CPROTO
|
|
typedef void *wxPostScriptDC ;
|
|
#else
|
|
|
|
#ifdef wx_xt
|
|
# define DRAW_TEXT_CONST /* empty */
|
|
#else
|
|
# define DRAW_TEXT_CONST const
|
|
#endif
|
|
|
|
class wxPSStream;
|
|
|
|
class wxPostScriptDC: public wxDC
|
|
{
|
|
public:
|
|
#ifdef wx_xt
|
|
char *title;
|
|
#endif
|
|
int page_number;
|
|
wxPSStream *pstream; // PostScript output stream
|
|
char *filename;
|
|
long boundingboxpos, fontlistpos;
|
|
unsigned char currentRed;
|
|
unsigned char currentGreen;
|
|
unsigned char currentBlue;
|
|
double clipx, clipy, clipw, cliph;
|
|
|
|
double max_x, max_y, min_x, min_y;
|
|
|
|
char *current_font_name, *next_font_name;
|
|
double current_font_size, next_font_size;
|
|
|
|
double paper_x, paper_y, paper_w, paper_h, paper_x_scale, paper_y_scale;
|
|
double paper_margin_x, paper_margin_y;
|
|
Bool landscape, resetFont, level2ok;
|
|
char *afm_path;
|
|
|
|
int mode, use_paper_bbox, as_eps;
|
|
char *preview_cmd, *print_cmd, *print_opts;
|
|
|
|
void *used_fonts;
|
|
|
|
// Create a printer DC
|
|
wxPostScriptDC(Bool interactive = TRUE, wxWindow *parent = NULL, Bool usePaperBBox = FALSE, Bool asEPS = TRUE);
|
|
|
|
~wxPostScriptDC(void);
|
|
|
|
Bool Create(Bool interactive = TRUE, wxWindow *parent = NULL, Bool usePaperBBox = FALSE, Bool asEPS = TRUE);
|
|
|
|
Bool PrinterDialog(Bool interactive, wxWindow *parent, Bool usePaperBBox);
|
|
|
|
inline virtual void BeginDrawing(void) {} ;
|
|
inline virtual void EndDrawing(void) {} ;
|
|
|
|
Bool GetPixel(double x1, double y1, wxColour *col) ;
|
|
|
|
void DrawLine(double x1, double y1, double x2, double y2);
|
|
void DrawArc(double x1,double y1,double w,double h,double start,double end);
|
|
void DrawPoint(double x, double y);
|
|
void DrawPoint(wxPoint* point) { DrawPoint(point->x, point->y); }
|
|
void DrawLines(int n, wxPoint points[], double xoffset = 0, double yoffset = 0);
|
|
void DrawPolygon(int n, wxPoint points[], double xoffset = 0, double yoffset = 0, int fillStyle=wxODDEVEN_RULE);
|
|
void DrawPath(wxPath *p, double dx, double dy, int fillStyle=wxODDEVEN_RULE);
|
|
|
|
void DrawSpline(double x1, double y1, double x2, double y2, double x3, double y3);
|
|
|
|
void DrawRectangle(double x, double y, double width, double height);
|
|
void DrawRoundedRectangle(double x, double y, double width, double height, double radius = 20);
|
|
void DrawEllipse(double x, double y, double width, double height);
|
|
void DrawText(DRAW_TEXT_CONST char *text, double x, double y,
|
|
Bool combine = FALSE, Bool use16 = FALSE,
|
|
int dt = 0, double angle = 0.0);
|
|
|
|
void Clear(void);
|
|
void SetFont(wxFont *font);
|
|
void SetPen(wxPen *pen);
|
|
void SetBrush(wxBrush *brush);
|
|
void SetBackground(wxColour *c);
|
|
void SetClippingRect(double x, double y, double width, double height);
|
|
wxRegion *GetClippingRegion();
|
|
void SetClippingRegion(wxRegion *r);
|
|
void DestroyClippingRegion(void);
|
|
|
|
Bool StartDoc(char *message);
|
|
void EndDoc(void);
|
|
void StartPage(void);
|
|
void EndPage(void);
|
|
|
|
double GetCharHeight(void);
|
|
double GetCharWidth(void);
|
|
void GetTextExtent(const char *string, double *x, double *y,
|
|
double *descent = NULL, double *externalLeading = NULL,
|
|
wxFont *theFont = NULL,
|
|
Bool combine = FALSE, Bool use16 = FALSE, int dt = 0, int slen = -1);
|
|
void SetMapMode(int mode);
|
|
void SetUserScale(double x, double y);
|
|
double DeviceToLogicalX(int x);
|
|
double DeviceToLogicalY(int y);
|
|
double DeviceToLogicalXRel(int x);
|
|
double DeviceToLogicalYRel(int y);
|
|
double UnscrolledDeviceToLogicalX(int x);
|
|
double UnscrolledDeviceToLogicalY(int y);
|
|
int LogicalToDeviceX(double x);
|
|
int LogicalToDeviceY(double y);
|
|
int LogicalToDeviceXRel(double x);
|
|
int LogicalToDeviceYRel(double y);
|
|
int LogicalToUnscrolledDeviceX(double x);
|
|
int LogicalToUnscrolledDeviceY(double y);
|
|
double FLogicalToDeviceX(double x);
|
|
double FLogicalToDeviceY(double y);
|
|
double FLogicalToDeviceXRel(double x);
|
|
double FLogicalToDeviceYRel(double y);
|
|
double FLogicalToUnscrolledDeviceX(double x);
|
|
double FLogicalToUnscrolledDeviceY(double y);
|
|
|
|
double FsLogicalToDeviceX(double x, double o, double s);
|
|
double FsLogicalToDeviceY(double y, double o, double s);
|
|
double FsLogicalToDeviceXRel(double x, double o, double s);
|
|
double FsLogicalToDeviceYRel(double y, double o, double s);
|
|
|
|
Bool Blit(double xdest, double ydest, double width, double height,
|
|
wxBitmap *source, double xsrc, double ysrc, int rop = wxSOLID, wxColour *c = NULL, wxBitmap *mask=NULL);
|
|
Bool Blit(double xdest, double ydest, double width, double height,
|
|
wxMemoryDC *source, double xsrc, double ysrc, int rop = wxSOLID, wxColour *c = NULL, wxMemoryDC *mask=NULL);
|
|
inline Bool CanGetTextExtent(void) { return USE_AFM_FOR_POSTSCRIPT; }
|
|
inline Bool CanDrawBitmap(void) { return TRUE; }
|
|
|
|
void GetSize(double *width, double *height);
|
|
void GetSizeMM(double *width, double *height);
|
|
|
|
inline void SetColourMap(wxColourMap *WXUNUSED(cmap)) {}
|
|
|
|
void SetBackgroundMode(int mode);
|
|
void SetTextBackground(wxColour *col);
|
|
void SetTextForeground(wxColour *col);
|
|
void TryColour(wxColour *src, wxColour *dest);
|
|
|
|
Bool GlyphAvailable(int c, wxFont *f = NULL);
|
|
|
|
void CalcBoundingBoxClip(double x, double y);
|
|
|
|
void SetAntiAlias(int mode);
|
|
|
|
virtual int CacheFontMetricsKey();
|
|
|
|
virtual Bool Ok() { return ok; }
|
|
};
|
|
|
|
#ifndef wx_xt
|
|
|
|
// Print Orientation (Should also add Left, Right)
|
|
enum {
|
|
PS_PORTRAIT,
|
|
PS_LANDSCAPE
|
|
};// ps_orientation = PS_PORTRAIT;
|
|
|
|
// Print Actions
|
|
enum {
|
|
PS_PRINTER,
|
|
PS_FILE,
|
|
PS_PREVIEW
|
|
};// ps_action = PS_PREVIEW;
|
|
|
|
#endif
|
|
|
|
extern void wxInitializePrintSetupData(Bool init = TRUE);
|
|
|
|
class wxPrintSetupData : public wxObject {
|
|
public:
|
|
wxPrintSetupData(void);
|
|
~wxPrintSetupData(void);
|
|
|
|
void copy (wxPrintSetupData* data);
|
|
|
|
void SetPrinterCommand(char *cmd);
|
|
void SetPaperName(char *paper);
|
|
void SetPrintPreviewCommand(char *cmd);
|
|
void SetPrinterOptions(char *flags);
|
|
void SetPrinterFile(char *f);
|
|
void SetAFMPath(char *f);
|
|
void SetPrinterMode(int mode);
|
|
void SetPrinterOrientation(int orient);
|
|
void SetPrinterScaling(double x, double y)
|
|
{ printer_scale_x = x; printer_scale_y = y; }
|
|
void SetPrinterTranslation(double x, double y)
|
|
{ printer_translate_x = x; printer_translate_y = y; }
|
|
void SetColour(Bool col)
|
|
{ print_colour = col; }
|
|
void SetLevel2(Bool l2)
|
|
{ print_level_2 = l2; }
|
|
void SetEditorMargin(long x, long y)
|
|
{ emargin_h = x; emargin_v = y; }
|
|
void SetMargin(double x, double y)
|
|
{ ps_margin_h = x; ps_margin_v = y; }
|
|
|
|
inline char *GetPrinterCommand(void)
|
|
{ return printer_command; }
|
|
inline char *GetPrintPreviewCommand(void)
|
|
{ return preview_command; }
|
|
inline char *GetPrinterOptions(void)
|
|
{ return printer_flags; }
|
|
inline char *GetPrinterFile(void)
|
|
{ return printer_file; }
|
|
inline char *GetPaperName(void)
|
|
{ return paper_name; }
|
|
inline int GetPrinterOrientation(void)
|
|
{ return printer_orient; }
|
|
inline void GetPrinterScaling(double *x, double *y)
|
|
{ *x=printer_scale_x; *y=printer_scale_y; }
|
|
inline void GetPrinterTranslation(double *x, double *y)
|
|
{ *x=printer_translate_x; *y=printer_translate_y; }
|
|
inline int GetPrinterMode(void)
|
|
{ return printer_mode; }
|
|
inline char *GetAFMPath(void)
|
|
{ return afm_path; }
|
|
inline Bool GetColour(void)
|
|
{ return print_colour; }
|
|
inline Bool GetLevel2()
|
|
{ return print_level_2; }
|
|
void GetEditorMargin(long *x, long *y)
|
|
{ *x = emargin_h; *y = emargin_v; }
|
|
void GetMargin(double *x, double *y)
|
|
{ *x = ps_margin_h; *y = ps_margin_v; }
|
|
|
|
Bool CanShowNative();
|
|
Bool ShowNative(wxWindow *parent);
|
|
|
|
private:
|
|
friend class wxPostScriptDC;
|
|
|
|
char *printer_command;
|
|
char *preview_command;
|
|
char *printer_flags;
|
|
char *printer_file;
|
|
int printer_orient;
|
|
double printer_scale_x;
|
|
double printer_scale_y;
|
|
double printer_translate_x;
|
|
double printer_translate_y;
|
|
int printer_mode;
|
|
char *afm_path;
|
|
char *paper_name;
|
|
Bool print_colour;
|
|
Bool print_level_2;
|
|
long emargin_h, emargin_v;
|
|
double ps_margin_h, ps_margin_v;
|
|
#ifdef wx_mac
|
|
public:
|
|
wxPrintData *native;
|
|
#endif
|
|
};
|
|
|
|
extern wxPrintSetupData *wxGetThePrintSetupData();
|
|
extern void wxSetThePrintSetupData(wxPrintSetupData *);
|
|
|
|
class wxPrintPaperType : public wxObject {
|
|
public:
|
|
wxPrintPaperType(char *name=NULL, int wmm=0, int hmm=0, int wp=0, int hp=0);
|
|
~wxPrintPaperType(void);
|
|
public:
|
|
int widthMM;
|
|
int heightMM;
|
|
int widthPixels;
|
|
int heightPixels;
|
|
char *pageName;
|
|
};
|
|
|
|
class wxPrintPaperDatabase : public wxList {
|
|
public:
|
|
wxPrintPaperDatabase(void);
|
|
~wxPrintPaperDatabase(void);
|
|
|
|
void CreateDatabase(void);
|
|
void ClearDatabase(void);
|
|
|
|
void AddPaperType(char *name, int wmm, int hmm, int wp, int hp);
|
|
wxPrintPaperType *FindPaperType(char *name);
|
|
};
|
|
|
|
extern wxPrintPaperDatabase *wxThePrintPaperDatabase;
|
|
|
|
#endif // IN_CPROTO
|
|
#endif // USE_POSTSCRIPT
|
|
#endif // wx_dcpsh
|