public void Calculate(string str, OGTextStyle style, float size, Rect rect) { lineHeight = style.font.info.lineSpacing * size; LineInfo line = NewLine(0); int lastSpace = 0; float lineWidthAtLastSpace = 0; float space = (style.font.GetCharacterInfo(" "[0]).width *size); float right = rect.width - style.padding.right - style.padding.left; int c = 0; for (c = 0; c < str.Length; c++) { OGCharacterInfo info = style.font.GetCharacterInfo(str[c]); // This character is a carriage return if (str[c] == "\n"[0]) { line.End(c); line = NewLine(line.end); // This character is a space } else if (info.space) { line.width += space; lastSpace = c; // The line width has exceeded the border if (line.width >= right) { line.width = lineWidthAtLastSpace; c = lastSpace == 0 ? lastSpace : c; line.End(c - 1); line = NewLine(c + 1); } else { lineWidthAtLastSpace = line.width - space; line.AddChar(info); } // This character is a regular glyph } else { line.width += info.width * size; // The line width has exceeded the border if (line.width >= right) { line.width = lineWidthAtLastSpace; c = lastSpace == 0 ? lastSpace : c; line.End(c - 1); line = NewLine(c + 1); } else { line.AddChar(info); } } } line.End(c); length = lIndex; lIndex = 0; }