]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/png/pngdemo.cpp
Tools
[wxWidgets.git] / samples / png / pngdemo.cpp
index ed0c27b7747b1074f54bcdf657a4e9a0279d559e..0d88f11699226c48808d27b709e503b60085f0a7 100644 (file)
 #pragma hdrstop
 #endif
 
-#ifdef __WINDOWS__
-#include <wx/pnghand.h>
-#endif
+#include "wx/image.h"
 
 #include "pngdemo.h"
 
-MyFrame   *frame = NULL;
-wxBitmap  *g_TestBitmap = NULL;
+MyFrame   *frame = (MyFrame *) NULL;
+wxBitmap  *g_TestBitmap = (wxBitmap *) NULL;
 
 IMPLEMENT_APP(MyApp)
 
@@ -37,12 +35,10 @@ MyApp::MyApp()
 
 bool MyApp::OnInit(void)
 {
-#ifdef __WINDOWS__
-  wxBitmap::AddHandler(new wxPNGFileHandler);
-#endif
+  wxImage::AddHandler(new wxPNGHandler);
 
   // Create the main frame window
-  frame = new MyFrame(NULL, "wxPNGBitmap Demo", wxPoint(0, 0), wxSize(300, 300));
+  frame = new MyFrame((wxFrame *) NULL, "wxPNGBitmap Demo", wxPoint(0, 0), wxSize(300, 300));
 
   // Give it a status line
   frame->CreateStatusBar(2);
@@ -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,33 +77,63 @@ 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
 MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size):
   wxFrame(frame, -1, title, pos, size)
 {
-  canvas = NULL;
+  canvas = (MyCanvas *) NULL;
 }
 
-void MyFrame::OnQuit(wxCommandEvent& event)
+void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
     Close(TRUE);
 }
 
-void MyFrame::OnAbout(wxCommandEvent& event)
+void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
     (void)wxMessageBox("PNG demo\nJulian Smart (c) 1998",
             "About PNG Demo", wxOK);
 }
 
-void MyFrame::OnLoadFile(wxCommandEvent& event)
+void MyFrame::OnSaveFile(wxCommandEvent& WXUNUSED(event))
+{
+  wxString f = wxFileSelector( wxT("Save Image"), (const wxChar *)NULL,
+                               (const wxChar *)NULL,
+                               wxT("png"), wxT("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", NULL, NULL,"png",
-                 "PNG files (*.png)|*.png");
+       wxString f = wxFileSelector(wxT("Open Image"), (const wxChar *) NULL,
+                                    (const wxChar *) NULL, wxT("png"),
+                                    wxT("PNG files (*.png)|*.png"));
 
-       if (!f)
+       if (f == "")
          return;
 
     if ( g_TestBitmap )
@@ -115,7 +142,7 @@ void MyFrame::OnLoadFile(wxCommandEvent& event)
     if (!g_TestBitmap->Ok())
     {
         delete g_TestBitmap;
-        g_TestBitmap = NULL;
+        g_TestBitmap = (wxBitmap *) NULL;
     }
 
     canvas->Refresh();
@@ -136,10 +163,10 @@ MyCanvas::~MyCanvas(void)
 }
 
 // Define the repainting behaviour
-void MyCanvas::OnPaint(wxPaintEvent& event)
+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 +176,12 @@ void MyCanvas::OnPaint(wxPaintEvent& 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 +192,7 @@ void MyCanvas::OnPaint(wxPaintEvent& 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 +202,4 @@ void MyCanvas::OnPaint(wxPaintEvent& 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;
-}