#include "objfont.h" #include "objgfx30.h" #include <string.h> #include <stdlib.h> TFont::TFont(TGfx0* buffer) { Buf = buffer; FontDataSize = 0; memset(FontDataIdx,0,sizeof(FontDataIdx)); memset(CharWidthTable,0,sizeof(CharWidthTable)); memset(CharHeightTable,0,sizeof(CharHeightTable)); FontData = 0; return; } // TFont::TFont void TFont::CenterTextX(Int32 y, const char * TextString ) { Int32 x; x = ((Buf->getMaxX()+1)-TextWidth(TextString)) / 2; PutText(x,y,TextString); return; } // TFont::CenterTextX void TFont::JustifyText(UInt8 Horiz, UInt8 Vert, const char * TextString) { UInt32 x,y; switch (Horiz) { case LeftText: x = 0; break; case CenterText: x = ((Buf->getMaxX())-TextWidth(TextString)) / 2; break; case RightText: x = (Buf->getMaxX())-TextWidth(TextString); break; default: return; } // switch switch (Vert) { case TopText: y = 0; break; case CenterText: y = ((Buf->getMaxY())-TextHeight(TextString)) / 2; break; case BottomText: y = (Buf->getMaxY())-TextHeight(TextString); default: return; } // switch PutText(x,y,TextString); return; } // TFont::JustifyText bool TFont::Load(const char* FontFile) { return LoadFrom(FontFile,0); } // TFont::Load bool TFont::Save(const char* FontFile) { return SaveTo(FontFile,0); } // TFont::Save UInt32 TFont::TextHeight(const char * TextString) { UInt32 size, tmpsize; size = 0; if (TextString) while (*TextString) { tmpsize = CharHeightTable[*TextString++]; if (tmpsize>size) size = tmpsize; } return size; } // TFont::TextHeight UInt32 TFont::TextWidth(const char * TextString) { UInt32 size=0; if (TextString) while (*TextString) size+=CharWidthTable[*TextString++]; return size; } // TFont::TextWidth TFont::~TFont(void) { if (FontDataSize) free(FontData); return; } // TFont::~TFont /* TBMFont methods */ void TBMFont::SetColor(UInt32 colour) { ColourTable[1] = colour; return; } // TBMFont::SetColor void TBMFont::SetIdxColor(UInt8 idx, UInt32 colour) { ColourTable[idx] = colour; return; } // TBMFont::SetIdxColor void TBMFont::PutText(UInt32 x, UInt32 y, const char * TextString) { UInt32 xx, yy; char * offset; UInt8 pix; char ch; if (!FontData) return; while (*TextString) { ch = *TextString; if ((CharWidthTable[ch]) && (ch!=' ')) { offset=(FontData+((char)FontDataIdx[ch])); for (yy=0; yy<=CharHeightTable[ch]-1; yy++) for (xx=0; xx<=CharWidthTable[ch]-1; xx++) { pix = (UInt8)*offset; if (pix) Buf->putpixel(x+xx,y+yy,ColourTable[pix]); } // for xx x+=CharWidthTable[ch]; } // if charwidthtable } // while return; } // TBMFont::PutText