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
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 -------------------------------------------------- */
/*
* 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
*/
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);
}
/*
*/
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);
}
/*
/*
* 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 ***/