forked from vera/halflife-thewastes-sdk
77 lines
1.5 KiB
C++
77 lines
1.5 KiB
C++
|
|
#include "vfontdata.h"
|
|
#include "fileimage.h"
|
|
|
|
|
|
|
|
VFontData::VFontData()
|
|
{
|
|
m_BitmapCharWidth = m_BitmapCharHeight = 0;
|
|
m_pBitmap = NULL;
|
|
}
|
|
|
|
VFontData::~VFontData()
|
|
{
|
|
if(m_pBitmap)
|
|
delete [] m_pBitmap;
|
|
}
|
|
|
|
|
|
|
|
bool LoadVFontDataFrom32BitTGA(FileImageStream *fp, VFontData *pData)
|
|
{
|
|
FileImage fileImage;
|
|
unsigned char *pInLine, *pOutLine;
|
|
int i, x, y;
|
|
int rightX;
|
|
|
|
|
|
if(!Load32BitTGA(fp, &fileImage))
|
|
return false;
|
|
|
|
pData->m_pBitmap = new unsigned char[fileImage.m_Width * fileImage.m_Height];
|
|
if(!pData->m_pBitmap)
|
|
return false;
|
|
|
|
pData->m_BitmapCharWidth = fileImage.m_Width / NUM_VFONT_CHARS;
|
|
pData->m_BitmapCharHeight = fileImage.m_Height;
|
|
|
|
// Convert the data and figure out the extents of each letter.
|
|
for(i=0; i < NUM_VFONT_CHARS; i++)
|
|
{
|
|
pInLine = &fileImage.m_pData[i * pData->m_BitmapCharWidth * 4];
|
|
pOutLine = &pData->m_pBitmap[i * pData->m_BitmapCharWidth];
|
|
|
|
rightX = 0;
|
|
for(y=0; y < pData->m_BitmapCharHeight; y++)
|
|
{
|
|
for(x=0; x < pData->m_BitmapCharWidth; x++)
|
|
{
|
|
if(*((long*)&pInLine[x*4]))
|
|
{
|
|
pOutLine[x] = 1;
|
|
if(x > rightX)
|
|
rightX = x;
|
|
}
|
|
else
|
|
{
|
|
pOutLine[x] = 0;
|
|
}
|
|
}
|
|
|
|
pInLine += pData->m_BitmapCharWidth * NUM_VFONT_CHARS * 4;
|
|
pOutLine += pData->m_BitmapCharWidth * NUM_VFONT_CHARS;
|
|
}
|
|
|
|
// Wouldn't normally detect any spacing for the space character..
|
|
if(i == ' ')
|
|
pData->m_CharWidths[i] = pData->m_BitmapCharWidth / 4;
|
|
else
|
|
pData->m_CharWidths[i] = rightX;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|