X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=freeglut-1.3%2Ffreeglut_font.c;h=59d70eb7df6499865af6239f2f829fb090c19c6e;hb=84462a971a28979890db5710136ced4889af1b57;hp=64a9278544cdd973de54e8484c70f9236f3f1d26;hpb=a86a957ae87e1b07260edec971ebdf5a98ff3d54;p=freeglut diff --git a/freeglut-1.3/freeglut_font.c b/freeglut-1.3/freeglut_font.c index 64a9278..59d70eb 100644 --- a/freeglut-1.3/freeglut_font.c +++ b/freeglut-1.3/freeglut_font.c @@ -53,6 +53,8 @@ extern SFG_Font fgFontHelvetica12; extern SFG_Font fgFontHelvetica18; extern SFG_Font fgFontTimesRoman10; extern SFG_Font fgFontTimesRoman24; +extern SFG_StrokeFont fgStrokeRoman; +extern SFG_StrokeFont fgStrokeMonoRoman; /* * This is for GLUT binary compatibility, as suggested by Steve Baker @@ -97,6 +99,26 @@ static SFG_Font* fghFontByID( void* font ) return 0; } +/* + * Matches a font ID with a SFG_StrokeFont structure pointer. + * This was changed to match the GLUT header style. + */ +static SFG_StrokeFont* fghStrokeByID( void* font ) +{ + /* + * Try matching the font ID and the font data structure + */ + if( font == GLUT_STROKE_ROMAN ) return( &fgStrokeRoman ); + if( font == GLUT_STROKE_MONO_ROMAN ) return( &fgStrokeMonoRoman ); + + /* + * This probably is the library user's fault + */ + fgError( "stroke font 0x%08x not found", font ); + + return 0; +} + /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ @@ -115,7 +137,7 @@ void FGAPIENTRY glutBitmapCharacter( void* fontID, int character ) /* * Make sure the character we want to output is valid */ - freeglut_return_if_fail( character > 0 && character < 256 ); + freeglut_return_if_fail( character >= 0 && character < 256 ); /* * Then find the character we want to draw @@ -187,10 +209,36 @@ int FGAPIENTRY glutBitmapWidth( void* fontID, int character ) */ void FGAPIENTRY glutStrokeCharacter( void* fontID, int character ) { + const SFG_StrokeChar *schar; + const SFG_StrokeStrip *strip; + int i, j; + /* - * Stroke fonts are not supported yet, use a bitmap font instead + * First of all we'll need a font to use */ - glutBitmapCharacter( GLUT_BITMAP_8_BY_13, character ); + SFG_StrokeFont* font = fghStrokeByID( fontID ); + + /* + * Make sure the character we want to output is valid + */ + freeglut_return_if_fail( character >= 0 && character < font->Quantity ); + + schar = font->Characters[character]; + + freeglut_return_if_fail( schar ); + + strip = schar->Strips; + + for (i = 0; i < schar->Number; i++, strip++) + { + glBegin(GL_LINE_STRIP); + for(j = 0; j < strip->Number; j++) + { + glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y); + } + glEnd(); + } + glTranslatef(schar->Right, 0.0, 0.0); } /* @@ -198,10 +246,22 @@ void FGAPIENTRY glutStrokeCharacter( void* fontID, int character ) */ int FGAPIENTRY glutStrokeWidth( void* fontID, int character ) { + const SFG_StrokeChar *schar; /* - * Stroke fonts are not supported yet, use a bitmap font instead + * First of all we'll need a font to use + */ + SFG_StrokeFont* font = fghStrokeByID( fontID ); + + /* + * Make sure the character we want to output is valid */ - return( glutBitmapWidth( GLUT_BITMAP_8_BY_13, character ) ); + freeglut_return_if_fail( character >= 0 && character < font->Quantity ); + + schar = font->Characters[character]; + + freeglut_return_if_fail( schar ); + + return (schar->Right); } /* @@ -261,13 +321,17 @@ int FGAPIENTRY glutBitmapHeight( void* fontID ) /* * Returns the height of a stroke font */ -int FGAPIENTRY glutStrokeHeight( void* font ) +GLfloat FGAPIENTRY glutStrokeHeight( void* fontID ) { /* - * Stroke fonts are currently not implemented. - * Using GLUT_BITMAP_8_BY_13 bitmap font instead + * See which font are we queried about */ - return( glutBitmapHeight( GLUT_BITMAP_8_BY_13 ) ); + SFG_StrokeFont* font = fghStrokeByID( fontID ); + + /* + * Return the character set's height + */ + return( font->Height ); } /*** END OF FILE ***/