1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/gnome/gprint.h
3 // Author: Robert Roebling
4 // Purpose: GNOME printing support
7 // Copyright: Robert Roebling
8 // Licence: wxWindows Licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_GTK_GPRINT_H_
12 #define _WX_GTK_GPRINT_H_
16 #if wxUSE_LIBGNOMEPRINT
19 #include "wx/printdlg.h"
21 #include "wx/module.h"
23 typedef struct _GnomePrintJob GnomePrintJob
;
24 typedef struct _GnomePrintContext GnomePrintContext
;
25 typedef struct _GnomePrintConfig GnomePrintConfig
;
27 // ----------------------------------------------------------------------------
29 // ----------------------------------------------------------------------------
31 class wxGnomePrintModule
: public wxModule
34 wxGnomePrintModule() {}
39 DECLARE_DYNAMIC_CLASS(wxGnomePrintModule
)
42 //----------------------------------------------------------------------------
43 // wxGnomePrintNativeData
44 //----------------------------------------------------------------------------
46 class wxGnomePrintNativeData
: public wxPrintNativeDataBase
49 wxGnomePrintNativeData();
50 virtual ~wxGnomePrintNativeData();
52 virtual bool TransferTo( wxPrintData
&data
);
53 virtual bool TransferFrom( const wxPrintData
&data
);
55 virtual bool Ok() const { return IsOk(); }
56 virtual bool IsOk() const { return true; }
58 GnomePrintConfig
* GetPrintConfig() { return m_config
; }
59 void SetPrintJob( GnomePrintJob
*job
) { m_job
= job
; }
60 GnomePrintJob
* GetPrintJob() { return m_job
; }
64 GnomePrintConfig
*m_config
;
67 DECLARE_DYNAMIC_CLASS(wxGnomePrintNativeData
)
70 //----------------------------------------------------------------------------
71 // wxGnomePrintFactory
72 //----------------------------------------------------------------------------
74 class wxGnomePrintFactory
: public wxPrintFactory
77 virtual wxPrinterBase
*CreatePrinter( wxPrintDialogData
*data
);
79 virtual wxPrintPreviewBase
*CreatePrintPreview( wxPrintout
*preview
,
80 wxPrintout
*printout
= NULL
,
81 wxPrintDialogData
*data
= NULL
);
82 virtual wxPrintPreviewBase
*CreatePrintPreview( wxPrintout
*preview
,
86 virtual wxPrintDialogBase
*CreatePrintDialog( wxWindow
*parent
,
87 wxPrintDialogData
*data
= NULL
);
88 virtual wxPrintDialogBase
*CreatePrintDialog( wxWindow
*parent
,
91 virtual wxPageSetupDialogBase
*CreatePageSetupDialog( wxWindow
*parent
,
92 wxPageSetupDialogData
* data
= NULL
);
95 virtual wxDCImpl
* CreatePrinterDCImpl( wxPrinterDC
*owner
, const wxPrintData
& data
);
97 virtual wxDC
* CreatePrinterDC( const wxPrintData
& data
);
100 virtual bool HasPrintSetupDialog();
101 virtual wxDialog
*CreatePrintSetupDialog( wxWindow
*parent
, wxPrintData
*data
);
102 virtual bool HasOwnPrintToFile();
103 virtual bool HasPrinterLine();
104 virtual wxString
CreatePrinterLine();
105 virtual bool HasStatusLine();
106 virtual wxString
CreateStatusLine();
108 virtual wxPrintNativeDataBase
*CreatePrintNativeData();
111 //----------------------------------------------------------------------------
112 // wxGnomePrintDialog
113 //----------------------------------------------------------------------------
115 class wxGnomePrintDialog
: public wxPrintDialogBase
118 wxGnomePrintDialog( wxWindow
*parent
,
119 wxPrintDialogData
* data
= NULL
);
120 wxGnomePrintDialog( wxWindow
*parent
, wxPrintData
* data
);
121 virtual ~wxGnomePrintDialog();
123 wxPrintData
& GetPrintData()
124 { return m_printDialogData
.GetPrintData(); }
125 wxPrintDialogData
& GetPrintDialogData()
126 { return m_printDialogData
; }
130 virtual int ShowModal();
132 virtual bool Validate();
133 virtual bool TransferDataToWindow();
134 virtual bool TransferDataFromWindow();
137 // Implement some base class methods to do nothing to avoid asserts and
138 // GTK warnings, since this is not a real wxDialog.
139 virtual void DoSetSize(int WXUNUSED(x
), int WXUNUSED(y
),
140 int WXUNUSED(width
), int WXUNUSED(height
),
141 int WXUNUSED(sizeFlags
) = wxSIZE_AUTO
) {}
142 virtual void DoMoveWindow(int WXUNUSED(x
), int WXUNUSED(y
),
143 int WXUNUSED(width
), int WXUNUSED(height
)) {}
147 wxPrintDialogData m_printDialogData
;
149 DECLARE_DYNAMIC_CLASS(wxGnomePrintDialog
)
152 //----------------------------------------------------------------------------
153 // wxGnomePageSetupDialog
154 //----------------------------------------------------------------------------
156 class wxGnomePageSetupDialog
: public wxPageSetupDialogBase
159 wxGnomePageSetupDialog( wxWindow
*parent
,
160 wxPageSetupDialogData
* data
= NULL
);
161 virtual ~wxGnomePageSetupDialog();
163 virtual wxPageSetupDialogData
& GetPageSetupDialogData();
165 virtual int ShowModal();
167 virtual bool Validate();
168 virtual bool TransferDataToWindow();
169 virtual bool TransferDataFromWindow();
172 // Implement some base class methods to do nothing to avoid asserts and
173 // GTK warnings, since this is not a real wxDialog.
174 virtual void DoSetSize(int WXUNUSED(x
), int WXUNUSED(y
),
175 int WXUNUSED(width
), int WXUNUSED(height
),
176 int WXUNUSED(sizeFlags
) = wxSIZE_AUTO
) {}
177 virtual void DoMoveWindow(int WXUNUSED(x
), int WXUNUSED(y
),
178 int WXUNUSED(width
), int WXUNUSED(height
)) {}
181 wxPageSetupDialogData m_pageDialogData
;
183 DECLARE_DYNAMIC_CLASS(wxGnomePageSetupDialog
)
186 //----------------------------------------------------------------------------
188 //----------------------------------------------------------------------------
190 class wxGnomePrinter
: public wxPrinterBase
193 wxGnomePrinter(wxPrintDialogData
*data
= NULL
);
194 virtual ~wxGnomePrinter();
196 virtual bool Print(wxWindow
*parent
,
197 wxPrintout
*printout
,
199 virtual wxDC
* PrintDialog(wxWindow
*parent
);
200 virtual bool Setup(wxWindow
*parent
);
203 bool m_native_preview
;
206 DECLARE_DYNAMIC_CLASS(wxGnomePrinter
)
207 wxDECLARE_NO_COPY_CLASS(wxGnomePrinter
);
210 //-----------------------------------------------------------------------------
212 //-----------------------------------------------------------------------------
215 class wxGnomePrinterDCImpl
: public wxDCImpl
217 #define wxGnomePrinterDCImpl wxGnomePrinterDC
218 class wxGnomePrinterDC
: public wxDC
223 wxGnomePrinterDCImpl( wxPrinterDC
*owner
, const wxPrintData
& data
);
225 wxGnomePrinterDC( const wxPrintData
& data
);
227 virtual ~wxGnomePrinterDCImpl();
229 bool Ok() const { return IsOk(); }
232 bool CanDrawBitmap() const { return true; }
234 void SetFont( const wxFont
& font
);
235 void SetPen( const wxPen
& pen
);
236 void SetBrush( const wxBrush
& brush
);
237 void SetLogicalFunction( wxRasterOperationMode function
);
238 void SetBackground( const wxBrush
& brush
);
239 void DestroyClippingRegion();
240 bool StartDoc(const wxString
& message
);
244 wxCoord
GetCharHeight() const;
245 wxCoord
GetCharWidth() const;
246 bool CanGetTextExtent() const { return true; }
247 wxSize
GetPPI() const;
248 virtual int GetDepth() const { return 24; }
249 void SetBackgroundMode(int WXUNUSED(mode
)) { }
250 void SetPalette(const wxPalette
& WXUNUSED(palette
)) { }
253 bool DoFloodFill(wxCoord x1
, wxCoord y1
, const wxColour
&col
,
254 wxFloodFillStyle style
=wxFLOOD_SURFACE
);
255 bool DoGetPixel(wxCoord x1
, wxCoord y1
, wxColour
*col
) const;
256 void DoDrawLine(wxCoord x1
, wxCoord y1
, wxCoord x2
, wxCoord y2
);
257 void DoCrossHair(wxCoord x
, wxCoord y
);
258 void DoDrawArc(wxCoord x1
,wxCoord y1
,wxCoord x2
,wxCoord y2
,wxCoord xc
,wxCoord yc
);
259 void DoDrawEllipticArc(wxCoord x
,wxCoord y
,wxCoord w
,wxCoord h
,double sa
,double ea
);
260 void DoDrawPoint(wxCoord x
, wxCoord y
);
261 void DoDrawLines(int n
, wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0);
262 void DoDrawPolygon(int n
, wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0, wxPolygonFillMode fillStyle
=wxODDEVEN_RULE
);
263 void DoDrawPolyPolygon(int n
, int count
[], wxPoint points
[], wxCoord xoffset
= 0, wxCoord yoffset
= 0, wxPolygonFillMode fillStyle
=wxODDEVEN_RULE
);
264 void DoDrawRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
265 void DoDrawRoundedRectangle(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
, double radius
= 20.0);
266 void DoDrawEllipse(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
268 void DoDrawSpline(const wxPointList
*points
);
270 bool DoBlit(wxCoord xdest
, wxCoord ydest
, wxCoord width
, wxCoord height
,
271 wxDC
*source
, wxCoord xsrc
, wxCoord ysrc
,
272 wxRasterOperationMode
= wxCOPY
, bool useMask
= false,
273 wxCoord xsrcMask
= wxDefaultCoord
, wxCoord ysrcMask
= wxDefaultCoord
);
274 void DoDrawIcon( const wxIcon
& icon
, wxCoord x
, wxCoord y
);
275 void DoDrawBitmap( const wxBitmap
& bitmap
, wxCoord x
, wxCoord y
, bool useMask
= false );
276 void DoDrawText(const wxString
& text
, wxCoord x
, wxCoord y
);
277 void DoDrawRotatedText(const wxString
& text
, wxCoord x
, wxCoord y
, double angle
);
278 void DoSetClippingRegion(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
279 void DoSetDeviceClippingRegion( const wxRegion
&WXUNUSED(clip
) )
281 wxFAIL_MSG( "not implemented" );
283 void DoGetTextExtent(const wxString
& string
, wxCoord
*x
, wxCoord
*y
,
284 wxCoord
*descent
= NULL
,
285 wxCoord
*externalLeading
= NULL
,
286 const wxFont
*theFont
= NULL
) const;
287 void DoGetSize(int* width
, int* height
) const;
288 void DoGetSizeMM(int *width
, int *height
) const;
290 void SetPrintData(const wxPrintData
& data
);
291 wxPrintData
& GetPrintData() { return m_printData
; }
293 // overridden for wxPrinterDC Impl
294 virtual wxRect
GetPaperRect() const;
295 virtual int GetResolution() const;
297 virtual void* GetHandle() const { return (void*)m_gpc
; }
300 wxPrintData m_printData
;
301 PangoContext
*m_context
;
302 PangoLayout
*m_layout
;
303 PangoFontDescription
*m_fontdesc
;
305 unsigned char m_currentRed
;
306 unsigned char m_currentGreen
;
307 unsigned char m_currentBlue
;
311 GnomePrintContext
*m_gpc
;
312 GnomePrintJob
* m_job
;
314 void makeEllipticalPath(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
);
317 DECLARE_DYNAMIC_CLASS(wxGnomePrinterDCImpl
)
318 wxDECLARE_NO_COPY_CLASS(wxGnomePrinterDCImpl
);
321 // ----------------------------------------------------------------------------
322 // wxGnomePrintPreview: programmer creates an object of this class to preview a
324 // ----------------------------------------------------------------------------
326 class wxGnomePrintPreview
: public wxPrintPreviewBase
329 wxGnomePrintPreview(wxPrintout
*printout
,
330 wxPrintout
*printoutForPrinting
= NULL
,
331 wxPrintDialogData
*data
= NULL
);
332 wxGnomePrintPreview(wxPrintout
*printout
,
333 wxPrintout
*printoutForPrinting
,
336 virtual ~wxGnomePrintPreview();
338 virtual bool Print(bool interactive
);
339 virtual void DetermineScaling();
342 void Init(wxPrintout
*printout
, wxPrintout
*printoutForPrinting
);
345 DECLARE_CLASS(wxGnomePrintPreview
)
350 // wxUSE_LIBGNOMEPRINT