InnerGetCharacterFromPixelOffset() статический приватный Метод

static private InnerGetCharacterFromPixelOffset ( EditableRun tt, int pixelOffset ) : EditableRunCharLocation
tt EditableRun
pixelOffset int
Результат EditableRunCharLocation
        /// <summary>
        /// try set caret x pos to nearest request value
        /// </summary>
        /// <param name="value"></param>
        public void TrySetCaretXPos(int value)
        {
            if (currentTextRun == null)
            {
                caret_char_index = 0;
                caretXPos        = 0;
                rCharOffset      = 0;
                rPixelOffset     = 0;
                return;
            }
            int pixDiff = value - caretXPos;

            if (pixDiff > 0)
            {
                do
                {
                    int thisTextRunPixelLength = currentTextRun.Width;
                    if (rPixelOffset + thisTextRunPixelLength > value)
                    {
                        EditableRunCharLocation foundLocation = EditableRun.InnerGetCharacterFromPixelOffset(currentTextRun, value - rPixelOffset);
                        caretXPos        = rPixelOffset + foundLocation.pixelOffset;
                        caret_char_index = rCharOffset + foundLocation.RunCharIndex;

                        //if (foundLocation.charIndex == -1)
                        //{
                        //    if (!(MoveToPreviousTextRun()))
                        //    {
                        //        caretXPos = 0;
                        //        caret_char_index = 0;
                        //    }
                        //}
                        //else
                        //{
                        //    caretXPos = rPixelOffset + foundLocation.pixelOffset;
                        //    caret_char_index = rCharOffset + foundLocation.charIndex;
                        //}
                        return;
                    }
                } while (MoveToNextTextRun());
                //to the last
                caretXPos        = rPixelOffset + currentTextRun.Width;
                caret_char_index = rCharOffset + currentTextRun.CharacterCount;
                return;
            }
            else if (pixDiff < 0)
            {
                do
                {
                    if (value >= rPixelOffset)
                    {
                        EditableRunCharLocation foundLocation = EditableRun.InnerGetCharacterFromPixelOffset(currentTextRun, value - rPixelOffset);
                        caretXPos        = rPixelOffset + foundLocation.pixelOffset;
                        caret_char_index = rCharOffset + foundLocation.RunCharIndex;

                        //if (foundLocation.charIndex == -1)
                        //{
                        //    if (!MoveToPreviousTextRun())
                        //    {
                        //        caret_char_index = 0;
                        //        caretXPos = 0;
                        //    }
                        //}
                        //else
                        //{
                        //    caretXPos = rPixelOffset + foundLocation.pixelOffset;
                        //    caret_char_index = rCharOffset + foundLocation.RunCharIndex;
                        //}
                        return;
                    }
                } while (MoveToPreviousTextRun());//
                caretXPos        = 0;
                caret_char_index = 0;
                return;
            }
        }