// Token: 0x060040D4 RID: 16596 RVA: 0x000ED26C File Offset: 0x000EB46C public float[] GetCharacterWidths(string text, int startIndex, int endIndex, out float totalWidth) { totalWidth = 0f; global::dfFont dfFont = (global::dfFont)base.Font; float[] array = new float[text.Length]; float num = base.TextScale * base.PixelRatio; float num2 = (float)base.CharacterSpacing * num; for (int i = startIndex; i <= endIndex; i++) { global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(text[i]); if (glyph != null) { if (i > 0) { array[i - 1] += num2; totalWidth += num2; } float num3 = (float)glyph.xadvance * num; array[i] = num3; totalWidth += num3; } } return(array); }
// Token: 0x060040E0 RID: 16608 RVA: 0x000EE198 File Offset: 0x000EC398 private void calculateTokenRenderSize(global::dfMarkupToken token) { try { global::dfFont dfFont = (global::dfFont)base.Font; int num = 0; char previousChar = '\0'; bool flag = token.TokenType == global::dfMarkupTokenType.Whitespace || token.TokenType == global::dfMarkupTokenType.Text; if (flag) { int i = 0; while (i < token.Length) { char c = token[i]; if (c == '\t') { num += base.TabSize; } else { global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(c); if (glyph != null) { if (i > 0) { num += dfFont.GetKerning(previousChar, c); num += base.CharacterSpacing; } num += glyph.xadvance; } } i++; previousChar = c; } } else if (token.TokenType == global::dfMarkupTokenType.StartTag && token.Matches("sprite")) { if (token.AttributeCount < 1) { throw new Exception("Missing sprite name in markup"); } Texture texture = dfFont.Texture; int lineHeight = dfFont.LineHeight; string value = token.GetAttribute(0).Value.Value; global::dfAtlas.ItemInfo itemInfo = dfFont.atlas[value]; if (itemInfo != null) { float num2 = itemInfo.region.width * (float)texture.width / (itemInfo.region.height * (float)texture.height); num = Mathf.CeilToInt((float)lineHeight * num2); } } token.Height = base.Font.LineHeight; token.Width = num; } finally { } }
// Token: 0x060040D8 RID: 16600 RVA: 0x000ED608 File Offset: 0x000EB808 private void renderText(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData destination) { try { global::dfList <Vector3> vertices = destination.Vertices; global::dfList <int> triangles = destination.Triangles; global::dfList <Color32> colors = destination.Colors; global::dfList <Vector2> uv = destination.UV; global::dfFont dfFont = (global::dfFont)base.Font; global::dfAtlas.ItemInfo itemInfo = dfFont.Atlas[dfFont.sprite]; Texture texture = dfFont.Texture; float num = 1f / (float)texture.width; float num2 = 1f / (float)texture.height; float num3 = num * 0.125f; float num4 = num2 * 0.125f; float num5 = base.TextScale * base.PixelRatio; char previousChar = '\0'; Color32 color2 = this.applyOpacity(this.multiplyColors(color, base.DefaultColor)); Color32 item = color2; if (base.BottomColor != null) { item = this.applyOpacity(this.multiplyColors(color, base.BottomColor.Value)); } int i = 0; while (i < token.Length) { char c = token[i]; if (c != '\0') { global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(c); if (glyph != null) { int kerning = dfFont.GetKerning(previousChar, c); float num6 = position.x + (float)(glyph.xoffset + kerning) * num5; float num7 = position.y - (float)glyph.yoffset * num5; float num8 = (float)glyph.width * num5; float num9 = (float)glyph.height * num5; float num10 = num6 + num8; float num11 = num7 - num9; Vector3 vector; vector..ctor(num6, num7); Vector3 vector2; vector2..ctor(num10, num7); Vector3 vector3; vector3..ctor(num10, num11); Vector3 vector4; vector4..ctor(num6, num11); float num12 = itemInfo.region.x + (float)glyph.x * num - num3; float num13 = itemInfo.region.yMax - (float)glyph.y * num2 - num4; float num14 = num12 + (float)glyph.width * num - num3; float num15 = num13 - (float)glyph.height * num2 + num4; if (base.Shadow) { global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles); Vector3 vector5 = base.ShadowOffset * num5; vertices.Add(vector + vector5); vertices.Add(vector2 + vector5); vertices.Add(vector3 + vector5); vertices.Add(vector4 + vector5); Color32 item2 = this.applyOpacity(base.ShadowColor); colors.Add(item2); colors.Add(item2); colors.Add(item2); colors.Add(item2); uv.Add(new Vector2(num12, num13)); uv.Add(new Vector2(num14, num13)); uv.Add(new Vector2(num14, num15)); uv.Add(new Vector2(num12, num15)); } if (base.Outline) { for (int j = 0; j < global::dfFont.BitmappedFontRenderer.OUTLINE_OFFSETS.Length; j++) { global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles); Vector3 vector6 = global::dfFont.BitmappedFontRenderer.OUTLINE_OFFSETS[j] * (float)base.OutlineSize * num5; vertices.Add(vector + vector6); vertices.Add(vector2 + vector6); vertices.Add(vector3 + vector6); vertices.Add(vector4 + vector6); Color32 item3 = this.applyOpacity(base.OutlineColor); colors.Add(item3); colors.Add(item3); colors.Add(item3); colors.Add(item3); uv.Add(new Vector2(num12, num13)); uv.Add(new Vector2(num14, num13)); uv.Add(new Vector2(num14, num15)); uv.Add(new Vector2(num12, num15)); } } global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles); vertices.Add(vector); vertices.Add(vector2); vertices.Add(vector3); vertices.Add(vector4); colors.Add(color2); colors.Add(color2); colors.Add(item); colors.Add(item); uv.Add(new Vector2(num12, num13)); uv.Add(new Vector2(num14, num13)); uv.Add(new Vector2(num14, num15)); uv.Add(new Vector2(num12, num15)); position.x += (float)(glyph.xadvance + kerning + base.CharacterSpacing) * num5; } } i++; previousChar = c; } } finally { } }