X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d494613ac1e0a1a9cdab21b757b2bc9367802654..4ed85025f3ba537206f70f3dd10466e16da926d4:/include/wx/gtk/print.h diff --git a/include/wx/gtk/print.h b/include/wx/gtk/print.h index b9f1ab2bf3..16a90f8cb2 100644 --- a/include/wx/gtk/print.h +++ b/include/wx/gtk/print.h @@ -3,7 +3,7 @@ // Author: Anthony Bretaudeau // Purpose: GTK printing support // Created: 2007-08-25 -// RCS-ID: $Id: print.h,v 1 2007-08-25 05:44:44 PC Exp $ +// RCS-ID: $Id$ // Copyright: (c) Anthony Bretaudeau // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -19,8 +19,6 @@ #include "wx/printdlg.h" #include "wx/prntbase.h" #include "wx/dc.h" -#include "wx/cairo.h" - typedef struct _GtkPrintOperation GtkPrintOperation; typedef struct _GtkPrintContext GtkPrintContext; @@ -53,7 +51,7 @@ public: virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent, wxPageSetupDialogData * data = NULL ); - virtual wxDC* CreatePrinterDC( const wxPrintData& data ); + virtual wxDCImpl* CreatePrinterDCImpl( wxPrinterDC *owner, const wxPrintData& data ); virtual bool HasPrintSetupDialog(); virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ); @@ -171,11 +169,10 @@ public: private: GtkPrintContext *m_gpc; - bool m_showDialog; wxDC *m_dc; DECLARE_DYNAMIC_CLASS(wxGtkPrinter) - DECLARE_NO_COPY_CLASS(wxGtkPrinter) + wxDECLARE_NO_COPY_CLASS(wxGtkPrinter); }; //---------------------------------------------------------------------------- @@ -197,8 +194,8 @@ public: GtkPrintSettings* GetPrintConfig() { return m_config; } void SetPrintConfig( GtkPrintSettings * config ); - void SetPrintJob( GtkPrintOperation *job ) { m_job = job; } GtkPrintOperation* GetPrintJob() { return m_job; } + void SetPrintJob(GtkPrintOperation *job) { m_job = job; } GtkPrintContext *GetPrintContext() { return m_context; } void SetPrintContext(GtkPrintContext *context) {m_context = context; } @@ -208,6 +205,8 @@ public: void SetPageSetupToSettings(GtkPrintSettings* settings, GtkPageSetup* page_setup); private: + // NB: m_config is created and owned by us, but the other objects are not + // and their accessors don't change their ref count. GtkPrintSettings *m_config; GtkPrintOperation *m_job; GtkPrintContext *m_context; @@ -216,24 +215,27 @@ private: }; //----------------------------------------------------------------------------- -// wxGtkPrintDC +// wxGtkPrinterDC //----------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxGtkPrintDC: public wxDC +class WXDLLIMPEXP_CORE wxGtkPrinterDCImpl : public wxDCImpl { public: - wxGtkPrintDC( const wxPrintData& data ); - virtual ~wxGtkPrintDC(); + wxGtkPrinterDCImpl( wxPrinterDC *owner, const wxPrintData& data ); + virtual ~wxGtkPrinterDCImpl(); bool Ok() const { return IsOk(); } bool IsOk() const; + virtual void* GetCairoContext() const; + virtual void* GetHandle() const; + bool CanDrawBitmap() const { return true; } void Clear(); void SetFont( const wxFont& font ); void SetPen( const wxPen& pen ); void SetBrush( const wxBrush& brush ); - void SetLogicalFunction( int function ); + void SetLogicalFunction( wxRasterOperationMode function ); void SetBackground( const wxBrush& brush ); void DestroyClippingRegion(); bool StartDoc(const wxString& message); @@ -244,25 +246,18 @@ public: wxCoord GetCharWidth() const; bool CanGetTextExtent() const { return true; } wxSize GetPPI() const; - void SetLogicalOrigin( wxCoord x, wxCoord y ); - void SetDeviceOrigin( wxCoord x, wxCoord y ); virtual int GetDepth() const { return 24; } - void SetBackgroundMode(int WXUNUSED(mode)); + void SetBackgroundMode(int mode); void SetPalette(const wxPalette& WXUNUSED(palette)) { } - static void SetResolution(int ppi); - static int GetResolution(); - void DrawScaledBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, wxCoord w, wxCoord h, - bool useMask = false, int quality = wxIMAGE_QUALITY_NORMAL) - { DoDrawScaledBitmap( bmp, x, y, w, h, useMask, quality ); } - void DrawScaledBitmap(const wxBitmap &bmp, const wxPoint& pt, const wxSize& sz, - bool useMask = false, int quality = wxIMAGE_QUALITY_NORMAL) - { DoDrawScaledBitmap( bmp, pt.x, pt.y, sz.x, sz.y, useMask, quality ); } - void DrawScaledBitmap(const wxBitmap &bmp, const wxRect& rect, - bool useMask = false, int quality = wxIMAGE_QUALITY_NORMAL) - { DoDrawScaledBitmap( bmp, rect.x, rect.y, rect.width, rect.height, useMask, quality ); } + void SetResolution(int ppi); + + // overridden for wxPrinterDC Impl + virtual int GetResolution() const; + virtual wxRect GetPaperRect() const; protected: - bool DoFloodFill(wxCoord x1, wxCoord y1, const wxColour &col, int style=wxFLOOD_SURFACE ); + bool DoFloodFill(wxCoord x1, wxCoord y1, const wxColour &col, + wxFloodFillStyle style=wxFLOOD_SURFACE ); void DoGradientFillConcentric(const wxRect& rect, const wxColour& initialColour, const wxColour& destColour, const wxPoint& circleCenter); void DoGradientFillLinear(const wxRect& rect, const wxColour& initialColour, const wxColour& destColour, wxDirection nDirection = wxEAST); bool DoGetPixel(wxCoord x1, wxCoord y1, wxColour *col) const; @@ -272,39 +267,38 @@ protected: void DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h,double sa,double ea); void DoDrawPoint(wxCoord x, wxCoord y); void DoDrawLines(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0); - void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle=wxODDEVEN_RULE); - void DoDrawPolyPolygon(int n, int count[], wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle=wxODDEVEN_RULE); + void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, wxPolygonFillMode fillStyle=wxODDEVEN_RULE); + void DoDrawPolyPolygon(int n, int count[], wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, wxPolygonFillMode fillStyle=wxODDEVEN_RULE); void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); void DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius = 20.0); void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); #if wxUSE_SPLINES - void DoDrawSpline(wxList *points); -#endif // wxUSE_SPLINES + void DoDrawSpline(const wxPointList *points); +#endif bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop = wxCOPY, bool useMask = false, + wxDC *source, wxCoord xsrc, wxCoord ysrc, + wxRasterOperationMode rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord); void DoDrawIcon( const wxIcon& icon, wxCoord x, wxCoord y ); void DoDrawBitmap( const wxBitmap& bitmap, wxCoord x, wxCoord y, bool useMask = false ); - void DoDrawScaledBitmap( const wxBitmap& bitmap, wxCoord x, wxCoord y, wxCoord w, wxCoord h, bool useMask = false, int quality = wxIMAGE_QUALITY_NORMAL ); void DoDrawText(const wxString& text, wxCoord x, wxCoord y ); void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, double angle); void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - void DoSetClippingRegionAsRegion( const wxRegion &WXUNUSED(clip) ) { } + void DoSetDeviceClippingRegion( const wxRegion &WXUNUSED(clip) ) + { + wxFAIL_MSG( "not implemented" ); + } void DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y, - wxCoord *descent = (wxCoord *) NULL, - wxCoord *externalLeading = (wxCoord *) NULL, - const wxFont *theFont = (wxFont *) NULL ) const; + wxCoord *descent = NULL, + wxCoord *externalLeading = NULL, + const wxFont *theFont = NULL ) const; void DoGetSize(int* width, int* height) const; void DoGetSizeMM(int *width, int *height) const; wxPrintData& GetPrintData() { return m_printData; } void SetPrintData(const wxPrintData& data); - void ComputeScaleAndOrigin(); - private: - static float ms_PSScaleFactor; - wxPrintData m_printData; PangoContext *m_context; PangoLayout *m_layout; @@ -316,59 +310,13 @@ private: unsigned char m_currentBlue; unsigned char m_currentAlpha; - int m_deviceOffsetY; - int m_deviceOffsetX; - - GtkPrintContext *m_gpc; - static int ms_resolution; - - wxCoord DeviceToLogicalX(wxCoord x) const - { - int addValue = 0; - if (m_signX == -1) addValue = m_deviceOffsetX - m_deviceOriginX; // right to left - else addValue = m_deviceOriginX;// left to right - return (wxCoord) ((double)(x - addValue) * m_signX + m_logicalOriginX); - } - wxCoord DeviceToLogicalXRel(wxCoord x) const - { - return x; - } - wxCoord DeviceToLogicalY(wxCoord y) const - { - int addValue = 0; - if (m_signY == -1) addValue = m_deviceOffsetY - m_deviceOriginY; // bottom to up - else addValue = m_deviceOriginY;// up to bottom - return (wxCoord) ((double)(y - addValue) * m_signY + m_logicalOriginY); - } - wxCoord DeviceToLogicalYRel(wxCoord y) const - { - return y; - } - wxCoord LogicalToDeviceX(wxCoord x) const - { - int addValue = 0; - if (m_signX == -1) addValue = m_deviceOffsetX - m_deviceOriginX; // right to left - else addValue = m_deviceOriginX;// left to right - return (wxCoord) ((double)(x - m_logicalOriginX) * m_signX + addValue); - } - wxCoord LogicalToDeviceXRel(wxCoord x) const - { - return x; - } - wxCoord LogicalToDeviceY(wxCoord y) const - { - int addValue = 0; - if (m_signY == -1) addValue = m_deviceOffsetY - m_deviceOriginY; // bottom to up - else addValue = m_deviceOriginY;// up to bottom - return (wxCoord) ((double)(y - m_logicalOriginY) * m_signY + addValue); - } - wxCoord LogicalToDeviceYRel(wxCoord y) const - { - return y; - } + GtkPrintContext *m_gpc; + int m_resolution; + double m_PS2DEV; + double m_DEV2PS; - DECLARE_DYNAMIC_CLASS(wxGtkPrintDC) - DECLARE_NO_COPY_CLASS(wxGtkPrintDC) + DECLARE_DYNAMIC_CLASS(wxGtkPrinterDCImpl) + wxDECLARE_NO_COPY_CLASS(wxGtkPrinterDCImpl); }; // ---------------------------------------------------------------------------- @@ -380,8 +328,8 @@ class WXDLLIMPEXP_CORE wxGtkPrintPreview : public wxPrintPreviewBase { public: wxGtkPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting = (wxPrintout *) NULL, - wxPrintDialogData *data = (wxPrintDialogData *) NULL); + wxPrintout *printoutForPrinting = NULL, + wxPrintDialogData *data = NULL); wxGtkPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data); @@ -392,11 +340,16 @@ public: virtual void DetermineScaling(); private: - void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); + void Init(wxPrintout *printout, + wxPrintout *printoutForPrinting, + wxPrintData *data); + + // resolution to use in DPI + int m_resolution; DECLARE_CLASS(wxGtkPrintPreview) }; -#endif +#endif // wxUSE_GTKPRINT -#endif +#endif // _WX_GTK_PRINT_H_