public VisualPointInfo GetTextPointInfoFromCaretPoint(int caretX)
{
int accTextRunWidth = 0; int accTextRunCharCount = 0;
EditableRun lastestTextRun = null;
foreach (EditableRun t in this)
{
lastestTextRun = t;
int thisTextRunWidth = t.Width;
if (accTextRunWidth + thisTextRunWidth > caretX)
{
EditableRunCharLocation localPointInfo = t.GetCharacterFromPixelOffset(caretX - thisTextRunWidth);
EditableVisualPointInfo pointInfo =
new EditableVisualPointInfo(this, accTextRunCharCount + localPointInfo.charIndex);
pointInfo.SetAdditionVisualInfo(t, accTextRunCharCount, caretX, accTextRunWidth);
return pointInfo;
}
else
{
accTextRunWidth += thisTextRunWidth;
accTextRunCharCount += t.CharacterCount;
}
}
if (lastestTextRun != null)
{
return null;
}
else
{
EditableVisualPointInfo pInfo = new EditableVisualPointInfo(this, -1);
pInfo.SetAdditionVisualInfo(null, accTextRunCharCount, caretX, accTextRunWidth);
return pInfo;
}
}