viewModel.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. import * as strings from '../../../base/common/strings.js';
  6. import { Range } from '../core/range.js';
  7. export class Viewport {
  8. constructor(top, left, width, height) {
  9. this._viewportBrand = undefined;
  10. this.top = top | 0;
  11. this.left = left | 0;
  12. this.width = width | 0;
  13. this.height = height | 0;
  14. }
  15. }
  16. export class MinimapLinesRenderingData {
  17. constructor(tabSize, data) {
  18. this.tabSize = tabSize;
  19. this.data = data;
  20. }
  21. }
  22. export class ViewLineData {
  23. constructor(content, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, tokens, inlineDecorations) {
  24. this._viewLineDataBrand = undefined;
  25. this.content = content;
  26. this.continuesWithWrappedLine = continuesWithWrappedLine;
  27. this.minColumn = minColumn;
  28. this.maxColumn = maxColumn;
  29. this.startVisibleColumn = startVisibleColumn;
  30. this.tokens = tokens;
  31. this.inlineDecorations = inlineDecorations;
  32. }
  33. }
  34. export class ViewLineRenderingData {
  35. constructor(minColumn, maxColumn, content, continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, tokens, inlineDecorations, tabSize, startVisibleColumn) {
  36. this.minColumn = minColumn;
  37. this.maxColumn = maxColumn;
  38. this.content = content;
  39. this.continuesWithWrappedLine = continuesWithWrappedLine;
  40. this.isBasicASCII = ViewLineRenderingData.isBasicASCII(content, mightContainNonBasicASCII);
  41. this.containsRTL = ViewLineRenderingData.containsRTL(content, this.isBasicASCII, mightContainRTL);
  42. this.tokens = tokens;
  43. this.inlineDecorations = inlineDecorations;
  44. this.tabSize = tabSize;
  45. this.startVisibleColumn = startVisibleColumn;
  46. }
  47. static isBasicASCII(lineContent, mightContainNonBasicASCII) {
  48. if (mightContainNonBasicASCII) {
  49. return strings.isBasicASCII(lineContent);
  50. }
  51. return true;
  52. }
  53. static containsRTL(lineContent, isBasicASCII, mightContainRTL) {
  54. if (!isBasicASCII && mightContainRTL) {
  55. return strings.containsRTL(lineContent);
  56. }
  57. return false;
  58. }
  59. }
  60. export class InlineDecoration {
  61. constructor(range, inlineClassName, type) {
  62. this.range = range;
  63. this.inlineClassName = inlineClassName;
  64. this.type = type;
  65. }
  66. }
  67. export class SingleLineInlineDecoration {
  68. constructor(startOffset, endOffset, inlineClassName, inlineClassNameAffectsLetterSpacing) {
  69. this.startOffset = startOffset;
  70. this.endOffset = endOffset;
  71. this.inlineClassName = inlineClassName;
  72. this.inlineClassNameAffectsLetterSpacing = inlineClassNameAffectsLetterSpacing;
  73. }
  74. toInlineDecoration(lineNumber) {
  75. return new InlineDecoration(new Range(lineNumber, this.startOffset + 1, lineNumber, this.endOffset + 1), this.inlineClassName, this.inlineClassNameAffectsLetterSpacing ? 3 /* RegularAffectingLetterSpacing */ : 0 /* Regular */);
  76. }
  77. }
  78. export class ViewModelDecoration {
  79. constructor(range, options) {
  80. this._viewModelDecorationBrand = undefined;
  81. this.range = range;
  82. this.options = options;
  83. }
  84. }
  85. export class OverviewRulerDecorationsGroup {
  86. constructor(color, zIndex,
  87. /**
  88. * Decorations are encoded in a number array using the following scheme:
  89. * - 3*i = lane
  90. * - 3*i+1 = startLineNumber
  91. * - 3*i+2 = endLineNumber
  92. */
  93. data) {
  94. this.color = color;
  95. this.zIndex = zIndex;
  96. this.data = data;
  97. }
  98. static cmp(a, b) {
  99. if (a.zIndex === b.zIndex) {
  100. if (a.color < b.color) {
  101. return -1;
  102. }
  103. if (a.color > b.color) {
  104. return 1;
  105. }
  106. return 0;
  107. }
  108. return a.zIndex - b.zIndex;
  109. }
  110. }