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)
return true;
}
-wxImage wxAnimation::GetFrame(size_t i) const
+wxImage wxAnimation::GetFrame(unsigned int WXUNUSED(frame)) const
{
return wxNullImage;
}
m_parent->DoAddChild( this );
PostCreation(size);
- SetBestSize(size);
+ SetInitialSize(size);
if (anim.IsOk())
SetAnimation(anim);
h = gdk_pixbuf_animation_get_height(m_anim);
// update our size to fit animation
- SetSize(w, h);
+ SetSize(w, h);
}
void wxAnimationCtrl::ResetAnim()
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())
+ // m_bmpStaticReal will be updated only if necessary...
+ UpdateStaticImage();
+
+ if (m_bmpStaticReal.IsOk())
{
// 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),
- m_bmpStatic.GetPixbuf());
+ m_bmpStaticReal.GetPixbuf());
}
else
{
gtk_image_set_from_pixmap(GTK_IMAGE(m_widget),
- m_bmpStatic.GetPixmap(), mask);
+ m_bmpStaticReal.GetPixmap(), mask);
}
}
else
// 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;
}