2006-10-09 13:51:07 -04:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: wx/gtk/animate.h
|
|
|
|
// Purpose: Animation classes
|
|
|
|
// 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__
|
|
|
|
|
2006-10-10 00:27:54 -04:00
|
|
|
typedef struct _GdkPixbufAnimation GdkPixbufAnimation;
|
|
|
|
typedef struct _GdkPixbufAnimationIter GdkPixbufAnimationIter;
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxAnimation
|
|
|
|
// Unlike the generic wxAnimation object (see generic\animate.cpp), we won't
|
|
|
|
// use directly wxAnimationHandlers as gdk-pixbuf already provides the
|
|
|
|
// concept of handler and will automatically use the available handlers.
|
|
|
|
// Like generic wxAnimation object, this implementation of wxAnimation is
|
|
|
|
// refcounted so that assignment is very fast
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
2006-10-10 03:11:26 -04:00
|
|
|
class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase
|
2006-10-09 13:51:07 -04:00
|
|
|
{
|
|
|
|
public:
|
2006-10-10 00:27:54 -04:00
|
|
|
wxAnimation(GdkPixbufAnimation *p = NULL) { m_pixbuf = p; }
|
|
|
|
wxAnimation(const wxAnimation&);
|
|
|
|
~wxAnimation() { UnRef(); }
|
|
|
|
|
|
|
|
wxAnimation& operator= (const wxAnimation&);
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
virtual bool IsOk() const
|
|
|
|
{ return m_pixbuf != NULL; }
|
|
|
|
|
|
|
|
|
|
|
|
// unfortunately GdkPixbufAnimation does not expose these info:
|
|
|
|
|
|
|
|
virtual size_t GetFrameCount() const
|
|
|
|
{ return 0; }
|
2006-10-10 00:27:54 -04:00
|
|
|
virtual wxImage GetFrame(size_t i) const;
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
// we can retrieve the delay for a frame only after building
|
|
|
|
// a GdkPixbufAnimationIter...
|
|
|
|
virtual int GetDelay(size_t i) const
|
|
|
|
{ return 0; }
|
|
|
|
|
2006-10-10 00:27:54 -04:00
|
|
|
virtual wxSize GetSize() const;
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
virtual bool LoadFile(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY);
|
|
|
|
virtual bool Load(wxInputStream &stream, wxAnimationType type = wxANIMATION_TYPE_ANY);
|
|
|
|
|
2006-10-10 00:27:54 -04:00
|
|
|
// Implementation
|
2006-10-09 13:51:07 -04:00
|
|
|
public: // used by GTK callbacks
|
|
|
|
|
|
|
|
GdkPixbufAnimation *GetPixbuf() const
|
|
|
|
{ return m_pixbuf; }
|
2006-10-10 00:27:54 -04:00
|
|
|
void SetPixbuf(GdkPixbufAnimation* p);
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
protected:
|
|
|
|
GdkPixbufAnimation *m_pixbuf;
|
|
|
|
|
2006-10-10 00:27:54 -04:00
|
|
|
private:
|
|
|
|
void UnRef();
|
|
|
|
|
|
|
|
typedef wxAnimationBase base_type;
|
2006-10-09 13:51:07 -04:00
|
|
|
DECLARE_DYNAMIC_CLASS(wxAnimation)
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxAnimationCtrl
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// Resize to animation size if this is set
|
|
|
|
#define wxAN_FIT_ANIMATION 0x0010
|
|
|
|
|
|
|
|
class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase
|
|
|
|
{
|
|
|
|
public:
|
2006-10-11 12:09:39 -04:00
|
|
|
wxAnimationCtrl() { Init(); }
|
2006-10-09 13:51:07 -04:00
|
|
|
wxAnimationCtrl(wxWindow *parent,
|
|
|
|
wxWindowID id,
|
|
|
|
const wxAnimation& anim = wxNullAnimation,
|
|
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
|
|
const wxSize& size = wxDefaultSize,
|
|
|
|
long style = wxAC_DEFAULT_STYLE,
|
|
|
|
const wxString& name = wxAnimationCtrlNameStr)
|
|
|
|
{
|
2006-10-11 12:09:39 -04:00
|
|
|
Init();
|
|
|
|
|
2006-10-09 13:51:07 -04:00
|
|
|
Create(parent, id, anim, pos, size, style, name);
|
|
|
|
}
|
|
|
|
|
2006-10-11 12:09:39 -04:00
|
|
|
void Init();
|
|
|
|
|
2006-10-09 13:51:07 -04:00
|
|
|
bool Create(wxWindow *parent, wxWindowID id,
|
|
|
|
const wxAnimation& anim = wxNullAnimation,
|
|
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
|
|
const wxSize& size = wxDefaultSize,
|
|
|
|
long style = wxAC_DEFAULT_STYLE,
|
|
|
|
const wxString& name = wxAnimationCtrlNameStr);
|
|
|
|
|
|
|
|
~wxAnimationCtrl();
|
|
|
|
|
|
|
|
public: // event handler
|
|
|
|
|
|
|
|
void OnTimer(wxTimerEvent &);
|
|
|
|
|
|
|
|
public: // public API
|
|
|
|
|
|
|
|
virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY);
|
|
|
|
|
|
|
|
virtual void SetAnimation(const wxAnimation &anim);
|
|
|
|
virtual wxAnimation GetAnimation() const
|
|
|
|
{ return wxAnimation(m_anim); }
|
|
|
|
|
|
|
|
virtual bool Play();
|
|
|
|
virtual void Stop();
|
|
|
|
|
|
|
|
virtual bool IsPlaying() const;
|
|
|
|
|
|
|
|
bool SetBackgroundColour( const wxColour &colour );
|
2006-10-21 09:51:38 -04:00
|
|
|
void SetInactiveBitmap(const wxBitmap &bmp);
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
virtual wxSize DoGetBestSize() const;
|
|
|
|
void FitToAnimation();
|
|
|
|
void ClearToBackgroundColour();
|
2006-10-21 09:51:38 -04:00
|
|
|
void DisplayStaticImage();
|
2006-10-09 13:51:07 -04:00
|
|
|
|
2006-10-10 00:27:54 -04:00
|
|
|
void ResetAnim();
|
|
|
|
void ResetIter();
|
2006-10-09 13:51:07 -04:00
|
|
|
|
|
|
|
protected: // internal vars
|
|
|
|
|
|
|
|
GdkPixbufAnimation *m_anim;
|
|
|
|
GdkPixbufAnimationIter *m_iter;
|
|
|
|
|
|
|
|
wxTimer m_timer;
|
|
|
|
bool m_bPlaying;
|
|
|
|
|
|
|
|
private:
|
2006-10-10 00:27:54 -04:00
|
|
|
typedef wxAnimationCtrlBase base_type;
|
2006-10-09 13:51:07 -04:00
|
|
|
DECLARE_DYNAMIC_CLASS(wxAnimationCtrl)
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _WX_GTKANIMATEH__
|