1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxPostScriptDC class
4 // Author: Julian Smart and others
7 // Copyright: (c) Julian Smart, Robert Roebling and Markus Holzem
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
22 #include "wx/dialog.h"
23 #include "wx/module.h"
27 //-----------------------------------------------------------------------------
29 //-----------------------------------------------------------------------------
33 //-----------------------------------------------------------------------------
35 //-----------------------------------------------------------------------------
37 class WXDLLEXPORT wxPostScriptDC
: public wxDC
39 DECLARE_DYNAMIC_CLASS(wxPostScriptDC
)
44 wxPostScriptDC(const wxString
& output
, bool interactive
= TRUE
, wxWindow
*parent
= (wxWindow
*) NULL
);
48 bool Create(const wxString
& output
, bool interactive
= TRUE
, wxWindow
*parent
= (wxWindow
*) NULL
);
50 virtual bool Ok() const;
52 virtual bool PrinterDialog(wxWindow
*parent
= (wxWindow
*) NULL
);
54 virtual void BeginDrawing() {}
55 virtual void EndDrawing() {}
57 void FloodFill(long x1
, long y1
, const wxColour
&col
, int style
=wxFLOOD_SURFACE
) ;
58 bool GetPixel(long x1
, long y1
, wxColour
*col
) const;
60 void DrawLine(long x1
, long y1
, long x2
, long y2
);
61 void CrossHair(long x
, long y
) ;
62 void DrawArc(long x1
,long y1
,long x2
,long y2
,long xc
,long yc
);
63 void DrawEllipticArc(long x
,long y
,long w
,long h
,double sa
,double ea
);
64 void DrawPoint(long x
, long y
);
65 // Avoid compiler warning
66 void DrawPoint(wxPoint
& point
) { wxDC::DrawPoint(point
); }
67 void DrawLines(int n
, wxPoint points
[], long xoffset
= 0, long yoffset
= 0);
68 // Avoid compiler warning
69 void DrawLines(wxList
*lines
, long xoffset
= 0, long yoffset
= 0)
70 { wxDC::DrawLines(lines
, xoffset
, yoffset
); }
71 void DrawPolygon(int n
, wxPoint points
[], long xoffset
= 0, long yoffset
= 0, int fillStyle
=wxODDEVEN_RULE
);
72 // Avoid compiler warning
73 void DrawPolygon(wxList
*lines
, long xoffset
= 0, long yoffset
= 0, int fillStyle
=wxODDEVEN_RULE
)
74 { wxDC::DrawPolygon(lines
, xoffset
, yoffset
, fillStyle
); }
75 void DrawRectangle(long x
, long y
, long width
, long height
);
76 void DrawRoundedRectangle(long x
, long y
, long width
, long height
, double radius
= 20);
77 void DrawEllipse(long x
, long y
, long width
, long height
);
79 void DrawSpline(wxList
*points
);
81 bool Blit(long xdest
, long ydest
, long width
, long height
,
82 wxDC
*source
, long xsrc
, long ysrc
, int rop
= wxCOPY
, bool useMask
= FALSE
);
83 inline bool CanDrawBitmap(void) const { return TRUE
; }
85 void DrawIcon( const wxIcon
& icon
, long x
, long y
);
86 void DrawBitmap( const wxBitmap
& bitmap
, long x
, long y
, bool useMask
=FALSE
);
88 void DrawText(const wxString
& text
, long x
, long y
, bool use16
= FALSE
);
91 void SetFont( const wxFont
& font
);
92 void SetPen( const wxPen
& pen
);
93 void SetBrush( const wxBrush
& brush
);
94 void SetLogicalFunction( int function
);
95 void SetBackground( const wxBrush
& brush
);
97 void SetClippingRegion(long x
, long y
, long width
, long height
);
98 void SetClippingRegion( const wxRegion
®ion
);
99 void DestroyClippingRegion();
101 bool StartDoc(const wxString
& message
);
106 long GetCharHeight();
108 inline bool CanGetTextExtent(void) const { return FALSE
; }
109 void GetTextExtent(const wxString
& string
, long *x
, long *y
,
110 long *descent
= (long *) NULL
,
111 long *externalLeading
= (long *) NULL
,
112 wxFont
*theFont
= (wxFont
*) NULL
, bool use16
= FALSE
);
114 void GetSize(int* width
, int* height
) const;
115 void GetSizeMM(long *width
, long *height
) const;
117 void SetAxisOrientation( bool xLeftRight
, bool yBottomUp
);
118 void SetDeviceOrigin( long x
, long y
);
120 inline void SetBackgroundMode(int WXUNUSED(mode
)) {}
121 inline void SetPalette(const wxPalette
& WXUNUSED(palette
)) {}
123 inline ofstream
*GetStream(void) const { return m_pstream
; }
127 ofstream
* m_pstream
; // PostScript output stream
129 unsigned char m_currentRed
;
130 unsigned char m_currentGreen
;
131 unsigned char m_currentBlue
;
134 double m_underlinePosition
;
135 double m_underlineThickness
;
138 // A module to allow initialization/cleanup of PostScript-related
139 // things without calling these functions from app.cpp.
141 class WXDLLEXPORT wxPostScriptModule
: public wxModule
143 DECLARE_DYNAMIC_CLASS(wxPostScriptModule
)
145 wxPostScriptModule() {}
150 // TODO Needed? Should perhaps use wxGenericPrintDialog instead.
152 #define wxID_PRINTER_COMMAND 1
153 #define wxID_PRINTER_OPTIONS 2
154 #define wxID_PRINTER_ORIENTATION 3
155 #define wxID_PRINTER_MODES 4
156 #define wxID_PRINTER_X_SCALE 5
157 #define wxID_PRINTER_Y_SCALE 6
158 #define wxID_PRINTER_X_TRANS 7
159 #define wxID_PRINTER_Y_TRANS 8
161 class WXDLLEXPORT wxPostScriptPrintDialog
: public wxDialog
163 DECLARE_CLASS(wxPostScriptPrintDialog
)
165 wxPostScriptPrintDialog (wxWindow
*parent
, const wxString
& title
,
166 const wxPoint
& pos
= wxDefaultPosition
, const wxSize
& size
= wxDefaultSize
,
167 long style
= wxDEFAULT_DIALOG_STYLE
);
169 virtual int ShowModal(void) ;
173 // Print Orientation (Should also add Left, Right)
177 };// ps_orientation = PS_PORTRAIT;
184 };// ps_action = PS_PREVIEW;
186 // PostScript printer settings
187 WXDLLEXPORT
void wxSetPrinterCommand(const char *cmd
);
188 WXDLLEXPORT
void wxSetPrintPreviewCommand(const char *cmd
);
189 WXDLLEXPORT
void wxSetPrinterOptions(const char *flags
);
190 WXDLLEXPORT
void wxSetPrinterOrientation(int orientation
);
191 WXDLLEXPORT
void wxSetPrinterScaling(double x
, double y
);
192 WXDLLEXPORT
void wxSetPrinterTranslation(long x
, long y
);
193 WXDLLEXPORT
void wxSetPrinterMode(int mode
);
194 WXDLLEXPORT
void wxSetPrinterFile(const char *f
);
195 WXDLLEXPORT
void wxSetAFMPath(const char *f
);
197 // Get current values
198 WXDLLEXPORT
char* wxGetPrinterCommand();
199 WXDLLEXPORT
char* wxGetPrintPreviewCommand();
200 WXDLLEXPORT
char* wxGetPrinterOptions();
201 WXDLLEXPORT
int wxGetPrinterOrientation();
202 WXDLLEXPORT
void wxGetPrinterScaling(double* x
, double* y
);
203 WXDLLEXPORT
void wxGetPrinterTranslation(long *x
, long *y
);
204 WXDLLEXPORT
int wxGetPrinterMode();
205 WXDLLEXPORT
char* wxGetPrinterFile();
206 WXDLLEXPORT
char* wxGetAFMPath();
209 * PostScript print setup information
212 class WXDLLEXPORT wxPrintSetupData
: public wxObject
215 char *printerCommand
;
216 char *previewCommand
;
220 double printerScaleX
;
221 double printerScaleY
;
222 long printerTranslateX
;
223 long printerTranslateY
;
224 // 1 = Preview, 2 = print to file, 3 = send to printer
227 // A name in the paper database (see wx_print.h: the printing framework)
235 void SetPrinterCommand(const char *cmd
);
236 void SetPaperName(const char *paper
);
237 void SetPrintPreviewCommand(const char *cmd
);
238 void SetPrinterOptions(const char *flags
);
239 void SetPrinterFile(const char *f
);
240 void SetPrinterOrientation(int orient
);
241 void SetPrinterScaling(double x
, double y
);
242 void SetPrinterTranslation(long x
, long y
);
243 // 1 = Preview, 2 = print to file, 3 = send to printer
244 void SetPrinterMode(int mode
);
245 void SetAFMPath(const char *f
);
246 void SetColour(bool col
);
248 // Get current values
249 char *GetPrinterCommand();
250 char *GetPrintPreviewCommand();
251 char *GetPrinterOptions();
252 char *GetPrinterFile();
253 char *GetPaperName();
254 int GetPrinterOrientation();
255 void GetPrinterScaling(double* x
, double* y
);
256 void GetPrinterTranslation(long *x
, long *y
);
257 int GetPrinterMode();
261 void operator=(wxPrintSetupData
& data
);
264 DECLARE_DYNAMIC_CLASS(wxPrintSetupData
)
267 WXDLLEXPORT_DATA(extern wxPrintSetupData
*) wxThePrintSetupData
;
268 WXDLLEXPORT
extern void wxInitializePrintSetupData(bool init
= TRUE
);
271 * Again, this only really needed for non-Windows platforms
272 * or if you want to test the PostScript printing under Windows.
275 class WXDLLEXPORT wxPrintPaperType
: public wxObject
278 wxPrintPaperType(const char *name
= (const char *) NULL
, int wmm
= 0, int hmm
= 0, int wp
= 0, int hp
= 0);
289 DECLARE_DYNAMIC_CLASS(wxPrintPaperType
)
292 class WXDLLEXPORT wxPrintPaperDatabase
: public wxList
295 wxPrintPaperDatabase();
296 ~wxPrintPaperDatabase();
298 void CreateDatabase();
299 void ClearDatabase();
301 void AddPaperType(const char *name
, int wmm
, int hmm
, int wp
, int hp
);
302 wxPrintPaperType
*FindPaperType(const char *name
);
305 DECLARE_DYNAMIC_CLASS(wxPrintPaperDatabase
)
308 WXDLLEXPORT_DATA(extern wxPrintPaperDatabase
*) wxThePrintPaperDatabase
;