renderingContext.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 RestrictedRenderingContext {
  6. constructor(viewLayout, viewportData) {
  7. this._restrictedRenderingContextBrand = undefined;
  8. this._viewLayout = viewLayout;
  9. this.viewportData = viewportData;
  10. this.scrollWidth = this._viewLayout.getScrollWidth();
  11. this.scrollHeight = this._viewLayout.getScrollHeight();
  12. this.visibleRange = this.viewportData.visibleRange;
  13. this.bigNumbersDelta = this.viewportData.bigNumbersDelta;
  14. const vInfo = this._viewLayout.getCurrentViewport();
  15. this.scrollTop = vInfo.top;
  16. this.scrollLeft = vInfo.left;
  17. this.viewportWidth = vInfo.width;
  18. this.viewportHeight = vInfo.height;
  19. }
  20. getScrolledTopFromAbsoluteTop(absoluteTop) {
  21. return absoluteTop - this.scrollTop;
  22. }
  23. getVerticalOffsetForLineNumber(lineNumber) {
  24. return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber);
  25. }
  26. getDecorationsInViewport() {
  27. return this.viewportData.getDecorationsInViewport();
  28. }
  29. }
  30. export class RenderingContext extends RestrictedRenderingContext {
  31. constructor(viewLayout, viewportData, viewLines) {
  32. super(viewLayout, viewportData);
  33. this._renderingContextBrand = undefined;
  34. this._viewLines = viewLines;
  35. }
  36. linesVisibleRangesForRange(range, includeNewLines) {
  37. return this._viewLines.linesVisibleRangesForRange(range, includeNewLines);
  38. }
  39. visibleRangeForPosition(position) {
  40. return this._viewLines.visibleRangeForPosition(position);
  41. }
  42. }
  43. export class LineVisibleRanges {
  44. constructor(outsideRenderedLine, lineNumber, ranges) {
  45. this.outsideRenderedLine = outsideRenderedLine;
  46. this.lineNumber = lineNumber;
  47. this.ranges = ranges;
  48. }
  49. }
  50. export class HorizontalRange {
  51. constructor(left, width) {
  52. this._horizontalRangeBrand = undefined;
  53. this.left = Math.round(left);
  54. this.width = Math.round(width);
  55. }
  56. static from(ranges) {
  57. const result = new Array(ranges.length);
  58. for (let i = 0, len = ranges.length; i < len; i++) {
  59. const range = ranges[i];
  60. result[i] = new HorizontalRange(range.left, range.width);
  61. }
  62. return result;
  63. }
  64. toString() {
  65. return `[${this.left},${this.width}]`;
  66. }
  67. }
  68. export class FloatHorizontalRange {
  69. constructor(left, width) {
  70. this._floatHorizontalRangeBrand = undefined;
  71. this.left = left;
  72. this.width = width;
  73. }
  74. toString() {
  75. return `[${this.left},${this.width}]`;
  76. }
  77. static compare(a, b) {
  78. return a.left - b.left;
  79. }
  80. }
  81. export class HorizontalPosition {
  82. constructor(outsideRenderedLine, left) {
  83. this.outsideRenderedLine = outsideRenderedLine;
  84. this.originalLeft = left;
  85. this.left = Math.round(this.originalLeft);
  86. }
  87. }
  88. export class VisibleRanges {
  89. constructor(outsideRenderedLine, ranges) {
  90. this.outsideRenderedLine = outsideRenderedLine;
  91. this.ranges = ranges;
  92. }
  93. }