From: Vadim Zeitlin Date: Mon, 31 Jan 2005 22:21:11 +0000 (+0000) Subject: fixes for animated GIFs playing (patch 1097003) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6b5403c8d65be699529995d221c3119f1da353c8 fixes for animated GIFs playing (patch 1097003) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31683 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/contrib/src/animate/animate.cpp b/contrib/src/animate/animate.cpp index 2bca70edb8..5c687f927a 100644 --- a/contrib/src/animate/animate.cpp +++ b/contrib/src/animate/animate.cpp @@ -245,7 +245,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)) { @@ -416,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); @@ -427,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; @@ -437,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; @@ -447,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(); } diff --git a/src/common/gifdecod.cpp b/src/common/gifdecod.cpp index c9cfe9b16e..f49f473d3b 100644 --- a/src/common/gifdecod.cpp +++ b/src/common/gifdecod.cpp @@ -271,17 +271,19 @@ bool wxGIFDecoder::GoPrevFrame(bool cyclic) bool wxGIFDecoder::GoFrame(int which) { - int i; - if (!IsAnimation()) return false; if ((which >= 1) && (which <= m_nimages)) { + m_image = 1; m_pimage = m_pfirst; - for (i = 0; i < which; i++) + while (m_image < which) + { + m_image++; m_pimage = m_pimage->next; + } return true; } @@ -752,7 +754,7 @@ int wxGIFDecoder::ReadGIF() transparent = buf[4]; /* read disposal method */ - disposal = (buf[1] & 0x1C) - 1; + disposal = ((buf[1] & 0x1C) >> 2) - 1; } else /* other extension, skip */