X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1afdfc9debf357b7d53ce60c97bfa64c983cfa64..9cce71a0f949c227c2c2ad53d700eca16af92cbe:/src/generic/animateg.cpp diff --git a/src/generic/animateg.cpp b/src/generic/animateg.cpp index 2794e1a08f..d860f2d487 100644 --- a/src/generic/animateg.cpp +++ b/src/generic/animateg.cpp @@ -51,14 +51,14 @@ wxSize wxAnimation::GetSize() const return M_ANIMDATA->GetAnimationSize(); } -size_t wxAnimation::GetFrameCount() const +unsigned int wxAnimation::GetFrameCount() const { wxCHECK_MSG( IsOk(), 0, wxT("invalid animation") ); return M_ANIMDATA->GetFrameCount(); } -wxImage wxAnimation::GetFrame(size_t i) const +wxImage wxAnimation::GetFrame(unsigned int i) const { wxCHECK_MSG( IsOk(), wxNullImage, wxT("invalid animation") ); @@ -68,35 +68,35 @@ wxImage wxAnimation::GetFrame(size_t i) const return ret; } -int wxAnimation::GetDelay(size_t i) const +int wxAnimation::GetDelay(unsigned int i) const { wxCHECK_MSG( IsOk(), 0, wxT("invalid animation") ); return M_ANIMDATA->GetDelay(i); } -wxPoint wxAnimation::GetFramePosition(size_t frame) const +wxPoint wxAnimation::GetFramePosition(unsigned int frame) const { wxCHECK_MSG( IsOk(), wxDefaultPosition, wxT("invalid animation") ); return M_ANIMDATA->GetFramePosition(frame); } -wxSize wxAnimation::GetFrameSize(size_t frame) const +wxSize wxAnimation::GetFrameSize(unsigned int frame) const { wxCHECK_MSG( IsOk(), wxDefaultSize, wxT("invalid animation") ); return M_ANIMDATA->GetFrameSize(frame); } -wxAnimationDisposal wxAnimation::GetDisposalMethod(size_t frame) const +wxAnimationDisposal wxAnimation::GetDisposalMethod(unsigned int frame) const { wxCHECK_MSG( IsOk(), wxANIM_UNSPECIFIED, wxT("invalid animation") ); return M_ANIMDATA->GetDisposalMethod(frame); } -wxColour wxAnimation::GetTransparentColour(size_t frame) const +wxColour wxAnimation::GetTransparentColour(unsigned int frame) const { wxCHECK_MSG( IsOk(), wxNullColour, wxT("invalid animation") ); @@ -147,10 +147,6 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) handler = FindHandler(type); - // do a copy of the handler from the static list which we will own - // as our reference data - m_refData = handler->Clone(); - if (handler == NULL) { wxLogWarning( _("No animation handler for type %ld defined."), type ); @@ -158,6 +154,11 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) return false; } + + // do a copy of the handler from the static list which we will own + // as our reference data + m_refData = handler->Clone(); + if (stream.IsSeekable() && !M_ANIMDATA->CanRead(stream)) { wxLogError(_("Animation file is not of type %ld."), type); @@ -254,8 +255,8 @@ class wxAnimationModule: public wxModule DECLARE_DYNAMIC_CLASS(wxAnimationModule) public: wxAnimationModule() {} - bool OnInit() { wxAnimation::InitStandardHandlers(); return true; }; - void OnExit() { wxAnimation::CleanUpHandlers(); }; + bool OnInit() { wxAnimation::InitStandardHandlers(); return true; } + void OnExit() { wxAnimation::CleanUpHandlers(); } }; IMPLEMENT_DYNAMIC_CLASS(wxAnimationModule, wxModule) @@ -333,7 +334,7 @@ void wxAnimationCtrl::SetAnimation(const wxAnimation& animation) m_animation = animation; if (!m_animation.IsOk()) { - UpdateBackingStoreWithStaticImage(); + DisplayStaticImage(); return; } @@ -342,13 +343,11 @@ void wxAnimationCtrl::SetAnimation(const wxAnimation& animation) if (!this->HasFlag(wxAC_NO_AUTORESIZE)) FitToAnimation(); - UpdateBackingStoreWithStaticImage(); + DisplayStaticImage(); } void wxAnimationCtrl::SetInactiveBitmap(const wxBitmap &bmp) { - m_bmpStatic = bmp; - // if the bitmap has an associated mask, we need to set our background to // the colour of our parent otherwise when calling DrawCurrentFrame() // (which uses the bitmap's mask), our background colour would be used for @@ -357,9 +356,7 @@ void wxAnimationCtrl::SetInactiveBitmap(const wxBitmap &bmp) if ( bmp.GetMask() != NULL && GetParent() != NULL ) SetBackgroundColour(GetParent()->GetBackgroundColour()); - // if not playing, update the backing store now - if ( !IsPlaying() ) - UpdateBackingStoreWithStaticImage(); + wxAnimationCtrlBase::SetInactiveBitmap(bmp); } void wxAnimationCtrl::FitToAnimation() @@ -375,7 +372,7 @@ bool wxAnimationCtrl::SetBackgroundColour(const wxColour& colour) // if not playing, then this change must be seen immediately (unless // there's an inactive bitmap set which has higher priority than bg colour) if ( !IsPlaying() ) - UpdateBackingStoreWithStaticImage(); + DisplayStaticImage(); return true; } @@ -393,7 +390,7 @@ void wxAnimationCtrl::Stop() // reset frame counter m_currentFrame = 0; - UpdateBackingStoreWithStaticImage(); + DisplayStaticImage(); } bool wxAnimationCtrl::Play(bool looped) @@ -432,7 +429,7 @@ bool wxAnimationCtrl::Play(bool looped) // wxAnimationCtrl - rendering methods // ---------------------------------------------------------------------------- -bool wxAnimationCtrl::RebuildBackingStoreUpToFrame(size_t frame) +bool wxAnimationCtrl::RebuildBackingStoreUpToFrame(unsigned int frame) { // if we've not created the backing store yet or it's too // small, then recreate it @@ -455,7 +452,7 @@ bool wxAnimationCtrl::RebuildBackingStoreUpToFrame(size_t frame) DisposeToBackground(dc); // Draw all intermediate frames that haven't been removed from the animation - for (size_t i = 0; i < frame; i++) + for (unsigned int i = 0; i < frame; i++) { if (m_animation.GetDisposalMethod(i) == wxANIM_DONOTREMOVE || m_animation.GetDisposalMethod(i) == wxANIM_UNSPECIFIED) @@ -526,23 +523,26 @@ void wxAnimationCtrl::IncrementalUpdateBackingStore() dc.SelectObject(wxNullBitmap); } -void wxAnimationCtrl::UpdateBackingStoreWithStaticImage() +void wxAnimationCtrl::DisplayStaticImage() { wxASSERT(!IsPlaying()); - if (m_bmpStatic.IsOk()) + // m_bmpStaticReal will be updated only if necessary... + UpdateStaticImage(); + + if (m_bmpStaticReal.IsOk()) { // copy the inactive bitmap in the backing store // eventually using the mask if the static bitmap has one - if ( m_bmpStatic.GetMask() ) + if ( m_bmpStaticReal.GetMask() ) { wxMemoryDC temp; temp.SelectObject(m_backingStore); DisposeToBackground(temp); - temp.DrawBitmap(m_bmpStatic, 0, 0, true /* use mask */); + temp.DrawBitmap(m_bmpStaticReal, 0, 0, true /* use mask */); } else - m_backingStore = m_bmpStatic; + m_backingStore = m_bmpStaticReal; } else { @@ -558,7 +558,7 @@ void wxAnimationCtrl::UpdateBackingStoreWithStaticImage() Refresh(); } -void wxAnimationCtrl::DrawFrame(wxDC &dc, size_t frame) +void wxAnimationCtrl::DrawFrame(wxDC &dc, unsigned int frame) { // PERFORMANCE NOTE: // this draw stuff is not as fast as possible: the wxAnimationDecoder @@ -584,7 +584,8 @@ void wxAnimationCtrl::DisposeToBackground() // clear the backing store wxMemoryDC dc; dc.SelectObject(m_backingStore); - DisposeToBackground(dc); + if ( dc.IsOk() ) + DisposeToBackground(dc); } void wxAnimationCtrl::DisposeToBackground(wxDC& dc)