public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite) { // render info text string text = "Size=" + rt.Size.X.ToString("0000.00") + ";" + rt.Size.Y.ToString("0000.00"); var fontSize = display.measureLineInPixels(text, "debug", 1f); float fontScale = Math.Min((rt.Size.X * 0.8f) / fontSize.X, (rt.Size.Y * 0.8f) / fontSize.Y); var font = MySprite.CreateText(text, "debug", Color.White, fontScale); font.Position = new Vector2(rt.Size.X * 0.5f, fontSize.Y * fontScale + 10.0f) + rt.DisplayOffset; addSprite(font); // render edges Vector2 blockSize = new Vector2(20f, 20f); addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, (rt.Size / 2f) + rt.DisplayOffset, blockSize, Color.White)); addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, (blockSize / 2f) + rt.DisplayOffset, blockSize, Color.Red)); addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, new Vector2(rt.Size.X - blockSize.X / 2f, blockSize.Y / 2f) + rt.DisplayOffset, blockSize, Color.Green)); addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, new Vector2(blockSize.X / 2f, rt.Size.Y - blockSize.Y / 2f) + rt.DisplayOffset, blockSize, Color.Blue)); addSprite(new MySprite(SpriteType.TEXTURE, IconNameSquareSimple, (rt.Size - (blockSize / 2f)) + rt.DisplayOffset, blockSize, Color.Yellow)); }
public override void prepareRendering(Display display) { float fontSize = FontSize; bool dynFontSize = fontSize == 0f || (useDefaultFont_ && sizeIsSet); RenderDataText renderData = RenderData as RenderDataText; renderData.Lines = new List <string>(); Vector2 maxSize = new Vector2(0f, 0f); Func <string, string> calcMaxSize = (text) => { string line = processTextLine(text); Vector2 lineSize = display.measureLineInPixels(line, Font, dynFontSize ? 1f : fontSize); maxSize.X = Math.Max(maxSize.X, lineSize.X); maxSize.Y = Math.Max(maxSize.Y, lineSize.Y); return(line); }; foreach (string text in text_) { // add text from display text field if (text == "%display_text_field%") { string[] lines = display.Text.Split('\n'); foreach (string line in lines) { renderData.Lines.Add(calcMaxSize(line)); } } else { renderData.Lines.Add(calcMaxSize(text)); } } if (dynFontSize) { //Vector2 size = SizeType == Graphic.ValueType.Relative ? Size * display.RenderArea.Size : Size; base.prepareRendering(display); renderData.FontSize = Math.Min(renderData.InnerSize.X / maxSize.X, renderData.InnerSize.Y / (maxSize.Y * renderData.Lines.Count)); renderData.LineHeight = maxSize.Y * renderData.FontSize; } else { Size = new Vector2(maxSize.X, maxSize.Y * renderData.Lines.Count); SizeType = ValueType.Absolute; base.prepareRendering(display); var min = Math.Min(renderData.InnerSize.X / maxSize.X, renderData.InnerSize.Y / (maxSize.Y * renderData.Lines.Count)); renderData.FontSize = fontSize * min; renderData.LineHeight = maxSize.Y * min; } //Vector2 position = PositionType == Graphic.ValueType.Relative ? Position * display.RenderArea.Size : Position; renderData.TextPosition = new Vector2(renderData.Position.X, renderData.Position.Y - ((renderData.LineHeight * (renderData.Lines.Count - 1)) * 0.5f)); if (Gradient.Count > 0) { renderData.FontColor = DataAccessor != null?getGradientColor((float)DataAccessor.indicator()) : Color; } else { renderData.FontColor = FontColor; } renderData.Visible = DataAccessor != null?isVisible(DataAccessor.indicator()) : true; }