Newer
Older
ubixos / src / sys / graphics / objfont.cpp
@reddawg reddawg on 29 Jun 2002 2 KB Sorting things
#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