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
// 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();
}

View File

@@ -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 */