Exemplo n.º 1
0
        public void AttachBuffer(IBuffer buf)
        {
            var buffer = buf as DocumentBuffer;

            if (buffer == null)
            {
                throw new NotSupportedException();
            }

            if (Buffer != null && buffer != Buffer)
            {
                DetachBuffer();
            }
            else if (Buffer == buffer)
            {
                return;
            }

            var @lock = Buffer?.ObtainLock();

            try
            {
                buffer.LastAccess = DateTime.Now;

                if (buffer != Buffer)
                {
                    buffer.Editors.Add(this);
                    Buffer = buffer;
                }

                if (Buffer.GrammarKey == null)
                {
                    Buffer.GrammarKey = App.Component <IModeManager>()
                                        .SelectMode(buffer.File).Key;
                }

                Scroll.InvalidateLines(InvalidateFlags.Force);
                Scroll.ScrollPosition = buffer.ScrollPosition;
                Styles.RestyleDocument();
                Folding.RebuildFolding(full: true);
                Redraw();
                MatchBrackets.Match();
                Search.HideSearch();
                TopMargins.ResetMargins();
                BottomMargins.ResetMargins();
                LeftMargins.ResetMargins();
                RightMargins.ResetMargins();
            }
            finally
            {
                if (@lock != null)
                {
                    @lock.Release();
                }
            }
        }
Exemplo n.º 2
0
        protected override void OnPaint(PaintEventArgs e)
        {
            if (Buffer == null)
            {
                return;
            }

            var dt = DateTime.Now;

            CaretRenderer.Suspend();

            e.Graphics.FillRectangle(Theme.GetStyle(StandardStyle.Default).BackColor.Brush(),
                                     new Rectangle(Info.TextLeft, Info.TextTop, Info.TextWidth, Info.TextHeight));

            e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
            Renderer.DrawMargins(0, e.Graphics, TopMargins);
            Renderer.DrawMargins(0, e.Graphics, LeftMargins);
            e.Graphics.TranslateTransform(Scroll.ScrollPosition.X, Scroll.ScrollPosition.Y);

            var carets = new List <CaretData>();

            Renderer.DrawLines(e.Graphics, carets);

            e.Graphics.ResetTransform();

            Renderer.DrawLongLineIndicators(e.Graphics);
            Renderer.DrawWordWrapColumn(e.Graphics);

            Renderer.DrawMargins(Info.TextBottom, e.Graphics, BottomMargins);
            if (RightMargins.Count > 0)
            {
                Renderer.DrawMargins(ClientSize.Width - RightMargins.First().CalculateSize(), e.Graphics, RightMargins);
            }

            e.Graphics.TranslateTransform(Scroll.ScrollPosition.X, Scroll.ScrollPosition.Y);

            if (!LimitedMode || Focused)
            {
                foreach (var c in carets)
                {
                    CaretRenderer.DrawCaret(e.Graphics, c.X, c.Y, c.Blink);
                }
            }

            if (Scroll.ScrollPosition.X != 0)
            {
                var cs = Theme.GetStyle(StandardStyle.Default);
                e.Graphics.FillRectangle(ControlPaint.Dark(cs.BackColor, .05f).Brush(),
                                         new Rectangle(Info.TextLeft - Scroll.ScrollPosition.X,
                                                       Info.TextTop - Scroll.ScrollPosition.Y, Dpi.GetWidth(2),
                                                       Info.TextHeight + BottomMargins.TotalWidth));
            }

            Console.WriteLine("OnPaint time: " + (DateTime.Now - dt).TotalMilliseconds);
            base.OnPaint(e);
        }
Exemplo n.º 3
0
 public StandardEditor(EditorSettings settings) : base(settings)
 {
     Dock = DockStyle.Fill;
     LeftMargins.Add(new LineNumberMargin(this)
     {
         MarkCurrentLine = true
     });
     LeftMargins.Add(new FoldingMargin(this));
     RightMargins.Add(new VerticalScrollBarMargin(this));
     BottomMargins.Add(new ScrollBarMargin(this, Orientation.Horizontal));
     TopMargins.Add(new TopMargin(this));
 }