コード例 #1
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
 HexViewLine GetLine(HexColumnPosition position) =>
 hexView.GetHexViewLineContainingBufferPosition(position.ActivePosition.BufferPosition);
コード例 #2
0
        void OnScroll(ScrollDirection value, double xCoordinate)
        {
            HexViewLine    line;
            HexBufferPoint lineStart;

            switch (value)
            {
            case ScrollDirection.Left:
                line = wpfHexView.Caret.ContainingHexViewLine;
                if (line.TextLeft >= wpfHexView.ViewportLeft)
                {
                    StopScrolling();
                }
                else if (wpfHexView.Caret.Position.Position.ActivePosition.BufferPosition != line.BufferStart)
                {
                    editorOperations.MoveToPreviousCharacter(true);
                }
                else
                {
                    wpfHexView.ViewportLeft = line.TextLeft;
                    StopScrolling();
                }
                break;

            case ScrollDirection.Right:
                line = wpfHexView.Caret.ContainingHexViewLine;
                if (line.TextRight <= wpfHexView.ViewportRight)
                {
                    StopScrolling();
                }
                else if (wpfHexView.Caret.Position.Position.ActivePosition.BufferPosition < line.BufferEnd)
                {
                    editorOperations.MoveToNextCharacter(true);
                }
                else
                {
                    wpfHexView.ViewportLeft = Math.Max(0, line.TextRight - wpfHexView.ViewportWidth);
                    StopScrolling();
                }
                break;

            case ScrollDirection.Up:
                line = wpfHexView.HexViewLines.FirstVisibleLine;
                if (line.VisibilityState == VSTF.VisibilityState.FullyVisible && !line.IsFirstDocumentLine())
                {
                    line = wpfHexView.GetHexViewLineContainingBufferPosition(line.BufferStart - 1);
                }
                lineStart = line.BufferStart;
                if (line.VisibilityState != VSTF.VisibilityState.FullyVisible)
                {
                    wpfHexView.DisplayHexLineContainingBufferPosition(line.BufferStart, 0, VSTE.ViewRelativePosition.Top);
                }
                if (!line.IsValid)
                {
                    line = wpfHexView.GetHexViewLineContainingBufferPosition(lineStart);
                }
                if (line.IsFirstDocumentLine())
                {
                    StopScrolling();
                }
                editorOperations.MoveCaret(line, xCoordinate, true, hexMoveToFlags);
                break;

            case ScrollDirection.Down:
                line = wpfHexView.HexViewLines.LastVisibleLine;
                if (line.VisibilityState == VSTF.VisibilityState.FullyVisible && !line.IsLastDocumentLine())
                {
                    line = wpfHexView.GetHexViewLineContainingBufferPosition(line.BufferEnd);
                }
                lineStart = line.BufferStart;
                if (line.VisibilityState != VSTF.VisibilityState.FullyVisible)
                {
                    wpfHexView.DisplayHexLineContainingBufferPosition(line.BufferStart, 0, VSTE.ViewRelativePosition.Bottom);
                }
                if (!line.IsValid)
                {
                    line = wpfHexView.GetHexViewLineContainingBufferPosition(lineStart);
                }
                if (line.IsLastDocumentLine())
                {
                    StopScrolling();
                }
                editorOperations.MoveCaret(line, xCoordinate, true, hexMoveToFlags);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(value));
            }

            wpfHexView.Caret.EnsureVisible();
        }