X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..65fb4b3a4f18e1d8b58ac92d50d4cc7f81f03783:/samples/printing/printing.cpp?ds=sidebyside diff --git a/samples/printing/printing.cpp b/samples/printing/printing.cpp index 735b36f391..ace34b5d7f 100644 --- a/samples/printing/printing.cpp +++ b/samples/printing/printing.cpp @@ -51,8 +51,8 @@ #include "printing.h" -#ifndef __WXMSW__ - #include "mondrian.xpm" +#ifndef wxHAS_IMAGES_IN_RESOURCES + #include "../sample.xpm" #endif // Global print data, to remember settings during the session @@ -123,8 +123,6 @@ bool MyApp::OnInit(void) frame->Centre(wxBOTH); frame->Show(); - SetTopWindow(frame); - return true; } @@ -212,7 +210,7 @@ void MyApp::Draw(wxDC&dc) str.Printf( wxT("---- Text at angle %d ----"), i ); dc.DrawRotatedText( str, 100, 300, i ); - wxIcon my_icon = wxICON(mondrian); + wxIcon my_icon = wxICON(sample); dc.DrawIcon( my_icon, 100, 100); @@ -230,11 +228,17 @@ void MyApp::Draw(wxDC&dc) if (window_dc) gc = wxGraphicsContext::Create( *window_dc ); +#ifdef __WXMSW__ + wxEnhMetaFileDC *emf_dc = wxDynamicCast( &dc, wxEnhMetaFileDC ); + if (emf_dc) + gc = wxGraphicsContext::Create( *emf_dc ); +#endif + if (gc) { // make a path that contains a circle and some lines, centered at 100,100 gc->SetPen( *wxRED_PEN ); - gc->SetFont( m_testFont, *wxGREEN ); + wxGraphicsPath path = gc->CreatePath(); path.AddCircle( 50.0, 50.0, 50.0 ); path.MoveToPoint(0.0, 50.0); @@ -246,6 +250,17 @@ void MyApp::Draw(wxDC&dc) gc->StrokePath(path); + // draw some text + wxString text("Text by wxGraphicsContext"); + gc->SetFont( m_testFont, *wxBLACK ); + gc->DrawText(text, 25.0, 60.0); + + // draw rectangle around the text + double w, h, d, el; + gc->GetTextExtent(text, &w, &h, &d, &el); + gc->SetPen( *wxBLACK_PEN ); + gc->DrawRectangle(25.0, 60.0, w, h); + delete gc; } #endif @@ -272,12 +287,17 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) #endif EVT_MENU(WXPRINT_ANGLEUP, MyFrame::OnAngleUp) EVT_MENU(WXPRINT_ANGLEDOWN, MyFrame::OnAngleDown) + + EVT_MENU_RANGE(WXPRINT_FRAME_MODAL_APP, + WXPRINT_FRAME_MODAL_NON, + MyFrame::OnPreviewFrameModalityKind) END_EVENT_TABLE() MyFrame::MyFrame(wxFrame *frame, const wxString&title, const wxPoint&pos, const wxSize&size) : wxFrame(frame, wxID_ANY, title, pos, size) { m_canvas = NULL; + m_previewModality = wxPreviewFrame_AppModal; #if wxUSE_STATUSBAR // Give us a status line @@ -286,7 +306,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString&title, const wxPoint&pos, const #endif // wxUSE_STATUSBAR // Load icon and bitmap - SetIcon( wxICON( mondrian) ); + SetIcon( wxICON( sample) ); // Make a menubar wxMenu *file_menu = new wxMenu; @@ -298,6 +318,11 @@ MyFrame::MyFrame(wxFrame *frame, const wxString&title, const wxPoint&pos, const #endif file_menu->Append(wxID_PREVIEW, wxT("Print Pre&view"), wxT("Preview")); + wxMenu * const menuModalKind = new wxMenu; + menuModalKind->AppendRadioItem(WXPRINT_FRAME_MODAL_APP, "&App modal"); + menuModalKind->AppendRadioItem(WXPRINT_FRAME_MODAL_WIN, "&Window modal"); + menuModalKind->AppendRadioItem(WXPRINT_FRAME_MODAL_NON, "&Not modal"); + file_menu->AppendSubMenu(menuModalKind, "Preview frame &modal kind"); #if wxUSE_ACCEL // Accelerators wxAcceleratorEntry entries[1]; @@ -385,7 +410,7 @@ void MyFrame::OnPrintPreview(wxCommandEvent& WXUNUSED(event)) wxPreviewFrame *frame = new wxPreviewFrame(preview, this, wxT("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650)); frame->Centre(wxBOTH); - frame->Initialize(); + frame->InitializeWithModality(m_previewModality); frame->Show(); } @@ -465,6 +490,12 @@ void MyFrame::OnAngleDown(wxCommandEvent& WXUNUSED(event)) m_canvas->Refresh(); } +void MyFrame::OnPreviewFrameModalityKind(wxCommandEvent& event) +{ + m_previewModality = static_cast( + wxPreviewFrame_AppModal + + (event.GetId() - WXPRINT_FRAME_MODAL_APP)); +} // ---------------------------------------------------------------------------- // MyCanvas @@ -627,7 +658,7 @@ void MyPrintout::DrawPageTwo() int ppiPrinterX, ppiPrinterY; GetPPIPrinter(&ppiPrinterX, &ppiPrinterY); - // This scales the DC so that the printout roughly represents the the screen + // This scales the DC so that the printout roughly represents the screen // scaling. The text point size _should_ be the right size but in fact is // too small for some reason. This is a detail that will need to be // addressed at some point but can be fudged for the moment.