X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/906c935a80b10d53cecf57f71ab5f3f4f1d529ec..2a45803fc3877afd0ae3ce356dfe216505165882:/samples/image/image.cpp diff --git a/samples/image/image.cpp b/samples/image/image.cpp index 7fa9637561..e9de0eecc7 100644 --- a/samples/image/image.cpp +++ b/samples/image/image.cpp @@ -24,9 +24,11 @@ #include "wx/image.h" #include "wx/file.h" #include "wx/filename.h" +#include "wx/graphics.h" #include "wx/mstream.h" #include "wx/wfstream.h" #include "wx/quantize.h" +#include "wx/scopedptr.h" #include "wx/stopwatch.h" #include "wx/versioninfo.h" @@ -48,7 +50,7 @@ #include "canvas.h" -#ifndef __WXMSW__ +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #endif @@ -83,6 +85,9 @@ public: #ifdef wxHAVE_RAW_BITMAP void OnTestRawBitmap( wxCommandEvent &event ); #endif // wxHAVE_RAW_BITMAP +#if wxUSE_GRAPHICS_CONTEXT + void OnTestGraphics(wxCommandEvent& event); +#endif // wxUSE_GRAPHICS_CONTEXT void OnQuit( wxCommandEvent &event ); #if wxUSE_CLIPBOARD @@ -145,7 +150,7 @@ private: m_zoom = 1.; wxMenu *menu = new wxMenu; - menu->Append(wxID_SAVE); + menu->Append(wxID_SAVEAS); menu->AppendSeparator(); menu->AppendCheckItem(ID_PAINT_BG, wxT("&Paint background"), "Uncheck this for transparent images"); @@ -209,7 +214,7 @@ private: wxString savefilename = wxFileSelector( wxT("Save Image"), wxEmptyString, wxEmptyString, - (const wxChar *)NULL, + wxEmptyString, wxT("BMP files (*.bmp)|*.bmp|") #if wxUSE_LIBPNG wxT("PNG files (*.png)|*.png|") @@ -225,10 +230,13 @@ private: #endif #if wxUSE_PCX wxT("PCX files (*.pcx)|*.pcx|") +#endif +#if wxUSE_XPM + wxT("X PixMap files (*.xpm)|*.xpm|") #endif wxT("ICO files (*.ico)|*.ico|") wxT("CUR files (*.cur)|*.cur"), - wxFD_SAVE, + wxFD_SAVE | wxFD_OVERWRITE_PROMPT, this); if ( savefilename.empty() ) @@ -585,7 +593,7 @@ BEGIN_EVENT_TABLE(MyImageFrame, wxFrame) EVT_ERASE_BACKGROUND(MyImageFrame::OnEraseBackground) EVT_PAINT(MyImageFrame::OnPaint) - EVT_MENU(wxID_SAVE, MyImageFrame::OnSave) + EVT_MENU(wxID_SAVEAS, MyImageFrame::OnSave) EVT_MENU_RANGE(ID_ROTATE_LEFT, ID_ROTATE_RIGHT, MyImageFrame::OnRotate) EVT_MENU(ID_RESIZE, MyImageFrame::OnResize) @@ -617,6 +625,7 @@ enum ID_NEW = 100, ID_INFO, ID_SHOWRAW, + ID_GRAPHICS, ID_SHOWTHUMBNAIL }; @@ -630,6 +639,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) #ifdef wxHAVE_RAW_BITMAP EVT_MENU (ID_SHOWRAW, MyFrame::OnTestRawBitmap) #endif +#if wxUSE_GRAPHICS_CONTEXT + EVT_MENU (ID_GRAPHICS, MyFrame::OnTestGraphics) +#endif // wxUSE_GRAPHICS_CONTEXT #if wxUSE_CLIPBOARD EVT_MENU(wxID_COPY, MyFrame::OnCopy) EVT_MENU(wxID_PASTE, MyFrame::OnPaste) @@ -651,11 +663,15 @@ MyFrame::MyFrame() menuImage->AppendSeparator(); menuImage->Append( ID_SHOWRAW, wxT("Test &raw bitmap...\tCtrl-R")); #endif +#if wxUSE_GRAPHICS_CONTEXT + menuImage->AppendSeparator(); + menuImage->Append(ID_GRAPHICS, "Test &graphics context...\tCtrl-G"); +#endif // wxUSE_GRAPHICS_CONTEXT menuImage->AppendSeparator(); menuImage->Append( ID_SHOWTHUMBNAIL, wxT("Test &thumbnail...\tCtrl-T"), "Test scaling the image during load (try with JPEG)"); menuImage->AppendSeparator(); - menuImage->Append( ID_ABOUT, wxT("&About...\tF1")); + menuImage->Append( ID_ABOUT, wxT("&About\tF1")); menuImage->AppendSeparator(); menuImage->Append( ID_QUIT, wxT("E&xit\tCtrl-Q")); menu_bar->Append(menuImage, wxT("&Image")); @@ -796,6 +812,85 @@ void MyFrame::OnTestRawBitmap( wxCommandEvent &WXUNUSED(event) ) #endif // wxHAVE_RAW_BITMAP +#if wxUSE_GRAPHICS_CONTEXT + +class MyGraphicsFrame : public wxFrame +{ +public: + enum + { + WIDTH = 256, + HEIGHT = 90 + }; + + MyGraphicsFrame(wxWindow* parent) : + wxFrame(parent, wxID_ANY, "Graphics context test"), + m_image(WIDTH, HEIGHT, false) + { + // Create a test image: it has 3 horizontal primary colour bands with + // alpha increasing from left to right. + m_image.SetAlpha(); + unsigned char* alpha = m_image.GetAlpha(); + unsigned char* data = m_image.GetData(); + + for ( int y = 0; y < HEIGHT; y++ ) + { + unsigned char r = 0, + g = 0, + b = 0; + if ( y < HEIGHT/3 ) + r = 0xff; + else if ( y < (2*HEIGHT)/3 ) + g = 0xff; + else + b = 0xff; + + for ( int x = 0; x < WIDTH; x++ ) + { + *alpha++ = x; + *data++ = r; + *data++ = g; + *data++ = b; + } + } + + m_bitmap = wxBitmap(m_image); + + Connect(wxEVT_PAINT, wxPaintEventHandler(MyGraphicsFrame::OnPaint)); + + Show(); + } + +private: + void OnPaint(wxPaintEvent& WXUNUSED(event)) + { + wxPaintDC dc(this); + wxScopedPtr gc(wxGraphicsContext::Create(dc)); + wxGraphicsBitmap gb(gc->CreateBitmapFromImage(m_image)); + + gc->SetFont(*wxNORMAL_FONT, *wxBLACK); + gc->DrawText("Bitmap", 0, HEIGHT/2); + gc->DrawBitmap(m_bitmap, 0, 0, WIDTH, HEIGHT); + + wxGraphicsFont gf = gc->CreateFont(wxNORMAL_FONT->GetPixelSize().y, ""); + gc->SetFont(gf); + gc->DrawText("Graphics bitmap", 0, (3*HEIGHT)/2); + gc->DrawBitmap(gb, 0, HEIGHT, WIDTH, HEIGHT); + } + + wxImage m_image; + wxBitmap m_bitmap; + + wxDECLARE_NO_COPY_CLASS(MyGraphicsFrame); +}; + +void MyFrame::OnTestGraphics(wxCommandEvent& WXUNUSED(event)) +{ + new MyGraphicsFrame(this); +} + +#endif // wxUSE_GRAPHICS_CONTEXT + #if wxUSE_CLIPBOARD void MyFrame::OnCopy(wxCommandEvent& WXUNUSED(event)) @@ -852,10 +947,14 @@ void MyFrame::OnThumbnail( wxCommandEvent &WXUNUSED(event) ) return; } + int origWidth = image.GetOptionInt( wxIMAGE_OPTION_ORIGINAL_WIDTH ); + int origHeight = image.GetOptionInt( wxIMAGE_OPTION_ORIGINAL_HEIGHT ); + const long loadTime = sw.Time(); MyImageFrame * const frame = new MyImageFrame(this, filename, image); - wxLogStatus(frame, "Loaded \"%s\" in %ldms", filename, loadTime); + wxLogStatus(frame, "Loaded \"%s\" in %ldms; original size was (%d, %d)", + filename, loadTime, origWidth, origHeight); #else wxLogError( wxT("Couldn't create file selector dialog") ); return;