Merge remote branch 'origin/trunk' into fhs
[xbmc:xbmc-antiquated.git] / guilib / AnimatedGif.h
1 /*!
2 \file AnimatedGif.h
3 \brief
4 */
5
6
7 // ****************************************************************************
8 //
9 // WINIMAGE.H : Generic classes for raster images (MSWindows specialization)
10 //
11 //  Content: Class declarations of:
12 //  - class CAnimatedGif             : Storage class for single images
13 //  - class CAnimatedGifSet          : Storage class for sets of images
14 //  - class C_AnimationWindow   : Window Class to display animations
15 //
16 //  (Includes declarations of routines to Load and Save BMP files and to load
17 // GIF files into these classes).
18 //
19 //  --------------------------------------------------------------------------
20 //
21 // Copyright (c) 2000, Juan Soulie <jsoulie@cplusplus.com>
22 //
23 // Permission to use, copy, modify, distribute and sell this software or any
24 // part thereof and/or its documentation for any purpose is granted without fee
25 // provided that the above copyright notice and this permission notice appear
26 // in all copies.
27 //
28 // This software is provided "as is" without express or implied warranty of
29 // any kind. The author shall have no liability with respect to the
30 // infringement of copyrights or patents that any modification to the content
31 // of this file or this file itself may incur.
32 //
33 // ****************************************************************************
34
35
36 #include "Texture.h" // for COLOR
37
38 #pragma pack(1)
39
40 #undef ALIGN
41 #define ALIGN sizeof(int)         ///< Windows GDI expects all int-aligned
42
43 /*!
44  \ingroup textures
45  \brief
46  */
47 typedef struct tagGUIRGBQUAD
48 {
49   BYTE rgbBlue;
50   BYTE rgbGreen;
51   BYTE rgbRed;
52   BYTE rgbReserved;
53 }
54 GUIRGBQUAD;
55
56 /*!
57  \ingroup textures
58  \brief
59  */
60 typedef struct tagGUIBITMAPINFOHEADER
61 {
62   DWORD biSize;
63   LONG biWidth;
64   LONG biHeight;
65   WORD biPlanes;
66   WORD biBitCount;
67   DWORD biCompression;
68   DWORD biSizeImage;
69   LONG biXPelsPerMeter;
70   LONG biYPelsPerMeter;
71   DWORD biClrUsed;
72   DWORD biClrImportant;
73 }
74 GUIBITMAPINFOHEADER;
75
76 /*!
77  \ingroup textures
78  \brief
79  */
80 typedef struct tagGUIBITMAPINFO
81 {
82     GUIBITMAPINFOHEADER    bmiHeader;
83     GUIRGBQUAD                                           bmiColors[1];
84 } GUIBITMAPINFO;
85
86 #pragma pack()
87
88
89 // ****************************************************************************
90 // * CAnimatedGif                                                                  *
91 // *    Storage class for single images                                       *
92 // ****************************************************************************
93 /*!
94  \ingroup textures
95  \brief Storage class for single images
96  */
97 class CAnimatedGif
98 {
99 public:
100   CAnimatedGif();
101   virtual ~CAnimatedGif();
102
103   // standard members:
104   int Width, Height;   ///< Dimensions in pixels
105   int BPP;        // Bits Per Pixel
106   char* Raster;       ///< Bits of Raster Data (Byte Aligned)
107   COLOR* Palette;      ///< Color Map
108   int BytesPerRow;    ///< Width (in bytes) including alignment!
109   int Transparent;    ///< Index of Transparent color (-1 for none)
110
111   // Extra members for animations:
112   int nLoops;
113   int xPos, yPos;     ///< Relative Position
114   int Delay;       ///< Delay after image in 1/1000 seconds.
115   int Transparency;    ///< Animation Transparency.
116   // Windows GDI specific:
117   GUIBITMAPINFO* pbmi;        ///< BITMAPINFO structure
118
119   // constructor and destructor:
120
121   // operator= (object copy)
122   CAnimatedGif& operator= (CAnimatedGif& rhs);
123
124   /// \brief Image initializer (allocates space for raster and palette):
125   void Init (int iWidth, int iHeight, int iBPP, int iLoops = 0);
126
127   inline char& Pixel (int x, int y) { return Raster[y*BytesPerRow + x];}
128
129 };
130
131 // ****************************************************************************
132 // * CAnimatedGifSet                                                               *
133 // *    Storage class for sets of images                                      *
134 // ****************************************************************************
135 /*!
136  \ingroup textures
137  \brief Storage class for sets of images
138  */
139 class CAnimatedGifSet
140 {
141 public:
142
143   // constructor and destructor:
144   CAnimatedGifSet();
145   virtual ~CAnimatedGifSet();
146
147   int FrameWidth, FrameHeight; ///< Dimensions of ImageSet in pixels.
148   int nLoops;          // Number of Loops (0 = infinite)
149
150   std::vector<CAnimatedGif*> m_vecimg;        ///< Images' Vector.
151
152   void AddImage (CAnimatedGif*);   ///< Append new image to vector (push_back)
153
154   int GetImageCount() const;
155   // File Formats:
156   int LoadGIF (const char* szFile);
157
158   void Release();
159 protected:
160   unsigned char getbyte(FILE *fd);
161 };
162