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