Merge branch 'print-preview-layout'

Print preview layout and appearance fixes.

See #22441.
This commit is contained in:
Vadim Zeitlin
2022-05-23 22:25:16 +01:00
5 changed files with 43 additions and 20 deletions

View File

@@ -55,11 +55,9 @@ case WXPRINT_PREVIEW:
// Pass two printout objects: for preview, and possible printing.
wxPrintPreview *preview = new wxPrintPreview(new MyPrintout, new MyPrintout);
wxPreviewFrame *frame = new wxPreviewFrame(preview, this,
"Demo Print Preview",
wxPoint(100, 100),
wxSize(600, 650));
frame->Centre(wxBOTH);
"Demo Print Preview");
frame->Initialize();
frame->Centre(wxBOTH);
frame->Show(true);
break;
}

View File

@@ -444,6 +444,8 @@ protected:
private:
void OnChar(wxKeyEvent& event);
const wxSize m_initialSize;
wxDECLARE_EVENT_TABLE();
wxDECLARE_CLASS(wxPreviewFrame);
wxDECLARE_NO_COPY_CLASS(wxPreviewFrame);

View File

@@ -195,6 +195,9 @@ public:
Pass a print preview object plus other normal frame arguments.
The print preview object will be destroyed by the frame when it closes.
Note that @a size typically should @e not be specified explicitly to
let the frame use its default size, adapted to its contents.
*/
wxPreviewFrame(wxPrintPreviewBase* preview, wxWindow* parent,
const wxString& title = "Print Preview",

View File

@@ -390,10 +390,9 @@ void MyFrame::OnPrintPreview(wxCommandEvent& WXUNUSED(event))
return;
}
wxPreviewFrame *frame =
new wxPreviewFrame(preview, this, "Demo Print Preview", wxDefaultPosition, FromDIP(wxSize(600, 700)));
frame->Centre(wxBOTH);
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview");
frame->InitializeWithModality(m_previewModality);
frame->Centre(wxBOTH);
frame->Show();
}
@@ -425,10 +424,9 @@ void MyFrame::OnPrintPreviewPS(wxCommandEvent& WXUNUSED(event))
// Pass two printout objects: for preview, and possible printing.
wxPrintDialogData printDialogData(* g_printData);
wxPrintPreview *preview = new wxPrintPreview(new MyPrintout(this), new MyPrintout(this), &printDialogData);
wxPreviewFrame *frame =
new wxPreviewFrame(preview, this, "Demo Print Preview", wxDefaultPosition, FromDIP(wxSize(600, 700)));
frame->Centre(wxBOTH);
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview");
frame->Initialize();
frame->Centre(wxBOTH);
frame->Show();
}

View File

@@ -936,6 +936,10 @@ wxScrolledWindow(parent, wxID_ANY, pos, size, style | wxFULL_REPAINT_ON_RESIZE,
SetBackgroundColour(wxSystemSettings::GetColour(colourIndex));
SetScrollbars(10, 10, 100, 100);
// Use some reasonable default size for this window, roughly proportional
// to the paper sheet.
SetInitialSize(wxSize(600, 750));
}
wxPreviewCanvas::~wxPreviewCanvas()
@@ -1486,7 +1490,6 @@ public:
~SizerWithButtons()
{
m_parent->SetSizer(m_sizer);
m_sizer->Fit(m_parent);
}
@@ -1497,7 +1500,7 @@ public:
{
m_needsSeparator = false;
m_sizer->AddSpacer(2*wxSizerFlags::GetDefaultBorder());
m_sizer->AddSpacer(wxRound(2*wxSizerFlags::GetDefaultBorderFractional()));
}
m_hasContents = true;
@@ -1525,9 +1528,13 @@ public:
// as everything else added after it will be added on the right side too.
void AddAtEnd(wxWindow *win)
{
// Ensure there is at least the same gap before the final button as
// between the other groups.
m_sizer->AddSpacer(wxRound(2*wxSizerFlags::GetDefaultBorderFractional()));
m_sizer->AddStretchSpacer();
m_sizer->Add(win,
wxSizerFlags().Border(wxTOP | wxBOTTOM | wxRIGHT).Center());
wxSizerFlags().Border().Center());
}
// Indicates the end of a group of buttons, a separator will be added after
@@ -1614,7 +1621,7 @@ void wxPreviewControlBar::CreateButtons()
};
int n = WXSIZEOF(choices);
m_zoomControl = new wxChoice( this, wxID_PREVIEW_ZOOM, wxDefaultPosition, wxSize(FromDIP(70),wxDefaultCoord), n, choices, 0 );
m_zoomControl = new wxChoice( this, wxID_PREVIEW_ZOOM, wxDefaultPosition, wxDefaultSize, n, choices, 0 );
sizer.Add(m_zoomControl);
SetZoomControl(m_printPreview->GetZoom());
@@ -1695,7 +1702,8 @@ void wxPreviewFrame::OnChar(wxKeyEvent &event)
wxPreviewFrame::wxPreviewFrame(wxPrintPreviewBase *preview, wxWindow *parent, const wxString& title,
const wxPoint& pos, const wxSize& size, long style, const wxString& name):
wxFrame(parent, wxID_ANY, title, pos, size, style, name)
wxFrame(parent, wxID_ANY, title, pos, size, style, name),
m_initialSize(size)
{
m_printPreview = preview;
m_controlBar = NULL;
@@ -1762,11 +1770,27 @@ void wxPreviewFrame::InitializeWithModality(wxPreviewFrameModalityKind kind)
wxBoxSizer* const sizer = new wxBoxSizer( wxVERTICAL );
sizer->Add( m_controlBar, wxSizerFlags().Expand().Border() );
sizer->Add( m_previewCanvas, wxSizerFlags(1).Expand().Border() );
sizer->Add( m_controlBar, wxSizerFlags().Expand() );
sizer->Add( m_previewCanvas, wxSizerFlags(1).Expand() );
SetSizer( sizer );
// Respect the user-specified size, if any, but use the best appropriate
// size by default if none was explicitly given.
if ( !m_initialSize.IsFullySpecified() )
{
wxSize size = m_initialSize;
size.SetDefaults(sizer->ComputeFittingWindowSize(this));
SetSize(size);
}
// We don't want to restrict shrinking the window vertically as it might be
// too tall (see SetInitialSize() call in wxPreviewCanvas ctor), but we do
// want to make it at least as wide as the control bar, as otherwise the
// buttons wouldn't fit, and restricting it to at least its height
// vertically is also quite reasonable.
SetSizeHints(ClientToWindowSize(m_controlBar->GetBestSize()));
m_modalityKind = kind;
switch ( m_modalityKind )
{
@@ -1794,8 +1818,6 @@ void wxPreviewFrame::InitializeWithModality(wxPreviewFrameModalityKind kind)
SetWindowStyle((GetWindowStyle() & ~wxMINIMIZE_BOX) | wxFRAME_NO_TASKBAR);
}
Layout();
m_printPreview->AdjustScrollbars(m_previewCanvas);
m_previewCanvas->SetFocus();
m_controlBar->SetFocus();
@@ -1859,7 +1881,7 @@ void wxPrintPreviewBase::Init(wxPrintout *printout,
m_currentPage = 1;
m_currentZoom = 70;
m_topMargin =
m_leftMargin = 2*wxSizerFlags::GetDefaultBorder();
m_leftMargin = wxRound(2*wxSizerFlags::GetDefaultBorderFractional());
m_pageWidth = 0;
m_pageHeight = 0;
m_printingPrepared = false;