fbad9ee8e527b0b1edf60c8d6a38e49139e3358650fce4e1500cb8cca262d2f1f0d32195bc8d9b9bd99eab31388c8e9cd3266e3e21c7330bbb698eb5a60def 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. export class StableEditorScrollState {
  6. constructor(_visiblePosition, _visiblePositionScrollDelta, _cursorPosition) {
  7. this._visiblePosition = _visiblePosition;
  8. this._visiblePositionScrollDelta = _visiblePositionScrollDelta;
  9. this._cursorPosition = _cursorPosition;
  10. }
  11. static capture(editor) {
  12. let visiblePosition = null;
  13. let visiblePositionScrollDelta = 0;
  14. if (editor.getScrollTop() !== 0) {
  15. const visibleRanges = editor.getVisibleRanges();
  16. if (visibleRanges.length > 0) {
  17. visiblePosition = visibleRanges[0].getStartPosition();
  18. const visiblePositionScrollTop = editor.getTopForPosition(visiblePosition.lineNumber, visiblePosition.column);
  19. visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop;
  20. }
  21. }
  22. return new StableEditorScrollState(visiblePosition, visiblePositionScrollDelta, editor.getPosition());
  23. }
  24. restore(editor) {
  25. if (this._visiblePosition) {
  26. const visiblePositionScrollTop = editor.getTopForPosition(this._visiblePosition.lineNumber, this._visiblePosition.column);
  27. editor.setScrollTop(visiblePositionScrollTop + this._visiblePositionScrollDelta);
  28. }
  29. }
  30. restoreRelativeVerticalPositionOfCursor(editor) {
  31. const currentCursorPosition = editor.getPosition();
  32. if (!this._cursorPosition || !currentCursorPosition) {
  33. return;
  34. }
  35. const offset = editor.getTopForLineNumber(currentCursorPosition.lineNumber) - editor.getTopForLineNumber(this._cursorPosition.lineNumber);
  36. editor.setScrollTop(editor.getScrollTop() + offset);
  37. }
  38. }