]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gtk/animate.h
Refactor wxEventLoopSource-related code.
[wxWidgets.git] / include / wx / gtk / animate.h
CommitLineData
72045d57
VZ
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$
8// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_GTKANIMATEH__
13#define _WX_GTKANIMATEH__
14
c2f12218
PC
15typedef struct _GdkPixbufAnimation GdkPixbufAnimation;
16typedef struct _GdkPixbufAnimationIter GdkPixbufAnimationIter;
72045d57
VZ
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
a4adcc43 27class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase
72045d57
VZ
28{
29public:
70f9d2be
FM
30 wxAnimation(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY)
31 : m_pixbuf(NULL) { LoadFile(name, type); }
1afdfc9d 32 wxAnimation(GdkPixbufAnimation *p = NULL);
c2f12218
PC
33 wxAnimation(const wxAnimation&);
34 ~wxAnimation() { UnRef(); }
35
36 wxAnimation& operator= (const wxAnimation&);
72045d57 37
72045d57
VZ
38 virtual bool IsOk() const
39 { return m_pixbuf != NULL; }
40
41
42 // unfortunately GdkPixbufAnimation does not expose these info:
43
870cf35c
VZ
44 virtual unsigned int GetFrameCount() const { return 0; }
45 virtual wxImage GetFrame(unsigned int frame) const;
72045d57
VZ
46
47 // we can retrieve the delay for a frame only after building
48 // a GdkPixbufAnimationIter...
e4161a2a 49 virtual int GetDelay(unsigned int WXUNUSED(frame)) const { return 0; }
72045d57 50
c2f12218 51 virtual wxSize GetSize() const;
72045d57
VZ
52
53 virtual bool LoadFile(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY);
54 virtual bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY);
55
c2f12218 56 // Implementation
72045d57
VZ
57public: // used by GTK callbacks
58
59 GdkPixbufAnimation *GetPixbuf() const
60 { return m_pixbuf; }
c2f12218 61 void SetPixbuf(GdkPixbufAnimation* p);
72045d57
VZ
62
63protected:
64 GdkPixbufAnimation *m_pixbuf;
65
c2f12218
PC
66private:
67 void UnRef();
68
69 typedef wxAnimationBase base_type;
72045d57
VZ
70 DECLARE_DYNAMIC_CLASS(wxAnimation)
71};
72
73
72045d57
VZ
74// ----------------------------------------------------------------------------
75// wxAnimationCtrl
76// ----------------------------------------------------------------------------
77
78// Resize to animation size if this is set
79#define wxAN_FIT_ANIMATION 0x0010
80
81class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase
82{
83public:
05a98b6d 84 wxAnimationCtrl() { Init(); }
72045d57
VZ
85 wxAnimationCtrl(wxWindow *parent,
86 wxWindowID id,
87 const wxAnimation& anim = wxNullAnimation,
88 const wxPoint& pos = wxDefaultPosition,
89 const wxSize& size = wxDefaultSize,
90 long style = wxAC_DEFAULT_STYLE,
91 const wxString& name = wxAnimationCtrlNameStr)
92 {
05a98b6d
RR
93 Init();
94
72045d57
VZ
95 Create(parent, id, anim, pos, size, style, name);
96 }
97
05a98b6d
RR
98 void Init();
99
72045d57
VZ
100 bool Create(wxWindow *parent, wxWindowID id,
101 const wxAnimation& anim = wxNullAnimation,
102 const wxPoint& pos = wxDefaultPosition,
103 const wxSize& size = wxDefaultSize,
104 long style = wxAC_DEFAULT_STYLE,
105 const wxString& name = wxAnimationCtrlNameStr);
106
107 ~wxAnimationCtrl();
108
109public: // event handler
110
111 void OnTimer(wxTimerEvent &);
112
113public: // public API
114
115 virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY);
462167a9 116 virtual bool Load(wxInputStream& stream, wxAnimationType type = wxANIMATION_TYPE_ANY);
72045d57
VZ
117
118 virtual void SetAnimation(const wxAnimation &anim);
119 virtual wxAnimation GetAnimation() const
120 { return wxAnimation(m_anim); }
121
122 virtual bool Play();
123 virtual void Stop();
124
125 virtual bool IsPlaying() const;
126
127 bool SetBackgroundColour( const wxColour &colour );
128
129protected:
130
1bd2ceb5 131 virtual void DisplayStaticImage();
72045d57
VZ
132 virtual wxSize DoGetBestSize() const;
133 void FitToAnimation();
134 void ClearToBackgroundColour();
135
c2f12218
PC
136 void ResetAnim();
137 void ResetIter();
72045d57
VZ
138
139protected: // internal vars
140
141 GdkPixbufAnimation *m_anim;
142 GdkPixbufAnimationIter *m_iter;
143
144 wxTimer m_timer;
145 bool m_bPlaying;
146
147private:
c2f12218 148 typedef wxAnimationCtrlBase base_type;
72045d57
VZ
149 DECLARE_DYNAMIC_CLASS(wxAnimationCtrl)
150 DECLARE_EVENT_TABLE()
151};
152
153#endif // _WX_GTKANIMATEH__