|
|
|
@ -185,6 +185,28 @@ public class BitmapFont implements Savable { |
|
|
|
|
// just to create a Letters object for the sole purpose of
|
|
|
|
|
// getting a text size. It's less efficient but at least it
|
|
|
|
|
// would be accurate.
|
|
|
|
|
|
|
|
|
|
// And here I am mucking around in here again...
|
|
|
|
|
//
|
|
|
|
|
// A font character has a few values that are pertinent to the
|
|
|
|
|
// line width:
|
|
|
|
|
// xOffset
|
|
|
|
|
// xAdvance
|
|
|
|
|
// kerningAmount(nextChar)
|
|
|
|
|
//
|
|
|
|
|
// The way BitmapText ultimately works is that the first character
|
|
|
|
|
// starts with xOffset included (ie: it is rendered at -xOffset).
|
|
|
|
|
// Its xAdvance is wider to accomodate that initial offset.
|
|
|
|
|
// The cursor position is advanced by xAdvance each time.
|
|
|
|
|
//
|
|
|
|
|
// So, a width should be calculated in a similar way. Start with
|
|
|
|
|
// -xOffset + xAdvance for the first character and then each subsequent
|
|
|
|
|
// character is just xAdvance more 'width'.
|
|
|
|
|
//
|
|
|
|
|
// The kerning amount from one character to the next affects the
|
|
|
|
|
// cursor position of that next character and thus the ultimate width
|
|
|
|
|
// and so must be factored in also.
|
|
|
|
|
|
|
|
|
|
float lineWidth = 0f; |
|
|
|
|
float maxLineWidth = 0f; |
|
|
|
|
char lastChar = 0; |
|
|
|
@ -211,17 +233,27 @@ public class BitmapFont implements Savable { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!firstCharOfLine){ |
|
|
|
|
lineWidth += c.getXOffset() * sizeScale; |
|
|
|
|
lineWidth += findKerningAmount(lastChar, theChar) * sizeScale; |
|
|
|
|
} else { |
|
|
|
|
// The first character needs to add in its xOffset but it
|
|
|
|
|
// is the only one... and negative offsets = postive width
|
|
|
|
|
// because we're trying to account for the part that hangs
|
|
|
|
|
// over the left. So we subtract.
|
|
|
|
|
lineWidth -= c.getXOffset() * sizeScale; |
|
|
|
|
firstCharOfLine = false; |
|
|
|
|
} |
|
|
|
|
float xAdvance = c.getXAdvance() * sizeScale; |
|
|
|
|
|
|
|
|
|
// If this is the last character, then we really should have
|
|
|
|
|
// only add its width
|
|
|
|
|
// only add its width. The advance may include extra spacing
|
|
|
|
|
// that we don't care about.
|
|
|
|
|
if (i == text.length() - 1) { |
|
|
|
|
lineWidth += c.getWidth() * sizeScale; |
|
|
|
|
|
|
|
|
|
// Since theh width includes the xOffset then we need
|
|
|
|
|
// to take it out again by adding it, ie: offset the width
|
|
|
|
|
// we just added by the appropriate amount.
|
|
|
|
|
lineWidth += c.getXOffset() * sizeScale; |
|
|
|
|
} else { |
|
|
|
|
lineWidth += xAdvance; |
|
|
|
|
} |
|
|
|
|