Robert Lang's patch [ 1583183 ] Fixes printing/print preview inconsistencies

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42522 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2006-10-27 13:07:40 +00:00
parent ea28077683
commit f415cab9ef
32 changed files with 1308 additions and 294 deletions

View File

@@ -419,6 +419,7 @@ public:
wxPageSetupDialogData& operator=(const wxPrintData& data);
wxPrintData& GetPrintData() { return m_printData; }
const wxPrintData& GetPrintData() const { return m_printData; }
void SetPrintData(const wxPrintData& printData);
private:

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
// Name: dcprint.h
// Name: wx/mac/carbon/dcprint.h
// Purpose: wxPrinterDC class
// Author: Stefan Csomor
// Modified by:
@@ -31,6 +31,9 @@ class WXDLLEXPORT wxPrinterDC: public wxDC
virtual void EndDoc(void) ;
virtual void StartPage(void) ;
virtual void EndPage(void) ;
wxRect GetPaperRect();
wxPrintData& GetPrintData() { return m_printData; }
virtual wxSize GetPPI() const;
#if wxMAC_USE_CORE_GRAPHICS

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
// Name: printdlg.h
// Name: wx/mac/carbon/printdlg.h
// Purpose: wxPrintDialog, wxPageSetupDialog classes.
// Use generic, PostScript version if no
// platform-specific implementation.
@@ -58,21 +58,54 @@ private:
class WXDLLEXPORT wxMacPageSetupDialog: public wxPageSetupDialogBase
{
public:
wxMacPageSetupDialog(wxWindow *parent, wxPageSetupDialogData *data = NULL);
wxMacPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL);
virtual ~wxMacPageSetupDialog();
virtual wxPageSetupData& GetPageSetupDialogData();
bool Create(wxWindow *parent, wxPageSetupDialogData *data = NULL);
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
virtual int ShowModal();
private:
wxPageSetupDialogData m_pageSetupData;
wxPageSetupData m_pageSetupData;
wxWindow* m_dialogParent;
private:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacPageSetupDialog)
};
#endif
// _WX_PRINTDLG_H_
/*
* wxMacPageMarginsDialog
* A Mac dialog for setting the page margins separately from page setup since
* (native) wxMacPageSetupDialog doesn't let you set margins.
*/
class WXDLLEXPORT wxMacPageMarginsDialog : public wxDialog
{
public:
wxMacPageMarginsDialog(wxFrame* parent, wxPageSetupData* data);
bool TransferToWindow();
bool TransferDataFromWindow();
virtual wxPageSetupData& GetPageSetupDialogData() { return *m_pageSetupDialogData; }
private:
wxPageSetupData* m_pageSetupDialogData;
wxPoint m_MinMarginTopLeft;
wxPoint m_MinMarginBottomRight;
wxTextCtrl *m_LeftMargin;
wxTextCtrl *m_TopMargin;
wxTextCtrl *m_RightMargin;
wxTextCtrl *m_BottomMargin;
void GetMinMargins();
bool CheckValue(wxTextCtrl* textCtrl, int *value, int minValue, const wxString& name);
private:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacPageMarginsDialog)
};
#endif // _WX_PRINTDLG_H_

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
// Name: dcprint.h
// Name: wx/mac/classic/dcprint.h
// Purpose: wxPrinterDC class
// Author: Stefan Csomor
// Modified by:
@@ -31,6 +31,9 @@ class WXDLLEXPORT wxPrinterDC: public wxDC
virtual void EndDoc(void) ;
virtual void StartPage(void) ;
virtual void EndPage(void) ;
wxRect GetPaperRect();
wxPrintData& GetPrintData() { return m_printData; }
virtual void DoGetSize( int *width, int *height ) const;

View File

@@ -59,11 +59,43 @@ class WXDLLEXPORT wxPageSetupDialog: public wxDialog
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
virtual int ShowModal();
inline wxPageSetupData& GetPageSetupData() { return m_pageSetupData; }
virtual wxPageSetupData& GetPageSetupDialogData() { return m_pageSetupData; }
private:
wxPageSetupData m_pageSetupData;
wxWindow* m_dialogParent;
};
#endif
// _WX_PRINTDLG_H_
/*
* wxMacPageMarginsDialog
* A Mac dialog for setting the page margins separately from page setup since
* (native) wxMacPageSetupDialog doesn't let you set margins.
*/
class WXDLLEXPORT wxMacPageMarginsDialog : public wxDialog
{
public:
wxMacPageMarginsDialog(wxFrame* parent, wxPageSetupData* data);
bool TransferToWindow();
bool TransferDataFromWindow();
virtual wxPageSetupData& GetPageSetupDialogData() { return *m_pageSetupDialogData; }
private:
wxPageSetupData* m_pageSetupDialogData;
wxPoint m_MinMarginTopLeft;
wxPoint m_MinMarginBottomRight;
wxTextCtrl *m_LeftMargin;
wxTextCtrl *m_TopMargin;
wxTextCtrl *m_RightMargin;
wxTextCtrl *m_BottomMargin;
void GetMinMargins();
bool CheckValue(wxTextCtrl* textCtrl, int *value, int minValue, const wxString& name);
private:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacPageMarginsDialog)
};
#endif // _WX_PRINTDLG_H_

View File

@@ -22,6 +22,8 @@ public:
// Create a printer DC
wxPrinterDC(const wxString& driver, const wxString& device, const wxString& output, bool interactive = true, int orientation = wxPORTRAIT);
wxRect GetPaperRect();
virtual ~wxPrinterDC();
};

View File

@@ -34,6 +34,8 @@ public:
virtual void StartPage();
virtual void EndPage();
wxRect GetPaperRect();
protected:
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
bool useMask = false);

View File

@@ -68,11 +68,12 @@ public:
wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; }
wxPrintData& GetPrintData() { return m_printDialogData.GetPrintData(); }
virtual wxDC *GetPrintDC();
private:
wxPrintDialogData m_printDialogData;
wxDC* m_printerDC;
wxPrinterDC* m_printerDC;
bool m_destroyDC;
wxWindow* m_dialogParent;

View File

@@ -29,7 +29,8 @@ public:
virtual bool Print(wxWindow *parent,
wxPrintout *printout,
bool prompt = true);
virtual wxDC* PrintDialog(wxWindow *parent);
virtual wxDC *PrintDialog(wxWindow *parent);
virtual bool Setup(wxWindow *parent);
private:

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
// Name: dcprint.h
// Name: wx/os2/dcprint.h
// Purpose: wxPrinterDC class
// Author: David Webster
// Modified by:
@@ -37,6 +37,8 @@ class WXDLLEXPORT wxPrinterDC: public wxDC
void StartPage(void);
void EndPage(void);
wxRect GetPaperRect();
protected:
virtual void DoDrawBitmap( const wxBitmap& rBmp
,wxCoord vX

View File

@@ -34,6 +34,8 @@ public:
virtual void StartPage();
virtual void EndPage();
wxRect GetPaperRect();
protected:
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
bool useMask = FALSE);

View File

@@ -261,6 +261,22 @@ public:
wxDC *GetDC() const { return m_printoutDC; }
void SetDC(wxDC *dc) { m_printoutDC = dc; }
void FitThisSizeToPaper(const wxSize& imageSize);
void FitThisSizeToPage(const wxSize& imageSize);
void FitThisSizeToPageMargins(const wxSize& imageSize, const wxPageSetupDialogData& pageSetupData);
void MapScreenSizeToPaper();
void MapScreenSizeToPage();
void MapScreenSizeToPageMargins(const wxPageSetupDialogData& pageSetupData);
void MapScreenSizeToDevice();
wxRect GetLogicalPaperRect() const;
wxRect GetLogicalPageRect() const;
wxRect GetLogicalPageMarginsRect(const wxPageSetupDialogData& pageSetupData) const;
void SetLogicalOrigin(wxCoord x, wxCoord y);
void OffsetLogicalOrigin(wxCoord xoff, wxCoord yoff);
void SetPageSizePixels(int w, int h) { m_pageWidthPixels = w; m_pageHeightPixels = h; }
void GetPageSizePixels(int *w, int *h) const { *w = m_pageWidthPixels; *h = m_pageHeightPixels; }
void SetPageSizeMM(int w, int h) { m_pageWidthMM = w; m_pageHeightMM = h; }
@@ -271,6 +287,9 @@ public:
void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = y; }
void GetPPIPrinter(int *x, int *y) const { *x = m_PPIPrinterX; *y = m_PPIPrinterY; }
void SetPaperRectPixels(const wxRect& paperRectPixels) { m_paperRectPixels = paperRectPixels; }
wxRect GetPaperRectPixels() const { return m_paperRectPixels; }
virtual bool IsPreview() const { return m_isPreview; }
virtual void SetIsPreview(bool p) { m_isPreview = p; }
@@ -290,6 +309,8 @@ private:
int m_PPIPrinterX;
int m_PPIPrinterY;
wxRect m_paperRectPixels;
bool m_isPreview;
private:
@@ -297,8 +318,11 @@ private:
DECLARE_NO_COPY_CLASS(wxPrintout)
};
//----------------------------------------------------------------------------
// wxPreviewCanvas
//----------------------------------------------------------------------------
/*
* wxPreviewCanvas
* Canvas upon which a preview is drawn.
*/
@@ -330,8 +354,11 @@ private:
DECLARE_NO_COPY_CLASS(wxPreviewCanvas)
};
//----------------------------------------------------------------------------
// wxPreviewFrame
//----------------------------------------------------------------------------
/*
* wxPreviewFrame
* Default frame for showing preview.
*/
@@ -366,8 +393,11 @@ private:
DECLARE_NO_COPY_CLASS(wxPreviewFrame)
};
//----------------------------------------------------------------------------
// wxPreviewControlBar
//----------------------------------------------------------------------------
/*
* wxPreviewControlBar
* A panel with buttons for controlling a print preview.
* The programmer may wish to use other means for controlling
* the print preview.
@@ -479,6 +509,10 @@ public:
virtual wxFrame *GetFrame() const;
virtual wxPreviewCanvas *GetCanvas() const;
// This is a helper routine, used by the next 4 routines.
virtual void CalcRects(wxPreviewCanvas *canvas, wxRect& printableAreaRect, wxRect& paperRect);
// The preview canvas should call this from OnPaint
virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc);
@@ -526,7 +560,8 @@ protected:
wxPrintout* m_printPrintout;
int m_currentPage;
int m_currentZoom;
float m_previewScale;
float m_previewScaleX;
float m_previewScaleY;
int m_topMargin;
int m_leftMargin;
int m_pageWidth;