X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/72045d5768a126191a907bc640c28e81a11afdd6..8de3594cdd735fc5d58a657a4d0c9005fd54c5de:/src/gtk/animate.cpp diff --git a/src/gtk/animate.cpp b/src/gtk/animate.cpp index df942e3c1a..cf7fa686a3 100644 --- a/src/gtk/animate.cpp +++ b/src/gtk/animate.cpp @@ -9,19 +9,20 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #if wxUSE_ANIMATIONCTRL #include "wx/animate.h" + +#ifndef WX_PRECOMP + #include "wx/image.h" + #include "wx/log.h" + #include "wx/stream.h" +#endif + #include -#include // ============================================================================ @@ -50,10 +51,32 @@ void gdk_pixbuf_area_updated(GdkPixbufLoader *loader, IMPLEMENT_DYNAMIC_CLASS(wxAnimation, wxAnimationBase) +wxAnimation::wxAnimation(const wxAnimation& that) + : base_type(that) +{ + m_pixbuf = that.m_pixbuf; + if (m_pixbuf) + g_object_ref(m_pixbuf); +} + +wxAnimation& wxAnimation::operator=(const wxAnimation& that) +{ + if (this != &that) + { + base_type::operator=(that); + UnRef(); + m_pixbuf = that.m_pixbuf; + if (m_pixbuf) + g_object_ref(m_pixbuf); + } + return *this; +} + bool wxAnimation::LoadFile(const wxString &name, wxAnimationType WXUNUSED(type)) { UnRef(); - m_pixbuf = gdk_pixbuf_animation_new_from_file(name.c_str(), NULL); + m_pixbuf = gdk_pixbuf_animation_new_from_file( + wxConvFileName->cWX2MB(name), NULL); return IsOk(); } @@ -73,6 +96,7 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) break; default: + anim_type[0] = '\0'; break; } @@ -98,7 +122,7 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) while (stream.IsOk()) { // read a chunk of data - stream.Read(buf, 2048); + stream.Read(buf, sizeof(buf)); // fetch all data into the loader if (!gdk_pixbuf_loader_write(loader, buf, stream.LastRead(), &error)) @@ -121,6 +145,31 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) return true; } +wxImage wxAnimation::GetFrame(size_t i) const +{ + return wxNullImage; +} + +wxSize wxAnimation::GetSize() const +{ + return wxSize(gdk_pixbuf_animation_get_width(m_pixbuf), + gdk_pixbuf_animation_get_height(m_pixbuf)); +} + +void wxAnimation::UnRef() +{ + if (m_pixbuf) + g_object_unref(m_pixbuf); + m_pixbuf = NULL; +} + +void wxAnimation::SetPixbuf(GdkPixbufAnimation* p) +{ + UnRef(); + m_pixbuf = p; + if (m_pixbuf) + g_object_ref(m_pixbuf); +} //----------------------------------------------------------------------------- // wxAnimationCtrl @@ -131,6 +180,13 @@ BEGIN_EVENT_TABLE(wxAnimationCtrl, wxAnimationCtrlBase) EVT_TIMER(wxID_ANY, wxAnimationCtrl::OnTimer) END_EVENT_TABLE() +void wxAnimationCtrl::Init() +{ + m_anim = NULL; + m_iter = NULL; + m_bPlaying = false; +} + bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, const wxAnimation& anim, const wxPoint& pos, @@ -142,7 +198,7 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, m_acceptsFocus = true; if (!PreCreation( parent, pos, size ) || - !wxControl::CreateBase(parent, id, pos, size, style & wxWINDOW_STYLE_MASK, + !base_type::CreateBase(parent, id, pos, size, style & wxWINDOW_STYLE_MASK, wxDefaultValidator, name)) { wxFAIL_MSG( wxT("wxAnimationCtrl creation failed") ); @@ -159,9 +215,6 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, PostCreation(size); SetBestSize(size); - m_anim = NULL; - m_iter = NULL; - m_bPlaying = false; if (anim != wxNullAnimation) SetAnimation(anim); @@ -232,6 +285,20 @@ void wxAnimationCtrl::FitToAnimation() SetSize(w, h); } +void wxAnimationCtrl::ResetAnim() +{ + if (m_anim) + g_object_unref(m_anim); + m_anim = NULL; +} + +void wxAnimationCtrl::ResetIter() +{ + if (m_iter) + g_object_unref(m_iter); + m_iter = NULL; +} + bool wxAnimationCtrl::Play() { if (m_anim == NULL)