예제 #1
0
        public void Rebuild()
        {
            //string docName = "UNKNOWN";
            //if (_textView.TextBuffer.Properties.TryGetProperty<ITextDocument>(typeof(ITextDocument), out var textDoc))
            //{
            //    docName = System.IO.Path.GetFileName(textDoc.FilePath);
            //}
            //Logger.Log($"Rebuilding keyboard handler for {docName}");

            var moveCaret = new KeyboardSequenceDetector(
                new DateTimeClock(),
                () => MoveCaret?.Invoke(),
                new[]
            {
                new KeyFrame(_settings.MoveCaretKey, true, 0),
                new KeyFrame(_settings.MoveCaretKey, false, _settings.DoubleTapReleaseTimeMs),
                new KeyFrame(_settings.MoveCaretKey, true, _settings.DoubleTapIntervalTimeMs),
                new KeyFrame(_settings.MoveCaretKey, false, _settings.DoubleTapReleaseTimeMs),
            });

            var startScroll = new KeyboardSequenceDetector(
                new DateTimeClock(),
                () =>
            {
                if (_scrollState != ScrollRequest.Start)
                {
                    _scrollState = ScrollRequest.Start;
                    UpdateScroll?.Invoke(ScrollRequest.Start);
                }
            },
                new[]
            {
                new KeyFrame(_settings.ScrollKey, true, 0),
                new KeyFrame(_settings.ScrollKey, false, _settings.DoubleTapReleaseTimeMs),
                new KeyFrame(_settings.ScrollKey, true, _settings.DoubleTapIntervalTimeMs),
                new KeyFrame(_settings.ScrollKey, true, _settings.DoubleTapHoldTimeMs),
            });

            var stopScroll = new KeyboardSequenceDetector(
                new DateTimeClock(),
                () =>
            {
                if (_scrollState != ScrollRequest.Stop)
                {
                    _scrollState = ScrollRequest.Stop;
                    UpdateScroll?.Invoke(ScrollRequest.Stop);
                }
            },
                new[]
            {
                new KeyFrame(_settings.ScrollKey, false, 0),
            });

            _detectors = new[]
            {
                moveCaret,
                startScroll,
                stopScroll
            };
        }
        private void OnMoveCaret()
        {
            if (GeneralOptions.Instance.WindowFocusEnabled)
            {
                ChangeFocus?.Invoke();
            }

            if (GeneralOptions.Instance.CaretEnabled)
            {
                MoveCaret?.Invoke();
            }
        }