private void renderLine(dfDynamicFont.LineRenderInfo line, Stack <Color32> colors, Vector3 position, dfRenderData destination) { position.x = position.x + (float)this.calculateLineAlignment(line); for (int i = line.startOffset; i <= line.endOffset; i++) { dfMarkupToken item = this.tokens[i]; dfMarkupTokenType tokenType = item.TokenType; if (tokenType == dfMarkupTokenType.Text) { this.renderText(item, colors.Peek(), position, destination); } else if (tokenType != dfMarkupTokenType.StartTag) { if (tokenType == dfMarkupTokenType.EndTag && item.Matches("color") && colors.Count > 1) { colors.Pop(); } } else if (item.Matches("sprite") && this.SpriteAtlas != null && this.SpriteBuffer != null) { this.renderSprite(item, colors.Peek(), position, this.SpriteBuffer); } else if (item.Matches("color")) { colors.Push(this.parseColor(item)); } position.x = position.x + (float)item.Width; } }
public override void Render(string text, dfRenderData destination) { dfDynamicFont.DynamicFontRenderer.textColors.Clear(); dfDynamicFont.DynamicFontRenderer.textColors.Push(Color.white); this.tokenize(text); dfList <dfDynamicFont.LineRenderInfo> lineRenderInfos = this.calculateLinebreaks(); int num = 0; int num1 = 0; Vector3 vector3 = (base.VectorOffset / base.PixelRatio).CeilToInt(); for (int i = 0; i < lineRenderInfos.Count; i++) { dfDynamicFont.LineRenderInfo item = lineRenderInfos[i]; int count = destination.Vertices.Count; int num2 = (this.SpriteBuffer == null ? 0 : this.SpriteBuffer.Vertices.Count); this.renderLine(lineRenderInfos[i], dfDynamicFont.DynamicFontRenderer.textColors, vector3, destination); vector3.y = vector3.y - item.lineHeight; num = Mathf.Max((int)item.lineWidth, num); num1 = num1 + Mathf.CeilToInt(item.lineHeight); if (item.lineWidth > base.MaxSize.x) { this.clipRight(destination, count); this.clipRight(this.SpriteBuffer, num2); } this.clipBottom(destination, count); this.clipBottom(this.SpriteBuffer, num2); } Vector2 maxSize = base.MaxSize; float single = Mathf.Min(maxSize.x, (float)num); Vector2 vector2 = base.MaxSize; base.RenderedSize = new Vector2(single, Mathf.Min(vector2.y, (float)num1)) * base.TextScale; }
private int calculateLineAlignment(dfDynamicFont.LineRenderInfo line) { float single = line.lineWidth; if (base.TextAlign == TextAlignment.Left || single < 1f) { return(0); } float single1 = 0f; single1 = (base.TextAlign != TextAlignment.Right ? (base.MaxSize.x - single) * 0.5f : base.MaxSize.x - single); return(Mathf.CeilToInt(Mathf.Max(0f, single1))); }
private void calculateLineSize(dfDynamicFont.LineRenderInfo line) { dfDynamicFont font = (dfDynamicFont)base.Font; line.lineHeight = (float)font.Baseline * base.TextScale; int width = 0; for (int i = line.startOffset; i <= line.endOffset; i++) { width = width + this.tokens[i].Width; } line.lineWidth = (float)width; }
public static dfDynamicFont.LineRenderInfo Obtain(int start, int end) { if (dfDynamicFont.LineRenderInfo.poolIndex >= dfDynamicFont.LineRenderInfo.pool.Count - 1) { dfDynamicFont.LineRenderInfo.pool.Add(new dfDynamicFont.LineRenderInfo()); } dfList <dfDynamicFont.LineRenderInfo> lineRenderInfos = dfDynamicFont.LineRenderInfo.pool; int num = dfDynamicFont.LineRenderInfo.poolIndex; dfDynamicFont.LineRenderInfo.poolIndex = num + 1; dfDynamicFont.LineRenderInfo item = lineRenderInfos[num]; item.startOffset = start; item.endOffset = end; item.lineHeight = 0f; return(item); }