public void AddTextSpan(EditableRun 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) { CurrentLine.AddBefore((EditableRun)newPointInfo.TextRun, textRun); } else { CurrentLine.AddAfter((EditableRun)newPointInfo.TextRun, textRun); } CurrentLine.TextLineReCalculateActualLineSize(); CurrentLine.RefreshInlineArrange(); EnsureCurrentTextRun(CharIndex + textRun.CharacterCount); } else { throw new NotSupportedException(); } } }
public void ReplaceAllLineContent(EditableRun[] runs) { int charIndex = CharIndex; CurrentLine.Clear(); int j = runs.Length; for (int i = 0; i < j; ++i) { CurrentLine.AddLast(runs[i]); } EnsureCurrentTextRun(charIndex); }
public void AddCharacter(char c) { if (CurrentLine.IsBlankLine) { //TODO: review here, enable this feature or not //some char can't be a start char on blank line if (!InternalTextLayerController.CanCaretStopOnThisChar(c)) { return; } // //1. new EditableRun t = new EditableTextRun(this.RootGfx, c, this.CurrentSpanStyle); var owner = this.FlowLayer.OwnerRenderElement; CurrentLine.AddLast(t); SetCurrentTextRun(t); } else { EditableRun cRun = CurrentTextRun; if (cRun != null) { if (cRun.IsInsertable) { cRun.InsertAfter(CurrentTextRunCharIndex, c); } else { AddTextSpan(new EditableTextRun(this.RootGfx, c, this.CurrentSpanStyle)); return; } } else { throw new NotSupportedException(); } } CurrentLine.TextLineReCalculateActualLineSize(); CurrentLine.RefreshInlineArrange(); SetCurrentCharStepRight(); }
public void AddCharacter(char c) { if (CurrentLine.IsBlankLine) { //TODO: review here, enable this feature or not //some char can't be a start char on blank line if (!TextFlowEditSession.CanCaretStopOnThisChar(c)) { return; } // //1. new var run = new TextRun(this.CurrentSpanStyle, new char[] { c }); CurrentLine.AddLast(run); SetCurrentTextRun(run); } else { Run run = CurrentTextRun; if (run != null) { if (run.IsInsertable) { run.InsertAfter(CurrentTextRunCharIndex, c); } else { AddTextSpan(new TextRun(CurrentSpanStyle, new char[] { c })); return; } } else { throw new NotSupportedException(); } } CurrentLine.TextLineReCalculateActualLineSize(); CurrentLine.RefreshInlineArrange(); SetCurrentCharStepRight(); }
public void AddCharacter(char c) { if (CurrentLine.IsBlankLine) { //1. new EditableRun t = new EditableTextRun(this.Root, c, this.CurrentSpanStyle); var owner = this.FlowLayer.OwnerRenderElement; CurrentLine.AddLast(t); SetCurrentTextRun(t); } else { EditableRun cRun = CurrentTextRun; if (cRun != null) { if (cRun.IsInsertable) { cRun.InsertAfter(CurrentTextRunCharIndex, c); } else { AddTextSpan(new EditableTextRun(this.Root, c, this.CurrentSpanStyle)); return; } } else { throw new NotSupportedException(); } } CurrentLine.TextLineReCalculateActualLineSize(); CurrentLine.RefreshInlineArrange(); CharIndex++; }
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(); }