public RectangleF MeasureStringF ( string text, float tracking=0 ) {
float x = 0;
float length = text.Length;
int line = 1;
float maxWidth = 0;
for (int i=0; i<length; i++) {
char ch0 = text[i];
char ch1 = (i+1)<length ? text[i+1] : '\0';
if (ch0 == '\n') {
line++;
maxWidth = Math.Max( maxWidth, x );
}
var chi = GetInfo(ch0);
var chPair = new Tuple<char,char>(ch0,ch1);
var kerning = GetKerning( ch0, ch1 );
x += chi.xAdvance;
x += kerning;
x += tracking;
maxWidth = Math.Max( maxWidth, x );
}
return new RectangleF( 0, 0, maxWidth, line * fontInfo.lineHeight );
}