static private InnerGetCharacterFromPixelOffset ( |
||
tt | ||
pixelOffset | int | |
return |
/// <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; } }