You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.4 KiB

/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
///////////////////////////////////////////////////////////////////////////////
// //
// plTextFont Class Header //
// Generic 3D text font handler //
// Cyan, Inc. //
// //
//// Version History //////////////////////////////////////////////////////////
// //
// 2.19.2001 mcn - Created. //
// //
///////////////////////////////////////////////////////////////////////////////
#ifndef _plTextFont_h
#define _plTextFont_h
#include "hsTemplates.h"
#include "hsGeometry3.h"
//// plTextFont Class Definition //////////////////////////////////////////////
class plPipeline;
class plTextFont
{
protected:
struct plDXCharInfo
{
UInt16 fW, fH;
hsPoint3 fUVs[ 2 ];
};
struct plFontVertex
{
hsPoint3 fPoint;
UInt32 fColor;
hsPoint3 fUV;
plFontVertex& operator=(const int zero)
{
fPoint.Set(0,0,0);
fColor = 0;
fUV.Set(0,0,0);
return *this;
}
};
UInt32 fMaxNumIndices;
UInt32 fTextureWidth, fTextureHeight;
char fFace[ 128 ];
UInt16 fSize;
hsBool fInitialized;
UInt16 fFontHeight;
plPipeline *fPipe;
plTextFont *fNext;
plTextFont **fPrevPtr;
plDXCharInfo fCharInfo[ 128 ];
virtual void IInitObjects( void );
virtual void ICreateTexture( UInt16 *data ) = 0;
virtual void IInitStateBlocks( void ) = 0;
virtual void IDrawPrimitive( UInt32 count, plFontVertex *array ) = 0;
virtual void IDrawLines( UInt32 count, plFontVertex *array ) = 0;
UInt16 *IInitFontTexture( void );
void IUnlink( void )
{
hsAssert( fPrevPtr, "Font not in list" );
if( fNext )
fNext->fPrevPtr = fPrevPtr;
*fPrevPtr = fNext;
fNext = nil;
fPrevPtr = nil;
}
public:
plTextFont( plPipeline *pipe );
virtual ~plTextFont();
void Create( char *face, UInt16 size );
void DrawString( const char *string, int x, int y, UInt32 hexColor, UInt8 style, UInt32 rightEdge = 0 );
void DrawRect( int left, int top, int right, int bottom, UInt32 hexColor );
void Draw3DBorder( int left, int top, int right, int bottom, UInt32 hexColor1, UInt32 hexColor2 );
UInt32 CalcStringWidth( const char *string );
UInt32 GetFontSize( void ) { return fSize; }
UInt16 GetFontHeight() { return fFontHeight; }
virtual void DestroyObjects( void ) = 0;
virtual void SaveStates( void ) = 0;
virtual void RestoreStates( void ) = 0;
virtual void FlushDraws( void ) = 0;
void Link( plTextFont **back )
{
fNext = *back;
if( *back )
(*back)->fPrevPtr = &fNext;
fPrevPtr = back;
*back = this;
}
};
#endif // _plTextFont_h