Esempio n. 1
0
        public void Draw(IBatchedDrawingService drawingService, IDocumentView <TDocument> view)
        {
            if (Offset == null || EndOffset == null)
            {
                return;
            }

            Rectangle start;

            view.ModelToView(Offset.Offset, out start);
            if (Offset.Bias == Bias.Backward)
            {
                start.Width = 0;
            }

            Rectangle end;

            view.ModelToView(EndOffset.Offset, out end);
            if (EndOffset.Bias == Bias.Backward)
            {
                end.Width = 0;
            }

            var bounds = view.LayoutRect;

            if (start.Y == end.Y)
            {
                // same line. Can take shortcut ..
                drawingService.FillRect(start.Union(end), Color);
            }
            else
            {
                // draw first line
                drawingService.FillRect(new Rectangle(start.X, start.Y, bounds.Right - start.X, start.Height), Color);

                // draw inbetween lines using the full view-width as bounds
                drawingService.FillRect(new Rectangle(bounds.X, start.Bottom, bounds.Width, end.Y - start.Bottom), Color);

                // draw last line
                drawingService.FillRect(new Rectangle(bounds.X, end.Y, end.Right - bounds.X, end.Height), Color);
            }
        }