1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/gtk/animate.h 3 // Purpose: Animation classes 4 // Author: Julian Smart and Guillermo Rodriguez Garcia 5 // Modified by: Francesco Montorsi 6 // Created: 13/8/99 7 // RCS-ID: $Id: animate.h 58350 2009-01-24 10:00:38Z FM $ 8 // Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_GTKANIMATEH__ 13 #define _WX_GTKANIMATEH__ 14 15 typedef struct _GdkPixbufAnimation GdkPixbufAnimation; 16 typedef struct _GdkPixbufAnimationIter GdkPixbufAnimationIter; 17 18 // ---------------------------------------------------------------------------- 19 // wxAnimation 20 // Unlike the generic wxAnimation object (see generic\animate.cpp), we won't 21 // use directly wxAnimationHandlers as gdk-pixbuf already provides the 22 // concept of handler and will automatically use the available handlers. 23 // Like generic wxAnimation object, this implementation of wxAnimation is 24 // refcounted so that assignment is very fast 25 // ---------------------------------------------------------------------------- 26 27 class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase 28 { 29 public: 30 #if wxABI_VERSION >= 20810 31 wxAnimation(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY) m_pixbuf(NULL)32 : m_pixbuf(NULL) { LoadFile(name, type); } 33 #endif 34 wxAnimation(GdkPixbufAnimation *p = NULL); 35 wxAnimation(const wxAnimation&); ~wxAnimation()36 ~wxAnimation() { UnRef(); } 37 38 wxAnimation& operator= (const wxAnimation&); 39 IsOk()40 virtual bool IsOk() const 41 { return m_pixbuf != NULL; } 42 43 44 // unfortunately GdkPixbufAnimation does not expose these info: 45 GetFrameCount()46 virtual unsigned int GetFrameCount() const { return 0; } 47 virtual wxImage GetFrame(unsigned int frame) const; 48 49 // we can retrieve the delay for a frame only after building 50 // a GdkPixbufAnimationIter... GetDelay(unsigned int WXUNUSED (frame))51 virtual int GetDelay(unsigned int WXUNUSED(frame)) const { return 0; } 52 53 virtual wxSize GetSize() const; 54 55 virtual bool LoadFile(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY); 56 virtual bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY); 57 58 // Implementation 59 public: // used by GTK callbacks 60 GetPixbuf()61 GdkPixbufAnimation *GetPixbuf() const 62 { return m_pixbuf; } 63 void SetPixbuf(GdkPixbufAnimation* p); 64 65 protected: 66 GdkPixbufAnimation *m_pixbuf; 67 68 private: 69 void UnRef(); 70 71 typedef wxAnimationBase base_type; 72 DECLARE_DYNAMIC_CLASS(wxAnimation) 73 }; 74 75 76 // ---------------------------------------------------------------------------- 77 // wxAnimationCtrl 78 // ---------------------------------------------------------------------------- 79 80 // Resize to animation size if this is set 81 #define wxAN_FIT_ANIMATION 0x0010 82 83 class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase 84 { 85 public: wxAnimationCtrl()86 wxAnimationCtrl() { Init(); } 87 wxAnimationCtrl(wxWindow *parent, 88 wxWindowID id, 89 const wxAnimation& anim = wxNullAnimation, 90 const wxPoint& pos = wxDefaultPosition, 91 const wxSize& size = wxDefaultSize, 92 long style = wxAC_DEFAULT_STYLE, 93 const wxString& name = wxAnimationCtrlNameStr) 94 { 95 Init(); 96 97 Create(parent, id, anim, pos, size, style, name); 98 } 99 100 void Init(); 101 102 bool Create(wxWindow *parent, wxWindowID id, 103 const wxAnimation& anim = wxNullAnimation, 104 const wxPoint& pos = wxDefaultPosition, 105 const wxSize& size = wxDefaultSize, 106 long style = wxAC_DEFAULT_STYLE, 107 const wxString& name = wxAnimationCtrlNameStr); 108 109 ~wxAnimationCtrl(); 110 111 public: // event handler 112 113 void OnTimer(wxTimerEvent &); 114 115 public: // public API 116 117 virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY); 118 119 virtual void SetAnimation(const wxAnimation &anim); GetAnimation()120 virtual wxAnimation GetAnimation() const 121 { return wxAnimation(m_anim); } 122 123 virtual bool Play(); 124 virtual void Stop(); 125 126 virtual bool IsPlaying() const; 127 128 bool SetBackgroundColour( const wxColour &colour ); 129 130 protected: 131 132 virtual void DisplayStaticImage(); 133 virtual wxSize DoGetBestSize() const; 134 void FitToAnimation(); 135 void ClearToBackgroundColour(); 136 137 void ResetAnim(); 138 void ResetIter(); 139 140 protected: // internal vars 141 142 GdkPixbufAnimation *m_anim; 143 GdkPixbufAnimationIter *m_iter; 144 145 wxTimer m_timer; 146 bool m_bPlaying; 147 148 private: 149 typedef wxAnimationCtrlBase base_type; 150 DECLARE_DYNAMIC_CLASS(wxAnimationCtrl) 151 DECLARE_EVENT_TABLE() 152 }; 153 154 #endif // _WX_GTKANIMATEH__ 155