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; 
 298     wxPrintData             m_printData
; 
 299     PangoContext           
*m_context
; 
 300     PangoLayout            
*m_layout
; 
 301     PangoFontDescription   
*m_fontdesc
; 
 303     unsigned char           m_currentRed
; 
 304     unsigned char           m_currentGreen
; 
 305     unsigned char           m_currentBlue
; 
 309     GnomePrintContext      
*m_gpc
; 
 310     GnomePrintJob
*          m_job
; 
 312     void makeEllipticalPath(wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height
); 
 315     DECLARE_DYNAMIC_CLASS(wxGnomePrinterDCImpl
) 
 316     wxDECLARE_NO_COPY_CLASS(wxGnomePrinterDCImpl
); 
 319 // ---------------------------------------------------------------------------- 
 320 // wxGnomePrintPreview: programmer creates an object of this class to preview a 
 322 // ---------------------------------------------------------------------------- 
 324 class wxGnomePrintPreview 
: public wxPrintPreviewBase
 
 327     wxGnomePrintPreview(wxPrintout 
*printout
, 
 328                              wxPrintout 
*printoutForPrinting 
= NULL
, 
 329                              wxPrintDialogData 
*data 
= NULL
); 
 330     wxGnomePrintPreview(wxPrintout 
*printout
, 
 331                              wxPrintout 
*printoutForPrinting
, 
 334     virtual ~wxGnomePrintPreview(); 
 336     virtual bool Print(bool interactive
); 
 337     virtual void DetermineScaling(); 
 340     void Init(wxPrintout 
*printout
, wxPrintout 
*printoutForPrinting
); 
 343     DECLARE_CLASS(wxGnomePrintPreview
) 
 348     // wxUSE_LIBGNOMEPRINT