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:
@@ -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();
|
||||
}
|
||||
|
||||
|
@@ -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 */
|
||||
|
Reference in New Issue
Block a user