]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/animate.cpp
Check for G_FILENAME_ENCODING=@locale case insensitively.
[wxWidgets.git] / src / gtk / animate.cpp
index 23b88a192da725945379d54ce6985abce26df537..e3c6b9dc004b4f546da6594a6902cb72d4c83ce9 100644 (file)
@@ -59,6 +59,13 @@ wxAnimation::wxAnimation(const wxAnimation& that)
         g_object_ref(m_pixbuf);
 }
 
         g_object_ref(m_pixbuf);
 }
 
+wxAnimation::wxAnimation(GdkPixbufAnimation *p)
+{
+    m_pixbuf = p;
+    if ( m_pixbuf )
+        g_object_ref(m_pixbuf);
+}
+
 wxAnimation& wxAnimation::operator=(const wxAnimation& that)
 {
     if (this != &that)
 wxAnimation& wxAnimation::operator=(const wxAnimation& that)
 {
     if (this != &that)
@@ -211,9 +218,9 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id,
     m_parent->DoAddChild( this );
 
     PostCreation(size);
     m_parent->DoAddChild( this );
 
     PostCreation(size);
-    SetBestSize(size);
+    SetInitialSize(size);
 
 
-    if (anim != wxNullAnimation)
+    if (anim.IsOk())
         SetAnimation(anim);
 
     // init the timer used for animation
         SetAnimation(anim);
 
     // init the timer used for animation
@@ -271,7 +278,7 @@ void wxAnimationCtrl::FitToAnimation()
         h = gdk_pixbuf_animation_get_height(m_anim);
 
     // update our size to fit animation
         h = gdk_pixbuf_animation_get_height(m_anim);
 
     // update our size to fit animation
-        SetSize(w, h);
+    SetSize(w, h);
 }
 
 void wxAnimationCtrl::ResetAnim()
 }
 
 void wxAnimationCtrl::ResetAnim()
@@ -318,35 +325,29 @@ void wxAnimationCtrl::Stop()
     DisplayStaticImage();
 }
 
     DisplayStaticImage();
 }
 
-void wxAnimationCtrl::SetInactiveBitmap(const wxBitmap &bmp)
-{
-    wxAnimationCtrlBase::SetInactiveBitmap(bmp);
-
-    // update the pixbuf associated with m_widget now...
-    if (!IsPlaying())
-        DisplayStaticImage();
-}
-
 void wxAnimationCtrl::DisplayStaticImage()
 {
     wxASSERT(!IsPlaying());
 
 void wxAnimationCtrl::DisplayStaticImage()
 {
     wxASSERT(!IsPlaying());
 
-    if (m_bmpStatic.IsOk())
+    // m_bmpStaticReal will be updated only if necessary...
+    UpdateStaticImage();
+
+    if (m_bmpStaticReal.IsOk())
     {
         // show inactive bitmap
         GdkBitmap *mask = (GdkBitmap *) NULL;
     {
         // show inactive bitmap
         GdkBitmap *mask = (GdkBitmap *) NULL;
-        if (m_bmpStatic.GetMask())
-            mask = m_bmpStatic.GetMask()->GetBitmap();
+        if (m_bmpStaticReal.GetMask())
+            mask = m_bmpStaticReal.GetMask()->GetBitmap();
 
 
-        if (m_bmpStatic.HasPixbuf())
+        if (m_bmpStaticReal.HasPixbuf())
         {
             gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
         {
             gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
-                                        m_bmpStatic.GetPixbuf());
+                                      m_bmpStaticReal.GetPixbuf());
         }
         else
         {
             gtk_image_set_from_pixmap(GTK_IMAGE(m_widget),
         }
         else
         {
             gtk_image_set_from_pixmap(GTK_IMAGE(m_widget),
-                                        m_bmpStatic.GetPixmap(), mask);
+                                      m_bmpStaticReal.GetPixmap(), mask);
         }
     }
     else
         }
     }
     else
@@ -408,7 +409,13 @@ bool wxAnimationCtrl::SetBackgroundColour( const wxColour &colour )
     // Thus we clear the GtkImage contents to the background colour...
     if (!wxControl::SetBackgroundColour(colour))
         return false;
     // Thus we clear the GtkImage contents to the background colour...
     if (!wxControl::SetBackgroundColour(colour))
         return false;
-    ClearToBackgroundColour();
+
+    // if not playing the change must take place immediately but
+    // remember that the inactive bitmap has higher priority over the background
+    // colour; DisplayStaticImage() will handle that
+    if ( !IsPlaying() )
+        DisplayStaticImage();
+
     return true;
 }
 
     return true;
 }