This repository has been archived on 2022-06-27. You can view files and clone it, but cannot push or open issues or pull requests.
Xash3DArchive/utils/vgui/lib/win32_vc6/vfontdata.cpp

67 lines
1.5 KiB
C++

//========= Copyright ?1996-2002, Valve LLC, All rights reserved. ============
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================
#include "vfontdata.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)
{
pData->m_BitmapCharWidth = fileImage.m_Width/256;
pData->m_BitmapCharHeight = fileImage.m_Height;
for (i = 0; i < 256; i++)
{
rightX = 0;
pInLine = &fileImage.m_pData[i*pData->m_BitmapCharWidth*4];
pOutLine = &pData->m_pBitmap[i*pData->m_BitmapCharWidth];
for (y = 0; y < pData->m_BitmapCharHeight; y++)
{
for (x = 0; x < pData->m_BitmapCharWidth; x++)
{
if (pInLine[x*4+0] != 0 || pInLine[x*4+1] != 0 || pInLine[x*4 +2] != 0 || pInLine[x*4+2] != 0)
{
pOutLine[x] = 1;
if (x > rightX)
rightX = x;
}
else
pOutLine[x] = 0;
}
pInLine += 256*pData->m_BitmapCharWidth*4;
pOutLine += 256*pData->m_BitmapCharWidth;
}
pData->m_CharWidths[i] = (i == 32) ? pData->m_BitmapCharWidth/4 : rightX;
}
}
return true;
}