]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/anidecod.cpp
Get wxMediaCtrl stub impl. going for OS X Cocoa.
[wxWidgets.git] / src / common / anidecod.cpp
index 7f90c8fdeb2d6d1a8607bea8751d9ff8afb8ea19..7c8dd53a99ebe1d81c792748585f4f4dfff0642e 100644 (file)
@@ -35,10 +35,10 @@ wxCURHandler wxANIDecoder::sm_handler;
 class wxANIFrameInfo
 {
 public:
-    wxANIFrameInfo(size_t delay = 0, int idx = -1)
+    wxANIFrameInfo(unsigned int delay = 0, int idx = -1)
         { m_delay=delay; m_imageIndex=idx; }
 
-    size_t m_delay;
+    unsigned int m_delay;
     int m_imageIndex;
 };
 
@@ -61,9 +61,9 @@ wxANIDecoder::~wxANIDecoder()
 {
 }
 
-bool wxANIDecoder::ConvertToImage(size_t frame, wxImage *image) const
+bool wxANIDecoder::ConvertToImage(unsigned int frame, wxImage *image) const
 {
-    size_t idx = m_info[frame].m_imageIndex;
+    unsigned int idx = m_info[frame].m_imageIndex;
     *image = m_images[idx];       // copy
     return image->IsOk();
 }
@@ -73,29 +73,41 @@ bool wxANIDecoder::ConvertToImage(size_t frame, wxImage *image) const
 // Data accessors
 //---------------------------------------------------------------------------
 
-wxSize wxANIDecoder::GetFrameSize(size_t WXUNUSED(frame)) const
+wxSize wxANIDecoder::GetFrameSize(unsigned int WXUNUSED(frame)) const
 {
     // all frames are of the same size...
     return m_szAnimation;
 }
 
-wxPoint wxANIDecoder::GetFramePosition(size_t WXUNUSED(frame)) const
+wxPoint wxANIDecoder::GetFramePosition(unsigned int WXUNUSED(frame)) const
 {
     // all frames are of the same size...
     return wxPoint(0,0);
 }
 
-wxAnimationDisposal wxANIDecoder::GetDisposalMethod(size_t WXUNUSED(frame)) const
+wxAnimationDisposal wxANIDecoder::GetDisposalMethod(unsigned int WXUNUSED(frame)) const
 {
     // this disposal is implicit for all frames inside an ANI file
     return wxANIM_TOBACKGROUND;
 }
 
-long wxANIDecoder::GetDelay(size_t frame) const
+long wxANIDecoder::GetDelay(unsigned int frame) const
 {
     return m_info[frame].m_delay;
 }
 
+wxColour wxANIDecoder::GetTransparentColour(unsigned int frame) const
+{
+    unsigned int idx = m_info[frame].m_imageIndex;
+
+    if (!m_images[idx].HasMask())
+        return wxNullColour;
+
+    return wxColour(m_images[idx].GetMaskRed(),
+                    m_images[idx].GetMaskGreen(),
+                    m_images[idx].GetMaskBlue());
+}
+
 
 //---------------------------------------------------------------------------
 // ANI reading and decoding
@@ -193,7 +205,7 @@ bool wxANIDecoder::Load( wxInputStream& stream )
 {
     wxInt32 FCC1, FCC2;
     wxUint32 datalen;
-    size_t globaldelay=0;
+    unsigned int globaldelay=0;
 
     wxInt32 riff32;
     memcpy( &riff32, "RIFF", 4 );
@@ -266,7 +278,7 @@ bool wxANIDecoder::Load( wxInputStream& stream )
                 return false;       // rate chunks should always be placed after anih chunk
 
             wxASSERT(m_info.GetCount() == m_nFrames);
-            for (size_t i=0; i<m_nFrames; i++)
+            for (unsigned int i=0; i<m_nFrames; i++)
             {
                 stream.Read(&FCC2, 4);
                 m_info[i].m_delay = wxINT32_SWAP_ON_BE(FCC2) * 1000 / 60;
@@ -279,7 +291,7 @@ bool wxANIDecoder::Load( wxInputStream& stream )
                 return false;       // seq chunks should always be placed after anih chunk
 
             wxASSERT(m_info.GetCount() == m_nFrames);
-            for (size_t i=0; i<m_nFrames; i++)
+            for (unsigned int i=0; i<m_nFrames; i++)
             {
                 stream.Read(&FCC2, 4);
                 m_info[i].m_imageIndex = wxINT32_SWAP_ON_BE(FCC2);
@@ -292,6 +304,7 @@ bool wxANIDecoder::Load( wxInputStream& stream )
             if (!sm_handler.DoLoadFile(&image, stream, false /* verbose */, -1))
                 return false;
 
+            image.SetType(wxBITMAP_TYPE_ANI);
             m_images.Add(image);
         }
         else
@@ -310,14 +323,14 @@ bool wxANIDecoder::Load( wxInputStream& stream )
     {
         // if no SEQ chunk is available, display the frames in the order
         // they were loaded
-        for (size_t i=0; i<m_nFrames; i++)
+        for (unsigned int i=0; i<m_nFrames; i++)
             if (m_info[i].m_imageIndex == -1)
                 m_info[i].m_imageIndex = i;
     }
 
     // if some frame has an invalid delay, use the global delay given in the
     // ANI header
-    for (size_t i=0; i<m_nFrames; i++)
+    for (unsigned int i=0; i<m_nFrames; i++)
         if (m_info[i].m_delay == 0)
             m_info[i].m_delay = globaldelay;