// Author: Julian Smart and Guillermo Rodriguez Garcia
// Modified by: Francesco Montorsi
// Created: 13/8/99
-// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_GTKANIMATEH__
#define _WX_GTKANIMATEH__
-#include "wx/defs.h"
-#include <gdk-pixbuf/gdk-pixbuf.h>
+typedef struct _GdkPixbufAnimation GdkPixbufAnimation;
+typedef struct _GdkPixbufAnimationIter GdkPixbufAnimationIter;
// ----------------------------------------------------------------------------
// wxAnimation
// refcounted so that assignment is very fast
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxAnimation : public wxAnimationBase
+class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase
{
public:
- wxAnimation(const wxAnimation &tocopy)
- { m_pixbuf=tocopy.m_pixbuf; if (m_pixbuf) g_object_ref(m_pixbuf); }
- wxAnimation(GdkPixbufAnimation *p = NULL)
- { m_pixbuf=p; }
- ~wxAnimation()
- { UnRef(); }
-
- wxAnimation &operator= (const wxAnimation &tocopy)
- {
- m_pixbuf=tocopy.m_pixbuf;
- if (m_pixbuf) g_object_ref(m_pixbuf);
- return *this;
- }
-
- bool operator == (const wxAnimation& anim) const
- { return m_pixbuf == anim.m_pixbuf; }
- bool operator != (const wxAnimation& anim) const
- { return m_pixbuf != anim.m_pixbuf; }
+ wxAnimation(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY)
+ : m_pixbuf(NULL) { LoadFile(name, type); }
+ wxAnimation(GdkPixbufAnimation *p = NULL);
+ wxAnimation(const wxAnimation&);
+ ~wxAnimation() { UnRef(); }
+
+ wxAnimation& operator= (const wxAnimation&);
virtual bool IsOk() const
{ return m_pixbuf != NULL; }
// unfortunately GdkPixbufAnimation does not expose these info:
- virtual size_t GetFrameCount() const
- { return 0; }
- virtual wxImage GetFrame(size_t i) const
- { return wxNullImage; }
+ virtual unsigned int GetFrameCount() const { return 0; }
+ virtual wxImage GetFrame(unsigned int frame) const;
// we can retrieve the delay for a frame only after building
// a GdkPixbufAnimationIter...
- virtual int GetDelay(size_t i) const
- { return 0; }
+ virtual int GetDelay(unsigned int WXUNUSED(frame)) const { return 0; }
- virtual wxSize GetSize() const
- { return wxSize(gdk_pixbuf_animation_get_width(m_pixbuf),
- gdk_pixbuf_animation_get_height(m_pixbuf)); }
+ virtual wxSize GetSize() const;
virtual bool LoadFile(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY);
virtual bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY);
- void UnRef()
- {
- if (m_pixbuf)
- g_object_unref(m_pixbuf);
- m_pixbuf = NULL;
- }
-
+ // Implementation
public: // used by GTK callbacks
GdkPixbufAnimation *GetPixbuf() const
{ return m_pixbuf; }
- void SetPixbuf(GdkPixbufAnimation *p)
- { m_pixbuf=p; if (m_pixbuf) g_object_ref(m_pixbuf); }
+ void SetPixbuf(GdkPixbufAnimation* p);
protected:
GdkPixbufAnimation *m_pixbuf;
- // used temporary by Load()
- //bool m_bLoadComplete;
+private:
+ void UnRef();
-protected:
+ typedef wxAnimationBase base_type;
DECLARE_DYNAMIC_CLASS(wxAnimation)
};
-
// ----------------------------------------------------------------------------
// wxAnimationCtrl
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase
{
public:
- wxAnimationCtrl() {}
+ wxAnimationCtrl() { Init(); }
wxAnimationCtrl(wxWindow *parent,
wxWindowID id,
const wxAnimation& anim = wxNullAnimation,
long style = wxAC_DEFAULT_STYLE,
const wxString& name = wxAnimationCtrlNameStr)
{
+ Init();
+
Create(parent, id, anim, pos, size, style, name);
}
public: // public API
virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY);
+ virtual bool Load(wxInputStream& stream, wxAnimationType type = wxANIMATION_TYPE_ANY);
virtual void SetAnimation(const wxAnimation &anim);
virtual wxAnimation GetAnimation() const
protected:
+ virtual void DisplayStaticImage();
virtual wxSize DoGetBestSize() const;
void FitToAnimation();
void ClearToBackgroundColour();
- void ResetAnim()
- {
- if (m_anim)
- g_object_unref(m_anim);
- m_anim = NULL;
- }
-
- void ResetIter()
- {
- if (m_iter)
- g_object_unref(m_iter);
- m_iter = NULL;
- }
+ void ResetAnim();
+ void ResetIter();
protected: // internal vars
bool m_bPlaying;
private:
+ typedef wxAnimationCtrlBase base_type;
+
+ void Init();
+
DECLARE_DYNAMIC_CLASS(wxAnimationCtrl)
DECLARE_EVENT_TABLE()
};