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 /////////////////////////////////////////////////////////////////////////////
20 #if wxUSE_PRINTING_ARCHITECTURE
24 #include "wx/dialog.h"
25 #include "wx/module.h"
26 #include "wx/cmndata.h"
28 //-----------------------------------------------------------------------------
30 //-----------------------------------------------------------------------------
34 //-----------------------------------------------------------------------------
36 //-----------------------------------------------------------------------------
38 class WXDLLEXPORT wxPostScriptDC
: public wxDC
40 DECLARE_DYNAMIC_CLASS(wxPostScriptDC
)
46 // Deprecated constructor
47 wxPostScriptDC(const wxString
& output
, bool interactive
= TRUE
, wxWindow
*parent
= (wxWindow
*) NULL
);
49 // Recommended constructor
50 wxPostScriptDC(const wxPrintData
& printData
);
55 bool Create(const wxString
& output
, bool interactive
= TRUE
, wxWindow
*parent
= (wxWindow
*) NULL
);
57 virtual bool Ok() const;
59 // Deprecated: use wxGenericPrintDialog instead
60 virtual bool PrinterDialog(wxWindow
*parent
= (wxWindow
*) NULL
);
62 virtual void BeginDrawing() {}
63 virtual void EndDrawing() {}
65 bool DoFloodFill(wxCoord x1
, wxCoord y1
, const wxColour
&col
, int style
=wxFLOOD_SURFACE
);
66 bool DoGetPixel(wxCoord x1
, wxCoord y1
, wxColour
*col
) const;
68 void DoDrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
69 void DoCrossHair(wxCoord x
, wxCoord y
) ;
70 void DoDrawArc(wxCoord x1
,wxCoord y1
,wxCoord x2
,wxCoord y2
,wxCoord xc
,wxCoord yc
);
71 void DoDrawEllipticArc(wxCoord x
,wxCoord y
,wxCoord w
,wxCoord h
,double sa
,double ea
);
72 void DoDrawPoint(wxCoord x
, wxCoord y
);
73 void DoDrawLines(int n
, wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0);
74 void DoDrawPolygon(int n
, wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0, int fillStyle
=wxODDEVEN_RULE
);
75 void DoDrawRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
76 void DoDrawRoundedRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
, double radius
= 20);
77 void DoDrawEllipse(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
79 void DoDrawSpline(wxList
*points
);
81 bool DoBlit(wxCoord xdest
, wxCoord ydest
, wxCoord width
, wxCoord height
,
82 wxDC
*source
, wxCoord xsrc
, wxCoord ysrc
, int rop
= wxCOPY
, bool useMask
= FALSE
,
83 wxCoord xsrcMask
= -1, wxCoord ysrcMask
= -1);
84 bool CanDrawBitmap() const { return TRUE
; }
86 void DoDrawIcon( const wxIcon
& icon
, wxCoord x
, wxCoord y
);
87 void DoDrawBitmap( const wxBitmap
& bitmap
, wxCoord x
, wxCoord y
, bool useMask
=FALSE
);
89 void DoDrawText(const wxString
& text
, wxCoord x
, wxCoord y
);
90 void DoDrawRotatedText(const wxString
& text
, wxCoord x
, wxCoord y
, double angle
);
93 void SetFont( const wxFont
& font
);
94 void SetPen( const wxPen
& pen
);
95 void SetBrush( const wxBrush
& brush
);
96 void SetLogicalFunction( int function
);
97 void SetBackground( const wxBrush
& brush
);
99 void DoSetClippingRegion(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
100 void DestroyClippingRegion();
102 void DoSetClippingRegionAsRegion( const wxRegion
&WXUNUSED(clip
) ) { }
104 bool StartDoc(const wxString
& message
);
109 wxCoord
GetCharHeight() const;
110 wxCoord
GetCharWidth() const;
111 bool CanGetTextExtent() const { return TRUE
; }
112 void DoGetTextExtent(const wxString
& string
, wxCoord
*x
, wxCoord
*y
,
113 wxCoord
*descent
= (wxCoord
*) NULL
,
114 wxCoord
*externalLeading
= (wxCoord
*) NULL
,
115 wxFont
*theFont
= (wxFont
*) NULL
) const;
117 void DoGetSize(int* width
, int* height
) const;
118 void DoGetSizeMM(int *width
, int *height
) const;
120 // Resolution in pixels per logical inch
121 wxSize
GetPPI() const;
123 void SetAxisOrientation( bool xLeftRight
, bool yBottomUp
);
124 void SetDeviceOrigin( wxCoord x
, wxCoord y
);
126 void SetBackgroundMode(int WXUNUSED(mode
)) { }
127 void SetPalette(const wxPalette
& WXUNUSED(palette
)) { }
129 wxPrintData
& GetPrintData() { return m_printData
; }
130 void SetPrintData(const wxPrintData
& data
) { m_printData
= data
; }
132 virtual int GetDepth() const { return 24; }
134 static void SetResolution(int ppi
);
135 static int GetResolution();
138 static float ms_PSScaleFactor
;
142 FILE* m_pstream
; // PostScript output stream
144 unsigned char m_currentRed
;
145 unsigned char m_currentGreen
;
146 unsigned char m_currentBlue
;
149 double m_underlinePosition
;
150 double m_underlineThickness
;
151 wxPrintData m_printData
;
154 // Deprecated: should use wxGenericPrintDialog instead.
158 wxID_PRINTER_COMMAND
= 1,
159 wxID_PRINTER_OPTIONS
,
160 wxID_PRINTER_ORIENTATION
,
162 wxID_PRINTER_X_SCALE
,
163 wxID_PRINTER_Y_SCALE
,
164 wxID_PRINTER_X_TRANS
,
168 class WXDLLEXPORT wxPostScriptPrintDialog
: public wxDialog
170 DECLARE_CLASS(wxPostScriptPrintDialog
)
172 wxPostScriptPrintDialog (wxWindow
*parent
, const wxString
& title
,
173 const wxPoint
& pos
= wxDefaultPosition
, const wxSize
& size
= wxDefaultSize
,
174 wxCoord style
= wxDEFAULT_DIALOG_STYLE
);
176 virtual int ShowModal();
180 // Print Orientation (Should also add Left, Right)
185 };// ps_orientation = PS_PORTRAIT;
194 };// ps_action = PS_PREVIEW;
196 // PostScript printer settings
197 WXDLLEXPORT
void wxSetPrinterCommand(const wxString
& cmd
);
198 WXDLLEXPORT
void wxSetPrintPreviewCommand(const wxString
& cmd
);
199 WXDLLEXPORT
void wxSetPrinterOptions(const wxString
& flags
);
200 WXDLLEXPORT
void wxSetPrinterOrientation(int orientation
);
201 WXDLLEXPORT
void wxSetPrinterScaling(double x
, double y
);
202 WXDLLEXPORT
void wxSetPrinterTranslation(wxCoord x
, wxCoord y
);
203 WXDLLEXPORT
void wxSetPrinterMode(int mode
);
204 WXDLLEXPORT
void wxSetPrinterFile(const wxString
& f
);
205 WXDLLEXPORT
void wxSetAFMPath(const wxString
& f
);
207 // Get current values
208 WXDLLEXPORT wxString
wxGetPrinterCommand();
209 WXDLLEXPORT wxString
wxGetPrintPreviewCommand();
210 WXDLLEXPORT wxString
wxGetPrinterOptions();
211 WXDLLEXPORT
int wxGetPrinterOrientation();
212 WXDLLEXPORT
void wxGetPrinterScaling(double* x
, double* y
);
213 WXDLLEXPORT
void wxGetPrinterTranslation(wxCoord
*x
, wxCoord
*y
);
214 WXDLLEXPORT
int wxGetPrinterMode();
215 WXDLLEXPORT wxString
wxGetPrinterFile();
216 WXDLLEXPORT wxString
wxGetAFMPath();
219 * PostScript print setup information.
220 * This is now obsolete, but retained for a while for compatibility
223 class WXDLLEXPORT wxPrintSetupData
: public wxObject
229 void SetPrinterCommand(const wxString
& cmd
) { m_printerCommand
= cmd
; };
230 void SetPaperName(const wxString
& paper
) { m_paperName
= paper
; };
231 void SetPrintPreviewCommand(const wxString
& cmd
) { m_previewCommand
= cmd
; };
232 void SetPrinterOptions(const wxString
& flags
) { m_printerFlags
= flags
; };
233 void SetPrinterFile(const wxString
& f
) { m_printerFile
= f
; };
234 void SetPrinterOrientation(int orient
) { m_printerOrient
= orient
; };
235 void SetPrinterScaling(double x
, double y
) { m_printerScaleX
= x
; m_printerScaleY
= y
; };
236 void SetPrinterTranslation(wxCoord x
, wxCoord y
) { m_printerTranslateX
= x
; m_printerTranslateY
= y
; };
237 // 1 = Preview, 2 = print to file, 3 = send to printer
238 void SetPrinterMode(int mode
) { m_printerMode
= mode
; };
239 void SetAFMPath(const wxString
& f
) { m_afmPath
= f
; };
240 void SetColour(bool col
) { m_printColour
= col
; };
242 // Get current values
243 wxString
GetPrinterCommand() const { return m_printerCommand
; } ;
244 wxString
GetPrintPreviewCommand() const { return m_previewCommand
; } ;
245 wxString
GetPrinterOptions() const { return m_printerFlags
; };
246 wxString
GetPrinterFile() const { return m_printerFile
; };
247 wxString
GetPaperName() const { return m_paperName
; }
248 int GetPrinterOrientation() const { return m_printerOrient
; };
249 void GetPrinterScaling(double* x
, double* y
) const { *x
= m_printerScaleX
; *y
= m_printerScaleY
; };
250 void GetPrinterTranslation(wxCoord
*x
, wxCoord
*y
) const { *x
= m_printerTranslateX
; *y
= m_printerTranslateY
; };
251 int GetPrinterMode() const { return m_printerMode
; };
252 wxString
GetAFMPath() const { return m_afmPath
; };
253 bool GetColour() const { return m_printColour
; };
255 void operator=(wxPrintSetupData
& data
);
257 // Initialize from a wxPrintData object (wxPrintData should now be used instead of wxPrintSetupData).
258 // There is also an operator for initializing a wxPrintData from a wxPrintSetupData.
259 void operator=(const wxPrintData
& data
);
262 void GetPrinterTranslation(long *x
, long *y
) const
263 { *x
= m_printerTranslateX
; *y
= m_printerTranslateY
; }
267 wxString m_printerCommand
;
268 wxString m_previewCommand
;
269 wxString m_printerFlags
;
270 wxString m_printerFile
;
272 double m_printerScaleX
;
273 double m_printerScaleY
;
274 wxCoord m_printerTranslateX
;
275 wxCoord m_printerTranslateY
;
276 // 1 = Preview, 2 = print to file, 3 = send to printer
279 // A name in the paper database (see paper.h)
280 wxString m_paperName
;
283 DECLARE_DYNAMIC_CLASS(wxPrintSetupData
)
286 WXDLLEXPORT_DATA(extern wxPrintSetupData
*) wxThePrintSetupData
;
287 WXDLLEXPORT
extern void wxInitializePrintSetupData(bool init
= TRUE
);
293 // wxUSE_PRINTING_ARCHITECTURE