Alsing.Windows.Forms.SyntaxBox.Painter.NativePainter.CharFromPixel C# (CSharp) Method

CharFromPixel() public method

Implementation of the iPainter CharFromPixel method
public CharFromPixel ( int X, int Y ) : TextPoint
X int Screen x position in pixels
Y int Screen y position in pixels
return Alsing.SourceCode.TextPoint
        public TextPoint CharFromPixel(int X, int Y)
        {
            try
            {
                int RowIndex = Y/Control.View.RowHeight + Control.View.FirstVisibleRow;
                RowIndex = Math.Min(RowIndex, Control.Document.VisibleRows.Count);
                if (RowIndex == Control.Document.VisibleRows.Count)
                {
                    RowIndex--;
                    Row r = Control.Document.VisibleRows[RowIndex];
                    if (r.IsCollapsed)
                        r = r.Expansion_EndRow;

                    return new TextPoint(r.Text.Length, r.Index);
                }

                RowIndex = Math.Max(RowIndex, 0);
                Row row;
                if (Control.Document.VisibleRows.Count != 0)
                {
                    row = Control.Document.VisibleRows[RowIndex];
                    RowIndex = Control.Document.IndexOf(row);
                }
                else
                {
                    return new TextPoint(0, 0);
                }
                if (RowIndex == -1)
                    return new TextPoint(-1, -1);


                //normal line
                if (!row.IsCollapsed)
                    return ColumnFromPixel(RowIndex, X);

                //this.RenderRow (xtr.Index,-200);

                if (X < row.Expansion_PixelEnd - Control.View.FirstVisibleColumn*Control.View.CharWidth)
                {
                    //start of collapsed line
                    return ColumnFromPixel(RowIndex, X);
                }

                if (X >= row.Expansion_EndRow.Expansion_PixelStart - Control.View.FirstVisibleColumn*Control.View.CharWidth + Control.View.TextMargin)
                {
                    //end of collapsed line
                    return ColumnFromPixel(row.Expansion_EndRow.Index, X - row.Expansion_EndRow.Expansion_PixelStart + MeasureRow(row.Expansion_EndRow, row.Expansion_EndRow.Expansion_StartChar).Width);
                }

                //the collapsed text
                return new TextPoint(row.Expansion_EndChar, row.Index);
            }
            catch
            {
                Control._SyntaxBox.FontName = "Courier New";
                Control._SyntaxBox.FontSize = 10;
                return new TextPoint(0, 0);
            }
        }