/// <summary> /// </summary> public ICaretPosition MoveToPreviousCaretPosition() { ICaretPosition position = this.Position; Int32 textInsertionIndex = position.TextInsertionIndex; if (textInsertionIndex == 0) { return(position); } if (textInsertionIndex == _editorView.TextBuffer.GetStartOfLineFromPosition(textInsertionIndex)) { Int32 startOfPreviousLineFromPosition = _editorView.TextBuffer.GetStartOfPreviousLineFromPosition(textInsertionIndex); Int32 endOfLineFromPosition = _editorView.TextBuffer.GetEndOfLineFromPosition(startOfPreviousLineFromPosition); if (textInsertionIndex > endOfLineFromPosition) { return(this.MoveTo(endOfLineFromPosition, CaretPlacement.LeftOfCharacter)); } return(this.MoveTo(textInsertionIndex, CaretPlacement.RightOfCharacter)); } Span textElementSpan = _editorView.GetTextElementSpan((position.CharacterIndex > 0) ? (position.CharacterIndex - 1) : 0); if (!_overwriteMode) { return(this.MoveTo((position.Placement == CaretPlacement.RightOfCharacter) ? ((position.CharacterIndex == 0) ? textElementSpan.Start : textElementSpan.End) : textElementSpan.Start, CaretPlacement.LeftOfCharacter)); } return(this.MoveTo(textElementSpan.Start, CaretPlacement.LeftOfCharacter)); }
/// <summary> /// </summary> public ICaretPosition MoveTo(Int32 characterIndex, CaretPlacement caretPlacement) { if (_overwriteMode) { caretPlacement = CaretPlacement.LeftOfCharacter; } ICaretPosition oldPosition = this.Position; Span textElementSpan = _editorView.GetTextElementSpan(characterIndex); if (textElementSpan == null) { return(oldPosition); } _caretPlacement = caretPlacement; if ((_caretPlacement == CaretPlacement.RightOfCharacter) && (characterIndex < _editorView.TextBuffer.Length)) { _insertionPoint = new TextPoint(_editorView.TextBuffer, textElementSpan.End); } else { _insertionPoint = new TextPoint(_editorView.TextBuffer, textElementSpan.Start); } ICaretPosition position = this.Position; this.PositionChanged(this, new CaretPositionChangedEventArgs(oldPosition, position)); return(position); }
public CaretDisplay(Widget container, ICaretPosition caretPos, ICaretParams caretParams) { this.container = container; this.caretPos = caretPos; this.caretParams = caretParams; container.CompoundPostPresenter.Add(caretParams.CaretPresenter); container.Tasks.Add(CaretDisplayTask()); }
public SelectionPresenter( Widget container, ICaretPosition selectionStart, ICaretPosition selectionEnd, SelectionParams selectionParams) { this.selectionStart = selectionStart; this.selectionEnd = selectionEnd; this.selectionParams = selectionParams; container.CompoundPresenter.Add(this); }
public void AssignFrom(ICaretPosition c) { line = c.Line; col = c.Col; textPos = c.TextPos; worldPos = c.WorldPos; isVisible = c.IsVisible; var cp = c as CaretPosition; if (cp != null) { Valid = cp.Valid; } }
public bool MoveHoverCaretToTargetPosition(ICaretPosition position) { if (position.Lyric == null) { return(false); } if (!CaretPositionMovable(position)) { return(false); } BindableHoverCaretPosition.Value = position; return(true); }
private Rectangle RenderHelper(SpriteList spriteList, ICaretPosition caret) { var lines = SplitText(DisplayText); if (TrimWhitespaces) { TrimLinesWhitespaces(lines); } var pos = new Vector2(0, Padding.Top + CalcVerticalTextPosition(lines)); caret.StartSync(); if (String.IsNullOrEmpty(DisplayText)) { pos.X = CalcXByAlignment(lineWidth: 0); caret.EmptyText(pos); return(Rectangle.Empty); } caret.ClampTextPos(DisplayText.Length); caret.ClampLine(lines.Count); Rectangle rect = new Rectangle(Vector2.PositiveInfinity, Vector2.NegativeInfinity); int i = 0; foreach (var line in lines) { bool lastLine = ++i == lines.Count; caret.ClampCol(line.Length - (lastLine ? 0 : 1)); float lineWidth = MeasureTextLine(line).X; pos.X = CalcXByAlignment(lineWidth); if (spriteList != null) { Renderer.DrawTextLine( Font, pos, line, Color4.White, FontHeight, 0, line.Length, letterSpacing, spriteList, caret.Sync, -1); } Rectangle lineRect = new Rectangle(pos.X, pos.Y, pos.X + lineWidth, pos.Y + FontHeight); if (lastLine) { // There is no end-of-text character, so simulate it. caret.Sync(line.Length, new Vector2(lineRect.Right, lineRect.Top), Vector2.Down * fontHeight); } pos.Y += Spacing + FontHeight; caret.NextLine(); rect = Rectangle.Bounds(rect, lineRect); } caret.FinishSync(); return(rect); }
/// <summary> /// </summary> public ICaretPosition MoveToNextCaretPosition() { ICaretPosition position = this.Position; if (position.TextInsertionIndex >= _editorView.TextBuffer.Length) { return(position); } Int32 endOfLineFromPosition = _editorView.TextBuffer.GetEndOfLineFromPosition(position.TextInsertionIndex); if (position.TextInsertionIndex >= endOfLineFromPosition) { return(this.MoveTo(_editorView.TextBuffer.GetStartOfNextLineFromPosition(endOfLineFromPosition), CaretPlacement.LeftOfCharacter)); } Span textElementSpan = _editorView.GetTextElementSpan(position.TextInsertionIndex); if (!_overwriteMode) { return(this.MoveTo(textElementSpan.Start, CaretPlacement.RightOfCharacter)); } return(this.MoveTo(textElementSpan.End, CaretPlacement.LeftOfCharacter)); }
public void Add(ICaretPosition c) => carets.Add(c);
public void AssignFrom(ICaretPosition c) { throw new InvalidOperationException(); }
public void AssignFrom(ICaretPosition c) { }
/// <summary> /// Initializes a new instance of the <see cref="CaretPositionChangedEventArgs"/> class. /// </summary> public CaretPositionChangedEventArgs(ICaretPosition oldPosition, ICaretPosition newPosition) { this.OldPosition = oldPosition; this.NewPosition = newPosition; }
public bool CaretPositionMovable(ICaretPosition position) { return(algorithm?.CallMethod <bool, ICaretPosition>("PositionMovable", position) ?? false); }
public bool CaretMovable(ICaretPosition position) { var algorithm = GetCaretPositionAlgorithm(); return(algorithm.CallMethod <bool, ICaretPosition>("PositionMovable", position)); }