#ifndef OGFONT_H #define OGFONT_H #include "objgfx30.h" #define LeftText 0 #define CenterText 1 #define RightText 2 #define BottomText 0 #define TopText 2 enum ogFontType {BMF, DPF}; typedef struct { char ID[4]; uInt8 BPP; uInt8 paddington[10]; } ogFontHeader; typedef struct { char ID[3]; uInt8 Version; uInt8 Width, Height; uInt8 NumOfChars; uInt8 StartingChar; uInt8 ColourType; uInt8 paddington[7]; } ogDPFHeader; class ogAbstractFont { public: virtual void putText(ogSurface&, int32, int32, const char *)=0; virtual bool loadFrom(const char *, uInt32)=0; virtual bool saveTo(const char *, int32)=0; }; class ogFont : public ogAbstractFont { protected: uInt32 FontDataIdx[256]; uInt16 CharWidthTable[256]; uInt16 CharHeightTable[256]; ogSurface* Buf; uInt32 FontDataSize; void * FontData; public: ogFont(); // virtual void PutText(int32, int32,const char *); void centerTextX(ogSurface&, int32, const char *); void justifyText(ogSurface&, uInt8, uInt8, const char *); bool load(const char *); virtual bool loadFrom(const char *, uInt32); bool save(const char *); // virtual bool SaveTo(const char *, int32) = 0; uInt32 textHeight(const char *); uInt32 textWidth(const char *); virtual ~ogFont(void); }; // TFont class ogBMFont : public ogFont { protected: ogRGB ColourTable[32]; public: ogBMFont(void): ogFont() { for (uInt32 tmp=0; tmp<=31; tmp++) { ColourTable[tmp].red = 255; ColourTable[tmp].green = 255; ColourTable[tmp].blue = 255; } // for } void setColor(uInt8, uInt8, uInt8); void setIdxColor(uInt8, uInt8, uInt8, uInt8); virtual void putText(ogSurface&, int32, int32, const char *); }; class ogDPFont : public ogBMFont { protected: uInt8 Width, Height; uInt16 NumOfChars; uInt8 StartingChar; public: ogDPFont(void) : ogBMFont() { Width = 0; Height = 0; NumOfChars = 0; StartingChar = 0; } virtual void putText(ogSurface&, int32, int32, const char *); virtual bool loadFrom(const char *, uInt32); virtual bool saveTo(const char *, int32); }; #endif