Beispiel #1
0
            public override void render(Display display, RenderTarget rt, AddSpriteDelegate addSprite)
            {
                RenderDataText renderData = RenderData as RenderDataText;

                if (!renderData.Visible)
                {
                    return;
                }

                for (int c = 0; c < renderData.Lines.Count; c++)
                {
                    renderTextLine(display, rt, addSprite, Font, renderData.FontSize,
                                   new Vector2(renderData.TextPosition.X, renderData.TextPosition.Y + (c * renderData.LineHeight)),
                                   renderData.FontColor, renderData.Lines[c], TextAlignment);
                }
            }
Beispiel #2
0
            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;
            }