| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/animdecod.h
 
- // Purpose:     wxAnimationDecoder
 
- // Author:      Francesco Montorsi
 
- // Copyright:   (c) 2006 Francesco Montorsi
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_ANIMDECOD_H
 
- #define _WX_ANIMDECOD_H
 
- #include "wx/defs.h"
 
- #if wxUSE_STREAMS
 
- #include "wx/colour.h"
 
- #include "wx/gdicmn.h"
 
- #include "wx/log.h"
 
- #include "wx/stream.h"
 
- class WXDLLIMPEXP_FWD_CORE wxImage;
 
- /*
 
-  Differences between a wxAnimationDecoder and a wxImageHandler:
 
-  1) wxImageHandlers always load an input stream directly into a given wxImage
 
-     object converting from the format-specific data representation to the
 
-     wxImage native format (RGB24).
 
-     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 it on the screen.
 
-  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 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
 
-     wxImage uses.
 
- */
 
- // --------------------------------------------------------------------------
 
- // Constants
 
- // --------------------------------------------------------------------------
 
- // NB: the values of these enum items are not casual but coincide with the
 
- //     GIF disposal codes. Do not change them !!
 
- enum wxAnimationDisposal
 
- {
 
-     // No disposal specified. The decoder is not required to take any action.
 
-     wxANIM_UNSPECIFIED = -1,
 
-     // 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
 
-     // restored to the background color.
 
-     wxANIM_TOBACKGROUND = 1,
 
-     // 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
 
- };
 
- enum wxAnimationType
 
- {
 
-     wxANIMATION_TYPE_INVALID,
 
-     wxANIMATION_TYPE_GIF,
 
-     wxANIMATION_TYPE_ANI,
 
-     wxANIMATION_TYPE_ANY
 
- };
 
- // --------------------------------------------------------------------------
 
- // wxAnimationDecoder class
 
- // --------------------------------------------------------------------------
 
- class WXDLLIMPEXP_CORE wxAnimationDecoder : public wxObjectRefData
 
- {
 
- public:
 
-     wxAnimationDecoder()
 
-     {
 
-         m_nFrames = 0;
 
-     }
 
-     virtual bool Load( wxInputStream& stream ) = 0;
 
-     bool CanRead( wxInputStream& stream ) const
 
-     {
 
-         // NOTE: this code is the same of wxImageHandler::CallDoCanRead
 
-         if ( !stream.IsSeekable() )
 
-             return false;        // can't test unseekable stream
 
-         wxFileOffset posOld = stream.TellI();
 
-         bool ok = DoCanRead(stream);
 
-         // restore the old position to be able to test other formats and so on
 
-         if ( stream.SeekI(posOld) == wxInvalidOffset )
 
-         {
 
-             wxLogDebug(wxT("Failed to rewind the stream in wxAnimationDecoder!"));
 
-             // reading would fail anyhow as we're not at the right position
 
-             return false;
 
-         }
 
-         return ok;
 
-     }
 
-     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;
 
-     // 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(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(unsigned int frame) const = 0;
 
-     // what should be done after displaying this frame.
 
-     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(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; }
 
-     unsigned int GetFrameCount() const { return m_nFrames; }
 
- protected:
 
-     // checks the signature of the data in the given stream and returns true if it
 
-     // appears to be a valid animation format recognized by the animation decoder;
 
-     // this function should modify the stream current position without taking care
 
-     // of restoring it since CanRead() will do it.
 
-     virtual bool DoCanRead(wxInputStream& stream) const = 0;
 
-     wxSize m_szAnimation;
 
-     unsigned int m_nFrames;
 
-     // 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  // _WX_ANIMDECOD_H
 
 
  |