public void AddTextSpan(Run textRun) { if (CurrentLine.IsBlankLine) { CurrentLine.AddLast(textRun); SetCurrentTextRun(textRun); CurrentLine.TextLineReCalculateActualLineSize(); CurrentLine.RefreshInlineArrange(); SetCurrentCharIndex(CharIndex + textRun.CharacterCount); } else { if (CurrentTextRun != null) { VisualPointInfo newPointInfo = CurrentLine.Split(GetCurrentPointInfo()); if (newPointInfo.IsOnTheBeginOfLine) { if (newPointInfo.Run == null) { CurrentLine.AddFirst(textRun); } else { CurrentLine.AddBefore(newPointInfo.Run, textRun); } } else { if (newPointInfo.Run == null) { CurrentLine.AddFirst(textRun); } else { CurrentLine.AddAfter(newPointInfo.Run, textRun); } } CurrentLine.TextLineReCalculateActualLineSize(); CurrentLine.RefreshInlineArrange(); EnsureCurrentTextRun(CharIndex + textRun.CharacterCount); } else { throw new NotSupportedException(); } } }
public void SplitToNewLine() { EditableRun lineBreakRun = new EditableTextRun(this.Root, '\n', this.CurrentSpanStyle); EditableRun currentRun = CurrentTextRun; if (CurrentLine.IsBlankLine) { CurrentLine.AddLast(lineBreakRun); } else { if (CharIndex == -1) { CurrentLine.AddFirst(lineBreakRun); SetCurrentTextRun(null); } else { EditableRun rightSplitedPart = EditableRun.InnerRemove(currentRun, CurrentTextRunCharIndex + 1, true); if (rightSplitedPart != null) { CurrentLine.AddAfter(currentRun, rightSplitedPart); } CurrentLine.AddAfter(currentRun, lineBreakRun); if (currentRun.CharacterCount == 0) { CurrentLine.Remove(currentRun); } } } this.TextLayer.TopDownReCalculateContentSize(); EnsureCurrentTextRun(); }