Example #1
0
        /// <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));
        }
Example #2
0
        /// <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);
        }
Example #3
0
 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());
 }
Example #4
0
 public SelectionPresenter(
     Widget container, ICaretPosition selectionStart, ICaretPosition selectionEnd,
     SelectionParams selectionParams)
 {
     this.selectionStart  = selectionStart;
     this.selectionEnd    = selectionEnd;
     this.selectionParams = selectionParams;
     container.CompoundPresenter.Add(this);
 }
Example #5
0
        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;
            }
        }
Example #6
0
        public bool MoveHoverCaretToTargetPosition(ICaretPosition position)
        {
            if (position.Lyric == null)
            {
                return(false);
            }

            if (!CaretPositionMovable(position))
            {
                return(false);
            }

            BindableHoverCaretPosition.Value = position;
            return(true);
        }
Example #7
0
        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);
        }
Example #8
0
        /// <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));
        }
Example #9
0
 public void Add(ICaretPosition c) => carets.Add(c);
Example #10
0
 public void AssignFrom(ICaretPosition c)
 {
     throw new InvalidOperationException();
 }
Example #11
0
 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;
		}
Example #13
0
 public bool CaretPositionMovable(ICaretPosition position)
 {
     return(algorithm?.CallMethod <bool, ICaretPosition>("PositionMovable", position) ?? false);
 }
Example #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CaretPositionChangedEventArgs"/> class.
 /// </summary>
 public CaretPositionChangedEventArgs(ICaretPosition oldPosition, ICaretPosition newPosition)
 {
     this.OldPosition = oldPosition;
     this.NewPosition = newPosition;
 }
Example #15
0
        public bool CaretMovable(ICaretPosition position)
        {
            var algorithm = GetCaretPositionAlgorithm();

            return(algorithm.CallMethod <bool, ICaretPosition>("PositionMovable", position));
        }