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