]> git.saurik.com Git - wxWidgets.git/commitdiff
wxAnimationCtrl fix to display inactive bitmap at start (patch 1590192)
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 3 Nov 2006 22:16:51 +0000 (22:16 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 3 Nov 2006 22:16:51 +0000 (22:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/animate.h
src/common/animatecmn.cpp
src/generic/animateg.cpp
src/gtk/animate.cpp

index 583b1afc74eab829baa1f5844bdfde3a8e282500..d228b37f19286e40d3a65d5a8e3639d57697580e 100644 (file)
@@ -82,7 +82,7 @@ public:     // public API
 
     virtual bool IsPlaying() const = 0;
 
-    virtual void SetInactiveBitmap(const wxBitmap &bmp);
+    virtual void SetInactiveBitmap(const wxBitmap &bmp) = 0;
     wxBitmap GetInactiveBitmap() const
         { return m_bmpStatic; }
 
index e9c0b8678a2d85753c23d81f47ee3cbe921081e7..512c309942765e9b2a0ffbdd880217159bd81735 100644 (file)
@@ -30,11 +30,5 @@ wxAnimation wxNullAnimation;
 IMPLEMENT_ABSTRACT_CLASS(wxAnimationBase, wxObject)
 IMPLEMENT_ABSTRACT_CLASS(wxAnimationCtrlBase, wxControl)
 
-void wxAnimationCtrlBase::SetInactiveBitmap(const wxBitmap &bmp)
-{ 
-    m_bmpStatic = bmp; 
-    m_bmpStatic.UnShare();
-}
-
 
 #endif      // wxUSE_ANIMATIONCTRL
index 2035cbb4f4b665900d77c7a0972600e2d1561801..8daee51ebf0e145887a69ccc79c42853bf8069d3 100644 (file)
@@ -343,7 +343,7 @@ void wxAnimationCtrl::SetAnimation(const wxAnimation& animation)
 
 void wxAnimationCtrl::SetInactiveBitmap(const wxBitmap &bmp)
 {
-    wxAnimationCtrlBase::SetInactiveBitmap(bmp);
+    m_bmpStatic = bmp;
 
     // if not playing, update the backing store now
     if (!IsPlaying())
@@ -630,10 +630,21 @@ void wxAnimationCtrl::OnSize(wxSizeEvent &WXUNUSED(event))
 {
     // NB: resizing an animation control may take a lot of time
     //     for big animations as the backing store must be
-    //     extended and rebuilt. Try to avoid it!!
+    //     extended and rebuilt. Try to avoid it e.g. using
+    //     a null proportion value for your wxAnimationCtrls
+    //     when using them inside sizers.
     if (m_animation.IsOk())
+    {
+        // be careful to change the backing store *only* if we are 
+        // playing the animation as otherwise we may be displaying 
+        // the inactive bitmap and overwriting the backing store 
+        // with the last played frame is wrong in this case
+        if (IsPlaying())
+        {
         if (!RebuildBackingStoreUpToFrame(m_currentFrame))
             Stop();     // in case we are playing
+        }
+    }
 }
 
 #endif      // wxUSE_ANIMATIONCTRL
index 7b3b798c00ae796e492ca4d4122cb1bb44d8e93b..05285756e62ed4d64dffbb6970b664edf436f208 100644 (file)
@@ -320,7 +320,7 @@ void wxAnimationCtrl::Stop()
 
 void wxAnimationCtrl::SetInactiveBitmap(const wxBitmap &bmp)
 {
-    wxAnimationCtrlBase::SetInactiveBitmap(bmp);
+    m_bmpStatic = bmp;
 
     // update the pixbuf associated with m_widget now...
     if (!IsPlaying())