X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e458bb53997706d4432d2dc0b9b516320709389..0a95d3369e08206a43032472418693f7726591e5:/src/gtk/animate.cpp?ds=sidebyside diff --git a/src/gtk/animate.cpp b/src/gtk/animate.cpp index a2e17e22aa..e6e6b8b0f9 100644 --- a/src/gtk/animate.cpp +++ b/src/gtk/animate.cpp @@ -59,6 +59,13 @@ wxAnimation::wxAnimation(const wxAnimation& that) 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) @@ -143,7 +150,7 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) return true; } -wxImage wxAnimation::GetFrame(size_t i) const +wxImage wxAnimation::GetFrame(unsigned int WXUNUSED(frame)) const { return wxNullImage; } @@ -211,9 +218,9 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, m_parent->DoAddChild( this ); PostCreation(size); - SetBestSize(size); + SetInitialSize(size); - if (anim != wxNullAnimation) + if (anim.IsOk()) 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 - SetSize(w, h); + SetSize(w, h); } void wxAnimationCtrl::ResetAnim() @@ -318,43 +325,44 @@ void wxAnimationCtrl::Stop() 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 { - // 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)); + 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(); + } } } @@ -401,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; - 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; }