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(); } } }
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); }
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)); }