X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c67daf87774c71ae9f73af9969008af220e52a11..11dfaa5f1dab5a787dc711c8d9881280509a50ae:/samples/png/pngdemo.cpp?ds=sidebyside diff --git a/samples/png/pngdemo.cpp b/samples/png/pngdemo.cpp index edbaea70a2..473340a6e9 100644 --- a/samples/png/pngdemo.cpp +++ b/samples/png/pngdemo.cpp @@ -20,9 +20,7 @@ #pragma hdrstop #endif -#ifdef __WXMSW__ -#include <wx/pnghand.h> -#endif +#include "wx/image.h" #include "pngdemo.h" @@ -37,9 +35,7 @@ MyApp::MyApp() bool MyApp::OnInit(void) { -#ifdef __WXMSW__ - wxBitmap::AddHandler(new wxPNGFileHandler); -#endif + wxImage::AddHandler(new wxPNGHandler); // Create the main frame window frame = new MyFrame((wxFrame *) NULL, "wxPNGBitmap Demo", wxPoint(0, 0), wxSize(300, 300)); @@ -52,6 +48,7 @@ bool MyApp::OnInit(void) wxMenu *help_menu = new wxMenu; file_menu->Append(PNGDEMO_LOAD_FILE, "&Load file", "Load file"); + file_menu->Append(PNGDEMO_SAVE_FILE, "&Save file", "Save file"); file_menu->Append(PNGDEMO_QUIT, "E&xit", "Quit program"); help_menu->Append(PNGDEMO_ABOUT, "&About", "About PNG demo"); @@ -80,6 +77,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(PNGDEMO_QUIT, MyFrame::OnQuit) EVT_MENU(PNGDEMO_ABOUT, MyFrame::OnAbout) EVT_MENU(PNGDEMO_LOAD_FILE, MyFrame::OnLoadFile) + EVT_MENU(PNGDEMO_SAVE_FILE, MyFrame::OnSaveFile) END_EVENT_TABLE() // Define my frame constructor @@ -100,13 +98,40 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) "About PNG Demo", wxOK); } +void MyFrame::OnSaveFile(wxCommandEvent& WXUNUSED(event)) +{ + wxString f = wxFileSelector( "Save Image", (const char *)NULL, (const char *)NULL, + "png", "PNG files (*.png)|*.png" ); + + if (f == "") return; + + wxBitmap *backstore = new wxBitmap( 150, 150 ); + + wxMemoryDC memDC; + memDC.SelectObject( *backstore ); + memDC.Clear(); + memDC.SetBrush( *wxBLACK_BRUSH ); + memDC.SetPen( *wxWHITE_PEN ); + memDC.DrawRectangle( 0, 0, 150, 150 ); + memDC.SetPen( *wxBLACK_PEN ); + memDC.DrawLine( 0, 0, 0, 10 ); + memDC.SetTextForeground( *wxWHITE ); + memDC.DrawText( "This is a memory dc.", 10, 10 ); + + memDC.SelectObject( wxNullBitmap ); + + backstore->SaveFile( f, wxBITMAP_TYPE_PNG, (wxPalette*)NULL ); + + delete backstore; +} + void MyFrame::OnLoadFile(wxCommandEvent& WXUNUSED(event)) { // Show file selector. - char *f = wxFileSelector("Open Image", (const char *) NULL, (const char *) NULL,"png", + wxString f = wxFileSelector("Open Image", (const char *) NULL, (const char *) NULL,"png", "PNG files (*.png)|*.png"); - if (!f) + if (f == "") return; if ( g_TestBitmap ) @@ -139,7 +164,7 @@ MyCanvas::~MyCanvas(void) void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); - dc.SetPen(wxRED_PEN); + dc.SetPen(* wxRED_PEN); int i; for ( i = 0; i < 500; i += 10) @@ -149,12 +174,12 @@ void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) if ( g_TestBitmap && g_TestBitmap->Ok() ) { wxMemoryDC memDC; - if ( g_TestBitmap->GetColourMap() ) + if ( g_TestBitmap->GetPalette() ) { - memDC.SetColourMap(g_TestBitmap->GetColourMap()); - dc.SetColourMap(g_TestBitmap->GetColourMap()); + memDC.SetPalette(* g_TestBitmap->GetPalette()); + dc.SetPalette(* g_TestBitmap->GetPalette()); } - memDC.SelectObject(g_TestBitmap); + memDC.SelectObject(* g_TestBitmap); // Normal, non-transparent blitting dc.Blit(20, 20, g_TestBitmap->GetWidth(), g_TestBitmap->GetHeight(), & memDC, 0, 0, wxCOPY, FALSE); @@ -165,7 +190,7 @@ void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) if ( g_TestBitmap && g_TestBitmap->Ok() ) { wxMemoryDC memDC; - memDC.SelectObject(g_TestBitmap); + memDC.SelectObject(* g_TestBitmap); // Transparent blitting if there's a mask in the bitmap dc.Blit(20 + g_TestBitmap->GetWidth() + 20, 20, g_TestBitmap->GetWidth(), g_TestBitmap->GetHeight(), & memDC, @@ -175,12 +200,4 @@ void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) } } -// Define the behaviour for the frame closing -// - must delete all frames except for the main one. -bool MyFrame::OnClose(void) -{ - Show(FALSE); - - return TRUE; -}