コード例 #1
0
        public TextRenderer(Editor editor)
        {
            Editor        = editor;
            Font          = editor.Font;
            TextColorizer = new TextColorizer();

            LineBuffer = new List <string>();
        }
コード例 #2
0
        public void Draw(RenderContext context)
        {
            for (var i = Editor.Window.Top; i < Editor.Window.Bottom; i++)
            {
                if (i >= LineBuffer.Count)
                {
                    break;
                }

                var linePosition = Editor.CalculateLinePosition(i - Editor.Window.Top);

                if (DisableSyntaxHighlighter)
                {
                    context.DrawString(
                        Font,
                        LineBuffer[i],
                        linePosition,
                        (c, i, p, g) => new GlyphTransformData(p)
                    {
                        Color = EditorColors.EditorForeground
                    });
                }
                else
                {
                    var colorizedSegments = TextColorizer.Colorize(LineBuffer[i]);

                    var currentOffsetX = 0;
                    for (var j = 0; j < colorizedSegments.Count; j++)
                    {
                        context.DrawString(
                            Font,
                            colorizedSegments[j].Value,
                            new Vector2(
                                linePosition.X + currentOffsetX,
                                linePosition.Y
                                ),
                            (c, i, p, g) => new GlyphTransformData(p)
                        {
                            Position = new Vector2(p.X, p.Y),
                            Color    = colorizedSegments[j].Color
                        }
                            );

                        currentOffsetX += (colorizedSegments[j].Value).Length * VerticalGranularity;
                    }
                }
            }
        }