fixes for animated GIFs playing (patch 1097003)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31683 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-01-31 22:21:11 +00:00
parent be575a0160
commit 6b5403c8d6
2 changed files with 11 additions and 9 deletions

View File

@@ -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 // Draw all intermediate frames that haven't been removed from the
// animation // animation
int i; int i;
for (i = 0; i < (frame - 1); i++) for (i = 0; i < frame; i++)
{ {
if ((GetDisposalMethod(i) == wxANIM_DONOTREMOVE) || (GetDisposalMethod(i) == wxANIM_UNSPECIFIED)) 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")); 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; wxImage* image = new wxImage;
m_decoder->ConvertToImage(image); 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")); 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(); int disposalMethod = m_decoder->GetDisposalMethod();
return (wxAnimationDisposal) disposalMethod; 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")); 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()); wxRect rect(m_decoder->GetLeft(), m_decoder->GetTop(), m_decoder->GetWidth(), m_decoder->GetHeight());
return rect; 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")); 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(); return m_decoder->GetDelay();
} }

View File

@@ -271,17 +271,19 @@ bool wxGIFDecoder::GoPrevFrame(bool cyclic)
bool wxGIFDecoder::GoFrame(int which) bool wxGIFDecoder::GoFrame(int which)
{ {
int i;
if (!IsAnimation()) if (!IsAnimation())
return false; return false;
if ((which >= 1) && (which <= m_nimages)) if ((which >= 1) && (which <= m_nimages))
{ {
m_image = 1;
m_pimage = m_pfirst; m_pimage = m_pfirst;
for (i = 0; i < which; i++) while (m_image < which)
{
m_image++;
m_pimage = m_pimage->next; m_pimage = m_pimage->next;
}
return true; return true;
} }
@@ -752,7 +754,7 @@ int wxGIFDecoder::ReadGIF()
transparent = buf[4]; transparent = buf[4];
/* read disposal method */ /* read disposal method */
disposal = (buf[1] & 0x1C) - 1; disposal = ((buf[1] & 0x1C) >> 2) - 1;
} }
else else
/* other extension, skip */ /* other extension, skip */