Draw() public method

public Draw ( Graphics gr, Point position, Range range ) : void
gr System.Drawing.Graphics
position Point
range Range
return void
示例#1
0
        public override void Draw(Graphics gr, Point position, Range range)
        {
            //draw background
            if (BackgroundBrush != null)
            {
                gr.SmoothingMode = SmoothingMode.None;
                var rect = new Rectangle(position.X, position.Y, (range.End.iChar - range.Start.iChar) * range.tb.CharWidth, range.tb.CharHeight);
                if (rect.Width == 0)
                {
                    return;
                }
                gr.FillRectangle(BackgroundBrush, rect);
                //
                if (ForegroundBrush != null)
                {
                    //draw text
                    gr.SmoothingMode = SmoothingMode.AntiAlias;

                    var r = new Range(range.tb, range.Start.iChar, range.Start.iLine,
                                      Math.Min(range.tb[range.End.iLine].Count, range.End.iChar), range.End.iLine);
                    using (var style = new TextStyle(ForegroundBrush, null, FontStyle.Regular))
                        style.Draw(gr, new Point(position.X, position.Y - 1), r);
                }
            }
        }
示例#2
0
        public void Draw(Graphics gr, int startX, int from, int y, Range range, Range selection)
        {
            if (range.Start == range.End) return;
            int charW = range.tb.CharWidth;
            int charH = range.tb.CharHeight;
            Point position = new Point(startX + (range.Start.iChar - from) * charW, y);
            //draw background
            if (Background != Color.Transparent || BorderOnly) {
                gr.SmoothingMode = SmoothingMode.None;
                int alpha = Background.A > 20 ? Background.A - 20 : Background.A;
                using (var brush = new SolidBrush(Color.FromArgb(alpha, Background))) {
                    // Calculate previous and next lines selection rectangles
                    Rectangle rectPrev = new Rectangle();
                    Rectangle rectNext = new Rectangle();

                    int iLine = range.Start.iLine;
                    if (range.tb[iLine].Unavaliable) return;
                    int startChar = iLine == selection.Start.iLine ? selection.Start.iChar : 0;
                    int lastChar  = iLine == selection.End.iLine   ? selection.End  .iChar : selection.tb.Lines[iLine].Length + 1;
                    Rectangle rectBord = new Rectangle(startX + startChar * charW - 1, position.Y, (lastChar - startChar) * charW + 1, charH);

                    int prevLine = range.Start.iLine - 1;
                    if (prevLine >= selection.Start.iLine && !range.tb[prevLine].Unavaliable) {
                        startChar = 0;
                        if (prevLine == selection.Start.iLine)
                            startChar = selection.Start.iChar;
                        rectPrev = new Rectangle(startX + startChar * charW - 1, position.Y - charH, (selection.tb.Lines[prevLine].Length + 1 - startChar) * charW + 1, charH);
                    }
                    int nextLine = range.End.iLine + 1;
                    if (nextLine <= selection.End.iLine && !range.tb[nextLine].Unavaliable) {
                        if (!(nextLine == selection.End.iLine && selection.End.iChar == 0)) {
                            lastChar = nextLine == selection.End.iLine ? selection.End.iChar : selection.tb.Lines[nextLine].Length + 1;
                            rectNext = new Rectangle(startX - 1, position.Y + charH, lastChar * charW + 1, charH);
                        }
                    }

                    // draw border
                    using (Pen pen = new Pen(Border, BorderWidth)) {
                        gr.SmoothingMode = SmoothingMode.None;
                        GraphicsPath path4Fill = new GraphicsPath();
                        GraphicsPath path = GetRoundedPath1(rectBord, rectPrev, rectNext, ref path4Fill, charW);
                        path4Fill.CloseAllFigures();
                        if (!BorderOnly) gr.FillPath(brush, path4Fill);
                        gr.SmoothingMode = RoundedCornersRadius > 3 || BorderOnly ? SmoothingMode.HighQuality : SmoothingMode.None;
                        gr.DrawPath(pen, path);
                        gr.SmoothingMode = SmoothingMode.None;
                    }
                }
            }

            if (Foreground != Color.Transparent && !BorderOnly) {
                //draw text
                gr.SmoothingMode = SmoothingMode.AntiAlias;
                gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
                var r = new Range(range.tb, range.Start.iChar, range.Start.iLine, Math.Min(range.tb[range.End.iLine].Count, range.End.iChar), range.End.iLine);
                using (var brush = new SolidBrush(Foreground)) {
                    using (var style = new TextStyle(brush, null, FontStyle.Regular)) {
                        style.Draw(gr, new Point(position.X, position.Y), r);
                    }
                }
            }
        }
示例#3
0
文件: Style.cs 项目: WendyH/HMSEditor
        public override void Draw(Graphics gr, Point position, Range range)
        {
            //draw background
            if (BackgroundBrush != null)
            {
                gr.SmoothingMode = SmoothingMode.None;
                var rect = new Rectangle(position.X, position.Y, (range.End.iChar - range.Start.iChar) * range.tb.CharWidth, range.tb.CharHeight);
                if (rect.Width == 0)
                    return;
                gr.FillRectangle(BackgroundBrush, rect);
                //
                if (ForegroundBrush != null)
                {
                    //draw text
                    gr.SmoothingMode = SmoothingMode.AntiAlias;

                    var r = new Range(range.tb, range.Start.iChar, range.Start.iLine,
                                      Math.Min(range.tb[range.End.iLine].Count, range.End.iChar), range.End.iLine);
                    using (var style = new TextStyle(ForegroundBrush, null, FontStyle.Regular))
                        style.Draw(gr, new Point(position.X, position.Y - 1), r);
                }
            }
        }
示例#4
0
 public override void Draw(Graphics gr, Point position, Range range)
 {
     if (range.Start == range.End) return;
     if (range.tb.SelectionWithBorders) {
         //Point position = new Point(startX + (range.Start.iChar - from) * charW, 1 + y);
         int startX = (position.X - (range.Start.iChar * range.tb.CharWidth));
         Draw(gr, startX, 0, position.Y, range, range);
         return;
     }
     //draw background
     if (Background != Color.Transparent) {
         gr.SmoothingMode = SmoothingMode.None;
         var rect = new Rectangle(position.X, position.Y, (range.End.iChar - range.Start.iChar) * range.tb.CharWidth, range.tb.CharHeight);
         if (rect.Width <= 0) return;
         using (var brush = new SolidBrush(Color.FromArgb(Background.A - 20, Background))) {
             gr.FillRectangle(brush, rect);
         }
     }
     if (Foreground != Color.Transparent) {
         //draw text
         gr.SmoothingMode = SmoothingMode.AntiAlias;
         gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
         var r = new Range(range.tb, range.Start.iChar, range.Start.iLine, Math.Min(range.tb[range.End.iLine].Count, range.End.iChar), range.End.iLine);
         using (var brush = new SolidBrush(Foreground)) {
             using (var style = new TextStyle(brush, null, FontStyle.Regular)) {
                 style.Draw(gr, new Point(position.X, position.Y - 1), r);
             }
         }
     }
 }