]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/image/image.cpp
added wxHTML bakefiles
[wxWidgets.git] / samples / image / image.cpp
index 3dfe14841fc63eaabe314f07cf488da05b5ec8d5..f51297399ea19fc3ba60c3560c1970ba6fc6b88b 100644 (file)
@@ -35,7 +35,8 @@
     #include "smile.xpm"
 #endif
 
-#if defined(__WXMSW__)
+#if defined(__WXMSW__) || defined(__WXMAC__)
+    #include "wx/rawbmp.h"
     #define wxHAVE_RAW_BITMAP
 #endif
 
@@ -127,7 +128,7 @@ public:
 #endif // wxHAVE_RAW_BITMAP
     void OnQuit( wxCommandEvent &event );
 
-#if wxUSE_CLIPBOARD && !defined(__WXMOTIF_)
+#if wxUSE_CLIPBOARD
     void OnCopy(wxCommandEvent& event);
     void OnPaste(wxCommandEvent& event);
 #endif // wxUSE_CLIPBOARD
@@ -260,20 +261,24 @@ public:
     {
         SetClientSize(SIZE, SIZE);
 
-        wxRawBitmapData data(m_bitmap);
+        // another possibility: wxNativePixelData (don't forget to remove code
+        // setting alpha in the loop below then)
+        typedef wxAlphaPixelData Data;
+
+        Data data(m_bitmap, wxPoint(BORDER, BORDER), wxSize(REAL_SIZE, REAL_SIZE));
         if ( !data )
         {
             wxLogError(_T("Failed to gain raw access to bitmap data"));
             return;
         }
 
-        wxRawBitmapIterator p(data);
+        data.UseAlpha();
 
-        p.Offset(BORDER, BORDER);
+        Data::Iterator p(data);
 
         for ( int y = 0; y < REAL_SIZE; ++y )
         {
-            wxRawBitmapIterator rowStart = p;
+            Data::Iterator rowStart = p;
 
             int r = y < REAL_SIZE/3 ? 255 : 0,
                 g = (REAL_SIZE/3 <= y) && (y < 2*(REAL_SIZE/3)) ? 255 : 0,
@@ -284,13 +289,13 @@ public:
                 p.Red() = r;
                 p.Green() = g;
                 p.Blue() = b;
-                p.Alpha() = x;
+                p.Alpha() = (Data::Iterator::ChannelType)((x*255.)/REAL_SIZE);
 
                 ++p; // same as p.OffsetX(1)
             }
 
             p = rowStart;
-            p.OffsetY(1);
+            p.OffsetY(data, 1);
         }
     }
 
@@ -404,8 +409,8 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
 
     image.Destroy();
 
-    image.LoadFile( dir + _T("test.png") );
-    my_square = new wxBitmap( image );
+    if ( image.LoadFile( dir + _T("test.png") ) )
+        my_square = new wxBitmap( image );
 
     image.Destroy();
 
@@ -547,20 +552,23 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
 
     // test image loading from stream
     wxFile file(dir + _T("horse.bmp"));
-    off_t len = file.Length();
-    void *data = malloc(len);
-    if ( file.Read(data, len) != len )
-        wxLogError(_T("Reading bitmap file failed"));
-    else
+    if ( file.IsOpened() )
     {
-        wxMemoryInputStream mis(data, len);
-        if ( !image.LoadFile(mis) )
-            wxLogError(wxT("Can't load BMP image from stream"));
+        off_t len = file.Length();
+        void *data = malloc(len);
+        if ( file.Read(data, len) != len )
+            wxLogError(_T("Reading bitmap file failed"));
         else
-            my_horse_bmp2 = new wxBitmap( image );
-    }
+        {
+            wxMemoryInputStream mis(data, len);
+            if ( !image.LoadFile(mis) )
+                wxLogError(wxT("Can't load BMP image from stream"));
+            else
+                my_horse_bmp2 = new wxBitmap( image );
+        }
 
-    free(data);
+        free(data);
+    }
 }
 
 MyCanvas::~MyCanvas()
@@ -814,7 +822,7 @@ BEGIN_EVENT_TABLE(MyFrame,wxFrame)
   EVT_MENU    (ID_SHOWRAW,  MyFrame::OnTestRawBitmap)
 #endif
 
-#if wxUSE_CLIPBOARD && !defined(__WXMOTIF__)
+#if wxUSE_CLIPBOARD
     EVT_MENU(wxID_COPY, MyFrame::OnCopy)
     EVT_MENU(wxID_PASTE, MyFrame::OnPaste)
 #endif // wxUSE_CLIPBOARD
@@ -828,6 +836,7 @@ MyFrame::MyFrame()
 
   wxMenu *menuImage = new wxMenu;
   menuImage->Append( ID_NEW, _T("&Show any image...\tCtrl-O"));
+
 #ifdef wxHAVE_RAW_BITMAP
   menuImage->Append( ID_SHOWRAW, _T("Test &raw bitmap...\tCtrl-R"));
 #endif
@@ -837,7 +846,7 @@ MyFrame::MyFrame()
   menuImage->Append( ID_QUIT, _T("E&xit\tCtrl-Q"));
   menu_bar->Append(menuImage, _T("&Image"));
 
-#if wxUSE_CLIPBOARD && !defined(__WXMOTIF__)
+#if wxUSE_CLIPBOARD
   wxMenu *menuClipboard = new wxMenu;
   menuClipboard->Append(wxID_COPY, _T("&Copy test image\tCtrl-C"));
   menuClipboard->Append(wxID_PASTE, _T("&Paste image\tCtrl-V"));
@@ -894,22 +903,28 @@ void MyFrame::OnTestRawBitmap( wxCommandEvent &event )
 
 #endif // wxHAVE_RAW_BITMAP
 
-#if wxUSE_CLIPBOARD && !defined(__WXMOTIF__)
+#if wxUSE_CLIPBOARD
 
 void MyFrame::OnCopy(wxCommandEvent& WXUNUSED(event))
 {
     wxBitmapDataObject *dobjBmp = new wxBitmapDataObject;
     dobjBmp->SetBitmap(*m_canvas->my_horse_png);
 
+    wxTheClipboard->Open();
+
     if ( !wxTheClipboard->SetData(dobjBmp) )
     {
         wxLogError(_T("Failed to copy bitmap to clipboard"));
     }
+
+    wxTheClipboard->Close();
 }
 
 void MyFrame::OnPaste(wxCommandEvent& WXUNUSED(event))
 {
     wxBitmapDataObject dobjBmp;
+
+    wxTheClipboard->Open();
     if ( !wxTheClipboard->GetData(dobjBmp) )
     {
         wxLogMessage(_T("No bitmap data in the clipboard"));
@@ -918,6 +933,7 @@ void MyFrame::OnPaste(wxCommandEvent& WXUNUSED(event))
     {
         (new MyImageFrame(this, dobjBmp.GetBitmap()))->Show();
     }
+    wxTheClipboard->Close();
 }
 
 #endif // wxUSE_CLIPBOARD