X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/87728739f23c6fcc737614e2e726f68778f9415b..525b0568c9882692cf31bf4d5a308940154cb350:/contrib/src/animate/animate.cpp diff --git a/contrib/src/animate/animate.cpp b/contrib/src/animate/animate.cpp index ec393517d3..97bf282767 100644 --- a/contrib/src/animate/animate.cpp +++ b/contrib/src/animate/animate.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ - #pragma implementation "animate.h" -#endif - #include "wx/wxprec.h" #ifdef __BORLANDC__ @@ -22,11 +18,11 @@ #include "wx/wfstream.h" #include "wx/image.h" #include "wx/gifdecod.h" -#include "wx/animate/animate.h" #include "wx/log.h" +#include "wx/dcmemory.h" +#include "wx/animate/animate.h" #include "wx/dc.h" #include "wx/dcclient.h" -#include "wx/dcmemory.h" /* * wxAnimationPlayer @@ -109,7 +105,6 @@ bool wxAnimationPlayer::Build() int i; for (i = 0; i < n; i++) { - wxBitmap* bitmap = NULL; wxImage* image = GetFrame(i); if (image) { @@ -120,7 +115,7 @@ bool wxAnimationPlayer::Build() if (GetTransparentColour(transparentColour)) image->SetMaskColour(transparentColour.Red(), transparentColour.Green(), transparentColour.Blue()); - bitmap = new wxBitmap(* image); + wxBitmap* bitmap = new wxBitmap(* image); delete image; if (bitmap) m_frames.Append(bitmap); @@ -246,7 +241,7 @@ bool wxAnimationPlayer::PlayFrame(int frame, wxWindow& window, const wxPoint& WX // Draw all intermediate frames that haven't been removed from the // animation int i; - for (i = 0; i < (frame - 1); i++) + for (i = 0; i < frame; i++) { if ((GetDisposalMethod(i) == wxANIM_DONOTREMOVE) || (GetDisposalMethod(i) == wxANIM_UNSPECIFIED)) { @@ -271,7 +266,11 @@ bool wxAnimationPlayer::PlayFrame() PlayFrame(GetCurrentFrame(), * GetWindow(), GetPosition()); // Set the timer for the next frame - m_timer.Start(GetDelay(GetCurrentFrame())); + int delay = GetDelay(GetCurrentFrame()); + if (delay == 0) + delay = 1; // 0 is invalid timeout for wxTimer. + + m_timer.Start(delay); m_currentFrame ++; @@ -293,13 +292,13 @@ bool wxAnimationPlayer::PlayFrame() // Clear the wxImage cache void wxAnimationPlayer::ClearCache() { - wxNode* node = m_frames.GetFirst(); + wxList::compatibility_iterator node = m_frames.GetFirst(); while (node) { - wxNode* next = node->GetNext(); + wxList::compatibility_iterator next = node->GetNext(); wxBitmap* bitmap = (wxBitmap*) node->GetData(); delete bitmap; - delete node; + m_frames.Erase(node); node = next; } } @@ -370,7 +369,7 @@ void wxAnimationPlayer::DrawFrame(int frame, wxDC& dc, const wxPoint& pos) { wxASSERT_MSG( (m_animation != NULL), _T("Animation not present in wxAnimationPlayer")); wxASSERT_MSG( (m_frames.GetCount() != 0), _T("Animation cache not present in wxAnimationPlayer")); - wxASSERT_MSG( (m_frames.Item(frame) != (wxNode*) NULL), _T("Image not present in wxAnimationPlayer::DrawFrame")); + wxASSERT_MSG( !!m_frames.Item(frame), _T("Image not present in wxAnimationPlayer::DrawFrame")); wxBitmap* bitmap = (wxBitmap*) m_frames.Item(frame)->GetData() ; @@ -417,7 +416,7 @@ wxImage* wxGIFAnimation::GetFrame(int i) const { wxASSERT_MSG( (m_decoder != (wxGIFDecoder*) NULL), _T("m_decoder must be non-NULL")); - m_decoder->GoFrame(i); + m_decoder->GoFrame(i + 1); wxImage* image = new wxImage; m_decoder->ConvertToImage(image); @@ -428,7 +427,7 @@ wxAnimationDisposal wxGIFAnimation::GetDisposalMethod(int i) const { wxASSERT_MSG( (m_decoder != (wxGIFDecoder*) NULL), _T("m_decoder must be non-NULL")); - m_decoder->GoFrame(i); + m_decoder->GoFrame(i + 1); int disposalMethod = m_decoder->GetDisposalMethod(); return (wxAnimationDisposal) disposalMethod; @@ -438,7 +437,7 @@ wxRect wxGIFAnimation::GetFrameRect(int i) const { wxASSERT_MSG( (m_decoder != (wxGIFDecoder*) NULL), _T("m_decoder must be non-NULL")); - m_decoder->GoFrame(i); + m_decoder->GoFrame(i + 1); wxRect rect(m_decoder->GetLeft(), m_decoder->GetTop(), m_decoder->GetWidth(), m_decoder->GetHeight()); return rect; @@ -448,7 +447,7 @@ int wxGIFAnimation::GetDelay(int i) const { wxASSERT_MSG( (m_decoder != (wxGIFDecoder*) NULL), _T("m_decoder must be non-NULL")); - m_decoder->GoFrame(i); + m_decoder->GoFrame(i + 1); return m_decoder->GetDelay(); } @@ -573,6 +572,8 @@ bool wxAnimationCtrlBase::Create(wxWindow *parent, wxWindowID id, m_animationPlayer.SetPosition(wxPoint(0, 0)); m_animationPlayer.SetDestroyAnimation(FALSE); + LoadFile(filename); + return TRUE; }