]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gifdecod.h
wxWindow::GetBestSize() added
[wxWidgets.git] / include / wx / gifdecod.h
CommitLineData
661dc384
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: gifdecod.h
3// Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation
4// Author: Guillermo Rodriguez Garcia <guille@iies.es>
3c87527e 5// Version: 3.02
83413d6d
GRG
6// CVS-ID: $Id$
7// Copyright: (c) 1999 Guillermo Rodriguez Garcia
661dc384
JS
8// Licence: wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_GIFDECOD_H
12#define _WX_GIFDECOD_H
13
14#ifdef __GNUG__
15#pragma interface "gifdecod.h"
16#endif
17
18#include "wx/setup.h"
19
83413d6d
GRG
20#if wxUSE_STREAMS && wxUSE_GIF
21
661dc384
JS
22#include "wx/stream.h"
23#include "wx/image.h"
24
25
26typedef struct _IMAGEN
27{
28 unsigned int w; /* width */
29 unsigned int h; /* height */
30 unsigned int left; /* x coord (in logical screen) */
31 unsigned int top; /* y coord (in logical screen) */
32 int transparent; /* transparent color (-1 = none) */
3c87527e 33 int disposal; /* disposal method (-1 = unspecified) */
661dc384
JS
34 long delay; /* delay in ms (-1 = unused) */
35 unsigned char *p; /* bitmap */
36 unsigned char *pal; /* palette */
37 struct _IMAGEN *next; /* next image */
38 struct _IMAGEN *prev; /* prev image */
39} IMAGEN;
40
41
42/* disposal method */
43#define D_UNSPECIFIED -1 /* not specified */
44#define D_DONOTDISPOSE 0 /* do not dispose */
45#define D_TOBACKGROUND 1 /* restore to background colour */
46#define D_TOPREVIOUS 2 /* restore to previous image */
47
48/* error codes */
49#define E_OK 0 /* everything was OK */
83413d6d
GRG
50#define E_FORMATO 1 /* error in gif header */
51#define E_MEMORIA 2 /* error allocating memory */
661dc384 52
b31ba288 53class WXDLLEXPORT wxGIFDecoder
661dc384
JS
54{
55private:
56 /* logical screen */
57 unsigned int m_screenw; /* logical screen width */
58 unsigned int m_screenh; /* logical screen height */
59 int m_background; /* background color (-1 = none) */
60
61 /* image data */
62 bool m_anim; /* animated GIF */
63 int m_nimages; /* number of images */
64 int m_image; /* current image */
65 IMAGEN *m_pimage; /* pointer to current image */
66 IMAGEN *m_pfirst; /* pointer to first image */
67 IMAGEN *m_plast; /* pointer to last image */
68
69 /* decoder state vars */
70 int m_restbits; /* remaining valid bits */
71 unsigned int m_restbyte; /* remaining bytes in this block */
72 unsigned int m_lastbyte; /* last byte read */
73
74 wxInputStream *m_f; /* input file */
75
76private:
77 int getcode(int bits, int abfin);
78 int dgif(IMAGEN *img, int interl, int bits);
79
80public:
81 // constructor, destructor, etc.
82 wxGIFDecoder(wxInputStream *s, bool anim = FALSE);
83 ~wxGIFDecoder();
3c87527e 84 bool CanRead();
661dc384
JS
85 int ReadGIF();
86 void Destroy();
87
88 // convert current frame to wxImage
89 bool ConvertToImage(wxImage *image) const;
90
91 // get data of current frame
92 int GetFrameIndex() const;
93 unsigned char* GetData() const;
94 unsigned char* GetPalette() const;
95 unsigned int GetWidth() const;
96 unsigned int GetHeight() const;
97 unsigned int GetLeft() const;
98 unsigned int GetTop() const;
99 int GetDisposalMethod() const;
100 int GetTransparentColour() const;
101 long GetDelay() const;
102
103 // get global data
104 unsigned int GetLogicalScreenWidth() const;
105 unsigned int GetLogicalScreenHeight() const;
106 int GetBackgroundColour() const;
107 int GetNumberOfFrames() const;
108 bool IsAnimation() const;
109
110 // move through the animation
111 bool GoFirstFrame();
112 bool GoLastFrame();
113 bool GoNextFrame(bool cyclic = FALSE);
114 bool GoPrevFrame(bool cyclic = FALSE);
115 bool GoFrame(int which);
116};
117
118
83413d6d 119#endif // wxUSE_STREAM && wxUSE_GIF
661dc384
JS
120#endif // _WX_GIFDECOD_H
121