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 /////////////////////////////////////////////////////////////////////////////
14 #if defined(__GNUG__) && !defined(__APPLE__)
15 #pragma interface "dcpsg.h"
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
43 // Recommended constructor
44 wxPostScriptDC(const wxPrintData
& printData
);
48 #if WXWIN_COMPATIBILITY_2_2
49 wxPostScriptDC( const wxString
&output
, bool interactive
= FALSE
, wxWindow
*parent
= NULL
)
50 { Create( output
, interactive
, parent
); }
51 bool Create ( const wxString
&output
, bool interactive
= FALSE
, wxWindow
*parent
= NULL
);
54 virtual bool Ok() const;
56 virtual void BeginDrawing() {}
57 virtual void EndDrawing() {}
59 bool DoFloodFill(wxCoord x1
, wxCoord y1
, const wxColour
&col
, int style
=wxFLOOD_SURFACE
);
60 bool DoGetPixel(wxCoord x1
, wxCoord y1
, wxColour
*col
) const;
62 void DoDrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
63 void DoCrossHair(wxCoord x
, wxCoord y
) ;
64 void DoDrawArc(wxCoord x1
,wxCoord y1
,wxCoord x2
,wxCoord y2
,wxCoord xc
,wxCoord yc
);
65 void DoDrawEllipticArc(wxCoord x
,wxCoord y
,wxCoord w
,wxCoord h
,double sa
,double ea
);
66 void DoDrawPoint(wxCoord x
, wxCoord y
);
67 void DoDrawLines(int n
, wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0);
68 void DoDrawPolygon(int n
, wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0, int fillStyle
=wxODDEVEN_RULE
);
69 void DoDrawRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
70 void DoDrawRoundedRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
, double radius
= 20);
71 void DoDrawEllipse(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
73 void DoDrawSpline(wxList
*points
);
75 bool DoBlit(wxCoord xdest
, wxCoord ydest
, wxCoord width
, wxCoord height
,
76 wxDC
*source
, wxCoord xsrc
, wxCoord ysrc
, int rop
= wxCOPY
, bool useMask
= FALSE
,
77 wxCoord xsrcMask
= -1, wxCoord ysrcMask
= -1);
78 bool CanDrawBitmap() const { return TRUE
; }
80 void DoDrawIcon( const wxIcon
& icon
, wxCoord x
, wxCoord y
);
81 void DoDrawBitmap( const wxBitmap
& bitmap
, wxCoord x
, wxCoord y
, bool useMask
=FALSE
);
83 void DoDrawText(const wxString
& text
, wxCoord x
, wxCoord y
);
84 void DoDrawRotatedText(const wxString
& text
, wxCoord x
, wxCoord y
, double angle
);
87 void SetFont( const wxFont
& font
);
88 void SetPen( const wxPen
& pen
);
89 void SetBrush( const wxBrush
& brush
);
90 void SetLogicalFunction( int function
);
91 void SetBackground( const wxBrush
& brush
);
93 void DoSetClippingRegion(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
94 void DestroyClippingRegion();
96 void DoSetClippingRegionAsRegion( const wxRegion
&WXUNUSED(clip
) ) { }
98 bool StartDoc(const wxString
& message
);
103 wxCoord
GetCharHeight() const;
104 wxCoord
GetCharWidth() const;
105 bool CanGetTextExtent() const { return TRUE
; }
106 void DoGetTextExtent(const wxString
& string
, wxCoord
*x
, wxCoord
*y
,
107 wxCoord
*descent
= (wxCoord
*) NULL
,
108 wxCoord
*externalLeading
= (wxCoord
*) NULL
,
109 wxFont
*theFont
= (wxFont
*) NULL
) const;
111 void DoGetSize(int* width
, int* height
) const;
112 void DoGetSizeMM(int *width
, int *height
) const;
114 // Resolution in pixels per logical inch
115 wxSize
GetPPI() const;
117 void SetAxisOrientation( bool xLeftRight
, bool yBottomUp
);
118 void SetDeviceOrigin( wxCoord x
, wxCoord y
);
120 void SetBackgroundMode(int WXUNUSED(mode
)) { }
121 void SetPalette(const wxPalette
& WXUNUSED(palette
)) { }
123 wxPrintData
& GetPrintData() { return m_printData
; }
124 void SetPrintData(const wxPrintData
& data
) { m_printData
= data
; }
126 virtual int GetDepth() const { return 24; }
128 static void SetResolution(int ppi
);
129 static int GetResolution();
132 static float ms_PSScaleFactor
;
135 FILE* m_pstream
; // PostScript output stream
137 unsigned char m_currentRed
;
138 unsigned char m_currentGreen
;
139 unsigned char m_currentBlue
;
142 double m_underlinePosition
;
143 double m_underlineThickness
;
144 wxPrintData m_printData
;
147 DECLARE_DYNAMIC_CLASS(wxPostScriptDC
)
151 #if WXWIN_COMPATIBILITY_2_2
155 PS_PORTRAIT
= wxPORTRAIT
,
156 PS_LANDSCAPE
= wxLANDSCAPE
162 PS_NONE
= wxPRINT_MODE_NONE
,
163 PS_PREVIEW
= wxPRINT_MODE_PREVIEW
,
164 PS_FILE
= wxPRINT_MODE_FILE
,
165 PS_PRINTER
= wxPRINT_MODE_PRINTER
168 class wxPrintSetupData
: public wxPrintData
171 wxPrintSetupData() {}
173 void SetPrinterOrientation( int orient
)
174 { SetOrientation( orient
); }
175 void SetPrinterMode( wxPrintMode mode
)
176 { SetPrintMode( mode
); }
177 void SetAFMPath( const wxString
&path
)
178 { SetFontMetricPath( path
); }
180 void SetPaperName(const wxString
& paper
) { m_paperName
= paper
; }
181 void SetPrinterFile(const wxString
& file
) { m_printerFile
= file
; }
182 wxString
GetPaperName() const { return m_paperName
; }
183 wxString
GetPrinterFile() const { return m_printerFile
; };
185 wxString m_paperName
;
186 wxString m_printerFile
;
189 WXDLLEXPORT_DATA(extern wxPrintSetupData
*) wxThePrintSetupData
;
190 WXDLLEXPORT
extern void wxInitializePrintSetupData(bool init
= TRUE
);
198 // wxUSE_PRINTING_ARCHITECTURE