]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/animate.cpp
Removed GetAdjustedBestSize().
[wxWidgets.git] / src / gtk / animate.cpp
index 1eb6239e95387d22cf043efd382cf8f33a0781f1..23b88a192da725945379d54ce6985abce26df537 100644 (file)
@@ -12,7 +12,7 @@
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
-#if wxUSE_ANIMATIONCTRL
+#if wxUSE_ANIMATIONCTRL && !defined(__WXUNIVERSAL__)
 
 #include "wx/animate.h"
 
 
 #include "wx/animate.h"
 
@@ -117,7 +117,6 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type)
     // connect to loader signals
     g_signal_connect(loader, "area-updated", G_CALLBACK(gdk_pixbuf_area_updated), this);
 
     // connect to loader signals
     g_signal_connect(loader, "area-updated", G_CALLBACK(gdk_pixbuf_area_updated), this);
 
-    //m_bLoadComplete = false;
     guchar buf[2048];
     while (stream.IsOk())
     {
     guchar buf[2048];
     while (stream.IsOk())
     {
@@ -139,7 +138,6 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type)
         wxLogDebug(wxT("Could not close the loader"));
         return false;
     }
         wxLogDebug(wxT("Could not close the loader"));
         return false;
     }
-    //m_bLoadComplete = true;
 
     // wait until we get the last area_updated signal
     return true;
 
     // wait until we get the last area_updated signal
     return true;
@@ -180,7 +178,7 @@ BEGIN_EVENT_TABLE(wxAnimationCtrl, wxAnimationCtrlBase)
     EVT_TIMER(wxID_ANY, wxAnimationCtrl::OnTimer)
 END_EVENT_TABLE()
 
     EVT_TIMER(wxID_ANY, wxAnimationCtrl::OnTimer)
 END_EVENT_TABLE()
 
-wxAnimationCtrl::wxAnimationCtrl()
+void wxAnimationCtrl::Init()
 {
     m_anim = NULL;
     m_iter = NULL;
 {
     m_anim = NULL;
     m_iter = NULL;
@@ -215,9 +213,6 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id,
     PostCreation(size);
     SetBestSize(size);
 
     PostCreation(size);
     SetBestSize(size);
 
-    m_anim = NULL;
-    m_iter = NULL;
-    m_bPlaying = false;
     if (anim != wxNullAnimation)
         SetAnimation(anim);
 
     if (anim != wxNullAnimation)
         SetAnimation(anim);
 
@@ -262,16 +257,9 @@ void wxAnimationCtrl::SetAnimation(const wxAnimation &anim)
 
         if (!this->HasFlag(wxAC_NO_AUTORESIZE))
             FitToAnimation();
 
         if (!this->HasFlag(wxAC_NO_AUTORESIZE))
             FitToAnimation();
-
-        // display first frame
-        gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
-                                  gdk_pixbuf_animation_get_static_image(m_anim));
-    }
-    else
-    {
-        // we need to clear the control to the background colour
-        ClearToBackgroundColour();
     }
     }
+
+    DisplayStaticImage();
 }
 
 void wxAnimationCtrl::FitToAnimation()
 }
 
 void wxAnimationCtrl::FitToAnimation()
@@ -283,8 +271,6 @@ 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
-    //if (w > 0 && h > 0)
-//        gtk_widget_set_size_request(m_widget, w, h);
         SetSize(w, h);
 }
 
         SetSize(w, h);
 }
 
@@ -327,6 +313,56 @@ void wxAnimationCtrl::Stop()
     if (IsPlaying())
         m_timer.Stop();
     m_bPlaying = false;
     if (IsPlaying())
         m_timer.Stop();
     m_bPlaying = false;
+
+    ResetIter();
+    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());
+
+    if (m_bmpStatic.IsOk())
+    {
+        // show inactive bitmap
+        GdkBitmap *mask = (GdkBitmap *) NULL;
+        if (m_bmpStatic.GetMask())
+            mask = m_bmpStatic.GetMask()->GetBitmap();
+
+        if (m_bmpStatic.HasPixbuf())
+        {
+            gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
+                                        m_bmpStatic.GetPixbuf());
+        }
+        else
+        {
+            gtk_image_set_from_pixmap(GTK_IMAGE(m_widget),
+                                        m_bmpStatic.GetPixmap(), mask);
+        }
+    }
+    else
+    {
+        if (m_anim)
+        {
+            // even if not clearly documented, gdk_pixbuf_animation_get_static_image()
+            // always returns the first frame of the animation
+            gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
+                                        gdk_pixbuf_animation_get_static_image(m_anim));
+        }
+        else
+        {
+            ClearToBackgroundColour();
+        }
+    }
 }
 
 bool wxAnimationCtrl::IsPlaying() const
 }
 
 bool wxAnimationCtrl::IsPlaying() const
@@ -361,8 +397,6 @@ void wxAnimationCtrl::ClearToBackgroundColour()
     guint32 col = (clr.Red() << 24) | (clr.Green() << 16) | (clr.Blue() << 8);
     gdk_pixbuf_fill(newpix, col);
 
     guint32 col = (clr.Red() << 24) | (clr.Green() << 16) | (clr.Blue() << 8);
     gdk_pixbuf_fill(newpix, col);
 
-    wxLogDebug(wxT("Clearing to background %s"), clr.GetAsString().c_str());
-
     gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget), newpix);
     g_object_unref(newpix);
 }
     gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget), newpix);
     g_object_unref(newpix);
 }