X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/72045d5768a126191a907bc640c28e81a11afdd6..306f34a3681b0d8d87ac5fb3dfd76817f4a8ba7c:/include/wx/animdecod.h diff --git a/include/wx/animdecod.h b/include/wx/animdecod.h index 2c65126e75..a4c864c365 100644 --- a/include/wx/animdecod.h +++ b/include/wx/animdecod.h @@ -12,10 +12,13 @@ #include "wx/defs.h" -#if wxUSE_STREAMS && wxUSE_GIF +#if wxUSE_STREAMS -#include "wx/stream.h" -#include "wx/image.h" +#include "wx/colour.h" +#include "wx/gdicmn.h" + +class WXDLLIMPEXP_FWD_BASE wxInputStream; +class WXDLLIMPEXP_FWD_CORE wxImage; /* @@ -27,15 +30,15 @@ wxAnimationDecoders always load an input stream using some optimized format to store it which is format-depedent. This allows to store a (possibly big) animation using a format which is a good compromise between required memory - and time required to blit in on the screen. + and time required to blit it on the screen. - 2) wxAnimationDecoders contain the animation data in some internal var. + 2) wxAnimationDecoders contain the animation data in some internal variable. That's why they derive from wxObjectRefData: they are data which can be shared. 3) wxAnimationDecoders can be used by a wxImageHandler to retrieve a frame in wxImage format; the viceversa cannot be done. - 4) wxAnimationDecoders are decoders only, thus do not support save features. + 4) wxAnimationDecoders are decoders only, thus they do not support save features. 5) wxAnimationDecoders are directly used by wxAnimation (generic implementation) as wxObjectRefData while they need to be 'wrapped' by a wxImageHandler for @@ -58,11 +61,11 @@ enum wxAnimationDisposal // Do not dispose. The graphic is to be left in place. wxANIM_DONOTREMOVE = 0, - // Restore to background color. The area used by the graphic must be + // Restore to background color. The area used by the graphic must be // restored to the background color. wxANIM_TOBACKGROUND = 1, - // Restore to previous. The decoder is required to restore the area + // Restore to previous. The decoder is required to restore the area // overwritten by the graphic with what was there prior to rendering the graphic. wxANIM_TOPREVIOUS = 2 }; @@ -81,59 +84,60 @@ enum wxAnimationType // wxAnimationDecoder class // -------------------------------------------------------------------------- -class WXDLLEXPORT wxAnimationDecoder : public wxObjectRefData +class WXDLLIMPEXP_CORE wxAnimationDecoder : public wxObjectRefData { -protected: - wxSize m_szAnimation; - size_t m_nFrames; +public: + wxAnimationDecoder() + { + m_nFrames = 0; + } + + virtual bool Load( wxInputStream& stream ) = 0; + virtual bool CanRead( wxInputStream& stream ) const = 0; + + virtual wxAnimationDecoder *Clone() const = 0; + virtual wxAnimationType GetType() const = 0; + + // convert given frame to wxImage + virtual bool ConvertToImage(unsigned int frame, wxImage *image) const = 0; - // this is the colour to use for the wxANIM_TOBACKGROUND disposal. - // if not specified by the animation, it's set to wxNullColour - wxColour m_background; -public: // frame specific data getters + // frame specific data getters // not all frames may be of the same size; e.g. GIF allows to // specify that between two frames only a smaller portion of the // entire animation has changed. - virtual wxSize GetFrameSize(size_t frame) const = 0; + virtual wxSize GetFrameSize(unsigned int frame) const = 0; // the position of this frame in case it's not as big as m_szAnimation // or wxPoint(0,0) otherwise. - virtual wxPoint GetFramePosition(size_t frame) const = 0; + virtual wxPoint GetFramePosition(unsigned int frame) const = 0; // what should be done after displaying this frame. - virtual wxAnimationDisposal GetDisposalMethod(size_t frame) const = 0; + virtual wxAnimationDisposal GetDisposalMethod(unsigned int frame) const = 0; // the number of milliseconds this frame should be displayed. // if returns -1 then the frame must be displayed forever. - virtual long GetDelay(size_t frame) const = 0; + virtual long GetDelay(unsigned int frame) const = 0; + + // the transparent colour for this frame if any or wxNullColour. + virtual wxColour GetTransparentColour(unsigned int frame) const = 0; // get global data wxSize GetAnimationSize() const { return m_szAnimation; } wxColour GetBackgroundColour() const { return m_background; } - size_t GetFrameCount() const { return m_nFrames; } - -public: - wxAnimationDecoder() - { - m_background = wxNullColour; - m_nFrames = 0; - } - ~wxAnimationDecoder() {} - + unsigned int GetFrameCount() const { return m_nFrames; } - virtual bool Load( wxInputStream& stream ) = 0; - virtual bool CanRead( wxInputStream& stream ) const = 0; - - virtual wxAnimationDecoder *Clone() const = 0; - virtual wxAnimationType GetType() const = 0; +protected: + wxSize m_szAnimation; + unsigned int m_nFrames; - // convert given frame to wxImage - virtual bool ConvertToImage(size_t frame, wxImage *image) const = 0; + // this is the colour to use for the wxANIM_TOBACKGROUND disposal. + // if not specified by the animation, it's set to wxNullColour + wxColour m_background; }; +#endif // wxUSE_STREAMS -#endif // wxUSE_STREAM && wxUSE_GIF #endif // _WX_ANIMDECOD_H