public RectangleF CalcCursorRectangle()
        {
            Paragraph         para = CurrentParagraph;
            int               x    = CursorPosition;
            ParagraphPosition pos  = para.PositionAtIndex(x);
            float             top  = para.LineOffset * LineHeight;
            float             y    = top + (pos.LineIndex * LineHeight);

            return(new RectangleF(pos.ColumnStart, y, pos.ColumnWidth, LineHeight));
        }
        public void SetCursorPosition(float x, float y)
        {
            int line = 0;

            CurrentParagraphIndex = FindParagraphIndexOnScreen(y);
            Paragraph para = CurrentParagraph;

            if (para.LineCount > 0)
            {
                line = (int)((y - para.Top - 1) / LineHeight);
            }
            ParagraphPosition pos = para.PositionAtLineWidth(x, line);

            CursorPosition = pos.Position;
            ResetCursorColoumns();
        }
        public void MoveParagraphHome()
        {
            ParagraphPosition pt = CurrentParagraph.PositionAtIndex(CursorPosition);
            int line             = pt.LineIndex;
            int col = pt.Column;

            if (col <= 0)
            {
                CursorPosition = 0;
            }
            else
            {
                CursorPosition = CurrentParagraph.PositionAtLineIndex(0, line);
            }

            ResetCursorColoumns();
            CurrentColumnBOL = true;
        }