]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/png/pngdemo.cpp
Reset m_oldValue of after ::SetValue().
[wxWidgets.git] / samples / png / pngdemo.cpp
index f1e477e5fd80744f3cb79ce1a1df9875a57d9441..20faa8d94d804201b1ee69cc917c2984c9bf0a3b 100644 (file)
@@ -5,14 +5,10 @@
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows license
+// Copyright:   (c) Julian Smart
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "pngdemo.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #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)
 
-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, _T("wxPNGBitmap Demo"), wxPoint(0, 0), wxSize(300, 300));
 
+#if wxUSE_STATUSBAR
   // Give it a status line
   frame->CreateStatusBar(2);
+#endif // wxUSE_STATUSBAR
 
   // Make a menubar
   wxMenu *file_menu = new wxMenu;
   wxMenu *help_menu = new wxMenu;
 
-  file_menu->Append(PNGDEMO_LOAD_FILE, "&Load file",                "Load file");
-  file_menu->Append(PNGDEMO_QUIT, "E&xit",                "Quit program");
-  help_menu->Append(PNGDEMO_ABOUT, "&About",              "About PNG demo");
+  file_menu->Append(PNGDEMO_LOAD_FILE, _T("&Load file"),                _T("Load file"));
+  file_menu->Append(PNGDEMO_SAVE_FILE, _T("&Save file"),                _T("Save file"));
+  file_menu->Append(PNGDEMO_QUIT, _T("E&xit"),                _T("Quit program"));
+  help_menu->Append(PNGDEMO_ABOUT, _T("&About"),              _T("About PNG demo"));
 
   wxMenuBar *menu_bar = new wxMenuBar;
 
-  menu_bar->Append(file_menu, "&File");
-  menu_bar->Append(help_menu, "&Help");
+  menu_bar->Append(file_menu, _T("&File"));
+  menu_bar->Append(help_menu, _T("&Help"));
 
   // Associate the menu bar with the frame
   frame->SetMenuBar(menu_bar);
@@ -69,56 +60,103 @@ bool MyApp::OnInit(void)
 //  canvas->SetScrollbars(20, 20, 50, 50, 4, 4);
   frame->canvas = canvas;
 
-  frame->Show(TRUE);
+  frame->Show(true);
 
-  frame->SetStatusText("Hello, wxWindows");
+#if wxUSE_STATUSBAR
+  frame->SetStatusText(_T("Hello, wxWidgets"));
+#endif // wxUSE_STATUSBAR
 
-  return TRUE;
+  return true;
 }
 
 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)
+  wxFrame(frame, wxID_ANY, title, pos, size)
 {
-  canvas = NULL;
+  canvas = (MyCanvas *) NULL;
 }
 
-void MyFrame::OnQuit(wxCommandEvent& event)
+// frame destructor
+MyFrame::~MyFrame()
 {
-    Close(TRUE);
+    if (g_TestBitmap)
+    {
+        delete g_TestBitmap;
+        g_TestBitmap = (wxBitmap *) NULL;
+    }
 }
 
-void MyFrame::OnAbout(wxCommandEvent& event)
+void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
-    (void)wxMessageBox("PNG demo\nJulian Smart (c) 1998",
-            "About PNG Demo", wxOK);
+    Close(true);
+}
+
+void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
+{
+    (void)wxMessageBox(_T("PNG demo\nJulian Smart (c) 1998"),
+            _T("About PNG Demo"), wxOK);
+}
+
+void MyFrame::OnSaveFile(wxCommandEvent& WXUNUSED(event))
+{
+#if wxUSE_FILEDLG
+    wxString f = wxFileSelector( wxT("Save Image"), (const wxChar *)NULL,
+                                 (const wxChar *)NULL,
+                                 wxT("png"), wxT("PNG files (*.png)|*.png") );
+
+    if (f.empty())  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( _T("This is a memory dc."), 10, 10 );
+
+    memDC.SelectObject( wxNullBitmap );
+
+    backstore->SaveFile( f, wxBITMAP_TYPE_PNG, (wxPalette*)NULL );
+
+    delete backstore;
+#endif // wxUSE_FILEDLG
 }
 
-void MyFrame::OnLoadFile(wxCommandEvent& event)
+void MyFrame::OnLoadFile(wxCommandEvent& WXUNUSED(event))
 {
-       // Show file selector.
-       char *f = wxFileSelector("Open Image", NULL, NULL,"png",
-                 "PNG files (*.png)|*.png");
+#if wxUSE_FILEDLG
+    // Show file selector.
+    wxString f = wxFileSelector(wxT("Open Image"), (const wxChar *) NULL,
+                                    (const wxChar *) NULL, wxT("png"),
+                                    wxT("PNG files (*.png)|*.png"));
 
-       if (!f)
-         return;
+    if (f.empty())
+        return;
 
     if ( g_TestBitmap )
         delete g_TestBitmap;
+
     g_TestBitmap = new wxBitmap(f, wxBITMAP_TYPE_PNG);
     if (!g_TestBitmap->Ok())
     {
         delete g_TestBitmap;
-        g_TestBitmap = NULL;
+        g_TestBitmap = (wxBitmap *) NULL;
     }
 
     canvas->Refresh();
+#endif // wxUSE_FILEDLG
 }
 
 BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
@@ -127,60 +165,46 @@ END_EVENT_TABLE()
 
 // Define a constructor for my canvas
 MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size):
- wxScrolledWindow(parent, -1, pos, size)
-{
-}
-
-MyCanvas::~MyCanvas(void)
+ wxScrolledWindow(parent, wxID_ANY, pos, size)
 {
 }
 
 // Define the repainting behaviour
-void MyCanvas::OnPaint(wxPaintEvent& event)
+void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
 {
-  wxPaintDC dc(this);
-  dc.SetPen(wxRED_PEN);
-
-  int i;
-  for ( i = 0; i < 500; i += 10)
-  {
-    dc.DrawLine(0, i, 800, i);
-  }
-  if ( g_TestBitmap && g_TestBitmap->Ok() )
-  {
-    wxMemoryDC memDC;
-    if ( g_TestBitmap->GetColourMap() )
+    wxPaintDC dc(this);
+    dc.SetPen(* wxRED_PEN);
+
+    int i;
+    for ( i = 0; i < 500; i += 10)
     {
-        memDC.SetColourMap(g_TestBitmap->GetColourMap());
-        dc.SetColourMap(g_TestBitmap->GetColourMap());
+        dc.DrawLine(0, i, 800, i);
+    }
+    if ( g_TestBitmap && g_TestBitmap->Ok() )
+    {
+        wxMemoryDC memDC;
+        if ( g_TestBitmap->GetPalette() )
+        {
+            memDC.SetPalette(* g_TestBitmap->GetPalette());
+            dc.SetPalette(* g_TestBitmap->GetPalette());
+        }
+        memDC.SelectObject(* g_TestBitmap);
+
+        // Normal, non-transparent blitting
+        dc.Blit(20, 20, g_TestBitmap->GetWidth(), g_TestBitmap->GetHeight(), & memDC, 0, 0, wxCOPY, false);
+
+        memDC.SelectObject(wxNullBitmap);
     }
-    memDC.SelectObject(g_TestBitmap);
-
-    // Normal, non-transparent blitting
-    dc.Blit(20, 20, g_TestBitmap->GetWidth(), g_TestBitmap->GetHeight(), & memDC, 0, 0, wxCOPY, FALSE);
-
-    memDC.SelectObject(NULL);
-  }
-
-  if ( g_TestBitmap && g_TestBitmap->Ok() )
-  {
-    wxMemoryDC memDC;
-    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,
-      0, 0, wxCOPY, TRUE);
 
-    memDC.SelectObject(wxNullBitmap);
-  }
-}
+    if ( g_TestBitmap && g_TestBitmap->Ok() )
+    {
+        wxMemoryDC memDC;
+        memDC.SelectObject(* g_TestBitmap);
 
-// Define the behaviour for the frame closing
-// - must delete all frames except for the main one.
-bool MyFrame::OnClose(void)
-{
-  Show(FALSE);
+        // 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,
+            0, 0, wxCOPY, true);
 
-  return TRUE;
+        memDC.SelectObject(wxNullBitmap);
+    }
 }
-