00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef SHAPE_H
00020 #define SHAPE_H
00021
00022 #include <vector>
00023
00024 class ShapeFrame;
00025 namespace Pentagram { struct Palette; struct Rect; }
00026 struct ConvertShapeFormat;
00027 class IDataSource;
00028
00029 class Shape
00030 {
00031 public:
00032
00033
00034
00035 Shape(const uint8* data, uint32 size, const ConvertShapeFormat *format,
00036 const uint16 flexId, const uint32 shapenum);
00037 Shape(IDataSource *src, const ConvertShapeFormat *format);
00038 virtual ~Shape();
00039 void setPalette(const Pentagram::Palette* pal) { palette = pal; }
00040 const Pentagram::Palette* getPalette() const { return palette; }
00041
00042 uint32 frameCount() const { return static_cast<uint32>(frames.size()); }
00043
00047 void getTotalDimensions(sint32& w, sint32& h, sint32& x, sint32& y) const;
00048
00049 ShapeFrame* getFrame(unsigned int frame)
00050 { if (frame < frames.size()) return frames[frame]; else return 0; }
00051
00052 void getShapeId(uint16 & flexId, uint32 & shapenum);
00053
00054
00055 static const ConvertShapeFormat *DetectShapeFormat(const uint8* data, uint32 size);
00056 static const ConvertShapeFormat *DetectShapeFormat(IDataSource *ds, uint32 size);
00057
00058 ENABLE_RUNTIME_CLASSTYPE();
00059
00060 ENABLE_CUSTOM_MEMORY_ALLOCATION();
00061
00062 protected:
00063
00064
00065 void LoadU8Format(const uint8* data, uint32 size, const ConvertShapeFormat* format);
00066
00067
00068 void LoadPentagramFormat(const uint8* data, uint32 size, const ConvertShapeFormat* format);
00069
00070
00071
00072 void LoadGenericFormat(const uint8* data, uint32 size, const ConvertShapeFormat* format);
00073
00074 std::vector<ShapeFrame*> frames;
00075
00076 const Pentagram::Palette* palette;
00077
00078 const uint8* data;
00079 uint32 size;
00080 const uint16 flexId;
00081 const uint32 shapenum;
00082 };
00083
00084
00085 #endif