Newer
Older
ubix / src / sys / graphics / objfont.h
#ifndef OBJFONT_H
#define OBJFONT_H

#include "objgfx30.h"

#define LeftText   0
#define CenterText 1
#define RightText  2
#define BottomText 0
#define TopText    2

enum TFontType {BLF, BMF, DPF};

typedef struct {
          char  ID[4];
          UInt8 BPP;
          UInt8 paddington[10];
        } TFontHeader;

typedef struct {
          char  ID[3];
          UInt8 Version;
          UInt8 Width, Height;
          UInt8 NumOfChars;
          UInt8 StartingChar;
          UInt8 ColourType;
          UInt8 paddington[7];
        } TDPFHeader;

class TFont_abstract {
       public:
        virtual void putText(TGfx0&, Int32, Int32, const char *)=0;
        virtual bool loadFrom(const char *, UInt32)=0;
        virtual bool saveTo(const char *, Int32)=0;
};

class TFont : public TFont_abstract {
       protected:
        UInt32 FontDataIdx[256];
        UInt16 CharWidthTable[256];
        UInt16 CharHeightTable[256];
        TGfx0* Buf;
        UInt32 FontDataSize;
        void * FontData;
       public:
        TFont();
      //  virtual void PutText(Int32, Int32,const char *);
        void centerTextX(TGfx0&, Int32, const char *);
        void justifyText(TGfx0&, 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 ~TFont(void); 
}; // TFont

class TBMFont : public TFont {
       protected:
        TRGB ColourTable[32];
       public:
        TBMFont(void): TFont() {
          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(TGfx0&, Int32, Int32, const char *);
};

class TDPFont : public TBMFont {
       protected:
        UInt8 Width, Height;
        UInt16 NumOfChars;
        UInt8 StartingChar;
       public:
        TDPFont(void) : TBMFont() {
          Width = 0;
          Height = 0;
          NumOfChars = 0;
          StartingChar = 0;
        }
        virtual void putText(TGfx0&, Int32, Int32, const char *);
        virtual bool loadFrom(const char *, UInt32);
        virtual bool saveTo(const char *, Int32);
};

#endif