예제 #1
0
            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));
            }
예제 #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;
            }