X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/37ba70a520519fd2fe4f11400f1383fa37ae7cd9..d6a3ec35c891f8b05099ec194b5ed4a6697dfb51:/samples/image/image.cpp diff --git a/samples/image/image.cpp b/samples/image/image.cpp index a365d34310..01af647f11 100644 --- a/samples/image/image.cpp +++ b/samples/image/image.cpp @@ -26,6 +26,7 @@ #include "wx/mstream.h" #include "wx/wfstream.h" #include "wx/quantize.h" +#include "wx/stopwatch.h" #if wxUSE_CLIPBOARD #include "wx/dataobj.h" @@ -119,6 +120,8 @@ public: void OnAbout( wxCommandEvent &event ); void OnNewFrame( wxCommandEvent &event ); void OnImageInfo( wxCommandEvent &event ); + void OnThumbnail( wxCommandEvent &event ); + #ifdef wxHAVE_RAW_BITMAP void OnTestRawBitmap( wxCommandEvent &event ); #endif // wxHAVE_RAW_BITMAP @@ -149,9 +152,10 @@ private: enum { - ID_ROTATE_LEFT = 100, + ID_ROTATE_LEFT = wxID_HIGHEST+1, ID_ROTATE_RIGHT, - ID_RESIZE + ID_RESIZE, + ID_PAINT_BG }; class MyImageFrame : public wxFrame @@ -167,6 +171,8 @@ public: wxMenu *menu = new wxMenu; menu->Append(wxID_SAVE); menu->AppendSeparator(); + m_pClearBgMenu = menu->AppendCheckItem(ID_PAINT_BG, _T("&Paint background")); + menu->AppendSeparator(); menu->Append(ID_RESIZE, _T("&Fit to window\tCtrl-F")); menu->AppendSeparator(); menu->Append(ID_ROTATE_LEFT, _T("Rotate &left\tCtrl-L")); @@ -181,6 +187,8 @@ public: SetClientSize(bitmap.GetWidth(), bitmap.GetHeight()); UpdateStatusBar(); + +// SetBackgroundColour(*wxWHITE); } void OnEraseBackground(wxEraseEvent& WXUNUSED(event)) @@ -191,6 +199,10 @@ public: void OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); + + if (m_pClearBgMenu->IsChecked()) + ClearBackground(); + const wxSize size = GetClientSize(); dc.DrawBitmap(m_bitmap, (size.x - m_bitmap.GetWidth())/2, @@ -365,6 +377,7 @@ private: } wxBitmap m_bitmap; + wxMenuItem* m_pClearBgMenu; DECLARE_EVENT_TABLE() }; @@ -1110,7 +1123,8 @@ enum ID_ABOUT = wxID_ABOUT, ID_NEW = 100, ID_INFO, - ID_SHOWRAW + ID_SHOWRAW, + ID_SHOWTHUMBNAIL }; IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame ) @@ -1120,6 +1134,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU (ID_QUIT, MyFrame::OnQuit) EVT_MENU (ID_NEW, MyFrame::OnNewFrame) EVT_MENU (ID_INFO, MyFrame::OnImageInfo) + EVT_MENU (ID_SHOWTHUMBNAIL, MyFrame::OnThumbnail) #ifdef wxHAVE_RAW_BITMAP EVT_MENU (ID_SHOWRAW, MyFrame::OnTestRawBitmap) #endif @@ -1144,6 +1159,9 @@ MyFrame::MyFrame() menuImage->Append( ID_SHOWRAW, _T("Test &raw bitmap...\tCtrl-R")); #endif menuImage->AppendSeparator(); + menuImage->Append( ID_SHOWTHUMBNAIL, _T("Test &thumbnail...\tCtrl-T"), + "Test scaling the image during load (try with JPEG)"); + menuImage->AppendSeparator(); menuImage->Append( ID_ABOUT, _T("&About...")); menuImage->AppendSeparator(); menuImage->Append( ID_QUIT, _T("E&xit\tCtrl-Q")); @@ -1309,3 +1327,37 @@ bool MyApp::OnInit() return true; } + +void MyFrame::OnThumbnail( wxCommandEvent &WXUNUSED(event) ) +{ +#if wxUSE_FILEDLG + wxString filename = wxFileSelector(_T("Select image file")); + if ( filename.empty() ) + return; + + static const int THUMBNAIL_WIDTH = 320; + static const int THUMBNAIL_HEIGHT = 240; + + wxImage image; + image.SetOption(wxIMAGE_OPTION_MAX_WIDTH, THUMBNAIL_WIDTH); + image.SetOption(wxIMAGE_OPTION_MAX_HEIGHT, THUMBNAIL_HEIGHT); + + wxStopWatch sw; + if ( !image.LoadFile(filename) ) + { + wxLogError(_T("Couldn't load image from '%s'."), filename.c_str()); + return; + } + + const long loadTime = sw.Time(); + + MyImageFrame * const + frame = new MyImageFrame(this, filename, wxBitmap(image)); + frame->Show(); + wxLogStatus(frame, "Loaded \"%s\" in %ldms", filename, loadTime); +#else + wxLogError( _T("Couldn't create file selector dialog") ); + return; +#endif // wxUSE_FILEDLG +} +