]> git.saurik.com Git - wxWidgets.git/blame - include/wx/animdecod.h
add support for wxStrnlen for those platforms where it's available
[wxWidgets.git] / include / wx / animdecod.h
CommitLineData
72045d57
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/animdecod.h
3// Purpose: wxAnimationDecoder
4// Author: Francesco Montorsi
5// CVS-ID: $Id$
6// Copyright: (c) 2006 Francesco Montorsi
7// Licence: wxWindows licence
8/////////////////////////////////////////////////////////////////////////////
9
10#ifndef _WX_ANIMDECOD_H
11#define _WX_ANIMDECOD_H
12
13#include "wx/defs.h"
14
68623832 15#if wxUSE_STREAMS
72045d57 16
ff1dadae 17#include "wx/colour.h"
c2f12218
PC
18#include "wx/gdicmn.h"
19
b5dbe15d
VS
20class WXDLLIMPEXP_FWD_BASE wxInputStream;
21class WXDLLIMPEXP_FWD_CORE wxImage;
72045d57
VZ
22
23/*
24
25 Differences between a wxAnimationDecoder and a wxImageHandler:
26
27 1) wxImageHandlers always load an input stream directly into a given wxImage
28 object converting from the format-specific data representation to the
29 wxImage native format (RGB24).
30 wxAnimationDecoders always load an input stream using some optimized format
31 to store it which is format-depedent. This allows to store a (possibly big)
32 animation using a format which is a good compromise between required memory
33 and time required to blit in on the screen.
34
35 2) wxAnimationDecoders contain the animation data in some internal var.
36 That's why they derive from wxObjectRefData: they are data which can be shared.
37
38 3) wxAnimationDecoders can be used by a wxImageHandler to retrieve a frame
39 in wxImage format; the viceversa cannot be done.
40
41 4) wxAnimationDecoders are decoders only, thus do not support save features.
42
43 5) wxAnimationDecoders are directly used by wxAnimation (generic implementation)
44 as wxObjectRefData while they need to be 'wrapped' by a wxImageHandler for
45 wxImage uses.
46
47*/
48
49
50// --------------------------------------------------------------------------
51// Constants
52// --------------------------------------------------------------------------
53
54// NB: the values of these enum items are not casual but coincide with the
55// GIF disposal codes. Do not change them !!
56enum wxAnimationDisposal
57{
58 // No disposal specified. The decoder is not required to take any action.
59 wxANIM_UNSPECIFIED = -1,
60
61 // Do not dispose. The graphic is to be left in place.
62 wxANIM_DONOTREMOVE = 0,
63
64 // Restore to background color. The area used by the graphic must be
65 // restored to the background color.
66 wxANIM_TOBACKGROUND = 1,
67
68 // Restore to previous. The decoder is required to restore the area
69 // overwritten by the graphic with what was there prior to rendering the graphic.
70 wxANIM_TOPREVIOUS = 2
71};
72
73enum wxAnimationType
74{
75 wxANIMATION_TYPE_INVALID,
76 wxANIMATION_TYPE_GIF,
77 wxANIMATION_TYPE_ANI,
78
79 wxANIMATION_TYPE_ANY
80};
81
82
83// --------------------------------------------------------------------------
84// wxAnimationDecoder class
85// --------------------------------------------------------------------------
86
7776d70e 87class WXDLLIMPEXP_CORE wxAnimationDecoder : public wxObjectRefData
72045d57 88{
870cf35c
VZ
89public:
90 wxAnimationDecoder()
91 {
870cf35c
VZ
92 m_nFrames = 0;
93 }
870cf35c
VZ
94
95 virtual bool Load( wxInputStream& stream ) = 0;
96 virtual bool CanRead( wxInputStream& stream ) const = 0;
97
98 virtual wxAnimationDecoder *Clone() const = 0;
99 virtual wxAnimationType GetType() const = 0;
100
101 // convert given frame to wxImage
102 virtual bool ConvertToImage(unsigned int frame, wxImage *image) const = 0;
72045d57 103
72045d57 104
870cf35c 105 // frame specific data getters
72045d57
VZ
106
107 // not all frames may be of the same size; e.g. GIF allows to
108 // specify that between two frames only a smaller portion of the
109 // entire animation has changed.
870cf35c 110 virtual wxSize GetFrameSize(unsigned int frame) const = 0;
72045d57
VZ
111
112 // the position of this frame in case it's not as big as m_szAnimation
113 // or wxPoint(0,0) otherwise.
870cf35c 114 virtual wxPoint GetFramePosition(unsigned int frame) const = 0;
72045d57
VZ
115
116 // what should be done after displaying this frame.
870cf35c 117 virtual wxAnimationDisposal GetDisposalMethod(unsigned int frame) const = 0;
72045d57
VZ
118
119 // the number of milliseconds this frame should be displayed.
120 // if returns -1 then the frame must be displayed forever.
870cf35c 121 virtual long GetDelay(unsigned int frame) const = 0;
72045d57 122
05a98b6d 123 // the transparent colour for this frame if any or wxNullColour.
870cf35c 124 virtual wxColour GetTransparentColour(unsigned int frame) const = 0;
05a98b6d 125
72045d57
VZ
126 // get global data
127 wxSize GetAnimationSize() const { return m_szAnimation; }
128 wxColour GetBackgroundColour() const { return m_background; }
870cf35c 129 unsigned int GetFrameCount() const { return m_nFrames; }
72045d57 130
870cf35c
VZ
131protected:
132 wxSize m_szAnimation;
133 unsigned int m_nFrames;
72045d57 134
870cf35c
VZ
135 // this is the colour to use for the wxANIM_TOBACKGROUND disposal.
136 // if not specified by the animation, it's set to wxNullColour
137 wxColour m_background;
72045d57
VZ
138};
139
b0f76951 140#endif // wxUSE_STREAMS
7776d70e 141
72045d57
VZ
142#endif // _WX_ANIMDECOD_H
143