This commit is contained in:
Paul 2001-05-31 16:27:21 +00:00
parent 579cb15a9d
commit 1a0f2248f1
2 changed files with 140 additions and 17 deletions

View File

@ -129,7 +129,7 @@ void FontBank::print( int _x, int _y, s32 _textId )
int wstep=50; int wstep=50;
int wspeed=100; int wspeed=100;
int wscale=1000; int wscale=1000;
void FontBank::print( int _x, int _y, char *_text ) void FontBank::print( int _x, int _y, const char *_text )
{ {
ASSERT( m_initialised ); ASSERT( m_initialised );
@ -149,7 +149,7 @@ void FontBank::print( int _x, int _y, char *_text )
} }
_x+=m_printArea.x; _x+=m_printArea.x;
_y+=m_printArea.y; _y+=m_printArea.y;
_y+=m_fontData->charHeight; // origin at top left please... _y+=getCharHeight(); // origin at top left please...
StartX=_x; StartX=_x;
while (*_text) while (*_text)
@ -175,11 +175,11 @@ void FontBank::print( int _x, int _y, char *_text )
{ {
fy=_y+(msin((s_wobbleValue+(_x*wstep))&4095)/wscale); fy=_y+(msin((s_wobbleValue+(_x*wstep))&4095)/wscale);
} }
Size=printChar(*_text++,_x,fy)+m_fontData->charGapX; Size=printChar(*_text++,_x,fy)+getCharGapX();
_x+=Size; _x+=Size;
Length-=Size; Length-=Size;
} }
_y+=(m_fontData->charHeight+m_fontData->charGapY); _y+=(getCharHeight());
if(*_text=='\n') _text++; // kill newline if there is one ( preserve multiple \n ) if(*_text=='\n') _text++; // kill newline if there is one ( preserve multiple \n )
while (*_text==' ') _text++; // kill trailing spaces while (*_text==' ') _text++; // kill trailing spaces
} }
@ -287,7 +287,7 @@ int FontBank::getCharWidth( char _char )
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int FontBank::getCharHeight() int FontBank::getCharHeight()
{ {
return m_fontData->charHeight+m_fontData->charGapY; return m_fontData->charHeight+getCharGapY();
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -296,7 +296,7 @@ int FontBank::getCharHeight()
Params: Params:
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int FontBank::getStringHeight( char *_text ) int FontBank::getStringHeight( const char *_text )
{ {
int length=0; int length=0;
int height=0; int height=0;
@ -306,15 +306,35 @@ int FontBank::getStringHeight( char *_text )
length=getStrWrapLen(_text,m_printArea.w); length=getStrWrapLen(_text,m_printArea.w);
while(*_text && length>0) while(*_text && length>0)
{ {
length-=getCharWidth(*_text++)+m_fontData->charGapX; length-=getCharWidth(*_text++)+getCharGapX();
} }
height+=(m_fontData->charHeight+m_fontData->charGapY); height+=(getCharHeight());
if(*_text=='\n') _text++; // kill newline if there is one ( preserve multiple \n ) if(*_text=='\n') _text++; // kill newline if there is one ( preserve multiple \n )
while (*_text==' ') _text++; // kill trailing spaces while (*_text==' ') _text++; // kill trailing spaces
} }
return height; return height;
} }
int FontBank::getStringHeight( s32 _textId )
{
return getStringHeight( TranslationDatabase::getString(_textId) );
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int FontBank::getCharGapX()
{
return m_fontData->charGapX;
}
int FontBank::getCharGapY()
{
return m_fontData->charGapY;
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -346,10 +366,14 @@ int FontBank::printChar( char _char,int _x,int _y )
Params: Params:
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int FontBank::getStringWidth( char * text ) int FontBank::getStringWidth( const char * text )
{ {
return getStrWrapLen( text, m_printArea.w ); return getStrWrapLen( text, m_printArea.w );
} }
int FontBank::getStringWidth( s32 _textId )
{
return getStringWidth( TranslationDatabase::getString(_textId) );
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -370,7 +394,7 @@ void FontBank::think(int _frames)
Params: Params:
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int FontBank::getStrWrapLen( char *_text,int _maxWidth ) int FontBank::getStrWrapLen( const char *_text,int _maxWidth )
{ {
int length=0,spaceW; int length=0,spaceW;
char C; char C;
@ -381,7 +405,7 @@ int FontBank::getStrWrapLen( char *_text,int _maxWidth )
C=*_text++; C=*_text++;
if (C=='\n') break; if (C=='\n') break;
if (C==' ') spaceW=length; if (C==' ') spaceW=length;
length+=getCharWidth(C)+m_fontData->charGapX; length+=getCharWidth(C)+getCharGapX();
} }
if (length>_maxWidth) length=spaceW; if (length>_maxWidth) length=spaceW;
@ -389,5 +413,79 @@ int FontBank::getStrWrapLen( char *_text,int _maxWidth )
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void ScalableFontBank::initialise( FontData *_fontData )
{
FontBank::initialise(_fontData);
setScale(256);
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int ScalableFontBank::printChar( char _char,int _x,int _y )
{
if (_char!=' ')
{
if( m_fontData->fontTab[_char]==-1 ) _char='X';
POLY_FT4 *Ft4=m_spriteBank.printFT4Scaled(m_fontData->fontTab[_char],_x,_y,0,0,m_ot,m_fontScale);
setRGB0(Ft4,m_r,m_g,m_b);
setShadeTex(Ft4,0);
Ft4->tpage|=(m_sMode<<5);
setSemiTrans(Ft4,m_trans);
setShadeTex(Ft4,0);
}
return getCharWidth(_char);
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int ScalableFontBank::getCharWidth( char _char )
{
return (FontBank::getCharWidth(_char)*m_fontScale)>>8;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int ScalableFontBank::getCharHeight()
{
return (FontBank::getCharHeight()*m_fontScale)>>8;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int ScalableFontBank::getCharGapX()
{
return (m_fontData->charGapX*m_fontScale)>>8;
}
int ScalableFontBank::getCharGapY()
{
return (m_fontData->charGapY*m_fontScale)>>8;
}
/*=========================================================================== /*===========================================================================
end */ end */

View File

@ -51,7 +51,7 @@ public:
virtual void initialise( FontData *_fontData ); virtual void initialise( FontData *_fontData );
void dump(); void dump();
int isInitialised() { return m_initialised; } int isInitialised() { return m_initialised; }
virtual void print( int _x, int _y, char *_text ); virtual void print( int _x, int _y, const char *_text );
void print( int _x, int _y, s32 _textId ); void print( int _x, int _y, s32 _textId );
void setColour( u8 _r, u8 _g, u8 _b ); void setColour( u8 _r, u8 _g, u8 _b );
void setJustification( Justification _justification ); void setJustification( Justification _justification );
@ -60,12 +60,17 @@ public:
void setTrans( int _trans ); void setTrans( int _trans );
void setSMode( int _sMode ); void setSMode( int _sMode );
int getCharWidth( char _char ); virtual int getCharWidth( char _char );
int getCharHeight(); virtual int getCharHeight();
int getStringWidth( char * text ); int getStringWidth( const char * text );
int getStringHeight( char *_text ); int getStringWidth( s32 _textId );
int getStringHeight( const char *_text );
int getStringHeight( s32 _textId );
int getStrWrapLen( char *_text,int _maxWidth ); virtual int getCharGapX();
virtual int getCharGapY();
int getStrWrapLen( const char *_text,int _maxWidth );
void setWobble(int _wobble) {m_wobble=_wobble;} void setWobble(int _wobble) {m_wobble=_wobble;}
@ -102,6 +107,26 @@ protected:
}; };
class ScalableFontBank : public FontBank
{
public:
virtual void initialise( FontData *_fontData );
void setScale(int _newScale) {m_fontScale=_newScale;}
virtual int getCharWidth( char _char );
virtual int getCharHeight();
virtual int getCharGapX();
virtual int getCharGapY();
private:
virtual int printChar( char _char,int _x,int _y );
int m_fontScale;
};
/*---------------------------------------------------------------------- */ /*---------------------------------------------------------------------- */
#endif /* __GFX_FONT_H__ */ #endif /* __GFX_FONT_H__ */