@lightningjs/renderer 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/src/common/CommonTypes.d.ts +8 -0
  2. package/dist/src/core/CoreNode.js +45 -16
  3. package/dist/src/core/CoreNode.js.map +1 -1
  4. package/dist/src/core/CoreTextNode.d.ts +10 -0
  5. package/dist/src/core/CoreTextNode.js +45 -0
  6. package/dist/src/core/CoreTextNode.js.map +1 -1
  7. package/dist/src/core/CoreTextureManager.d.ts +3 -1
  8. package/dist/src/core/CoreTextureManager.js +4 -1
  9. package/dist/src/core/CoreTextureManager.js.map +1 -1
  10. package/dist/src/core/Stage.d.ts +6 -0
  11. package/dist/src/core/Stage.js +12 -3
  12. package/dist/src/core/Stage.js.map +1 -1
  13. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  14. package/dist/src/core/lib/ImageWorker.js +111 -0
  15. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  16. package/dist/src/core/lib/WebGlContextWrapper.d.ts +4 -0
  17. package/dist/src/core/lib/WebGlContextWrapper.js +7 -2
  18. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  19. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +2 -1
  20. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +2 -2
  21. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  22. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +3 -2
  23. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +23 -21
  24. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  25. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +3 -2
  26. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +9 -13
  27. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
  28. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +4 -1
  29. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +25 -24
  30. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  31. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -1
  32. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +24 -24
  33. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  34. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +8 -5
  35. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +11 -13
  36. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -2
  38. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +15 -15
  39. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  41. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  42. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +3 -3
  43. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +1 -0
  45. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +32 -12
  46. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +3 -3
  48. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  49. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +3 -3
  50. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +1 -1
  52. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +14 -1
  53. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +15 -5
  54. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -1
  55. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +3 -3
  56. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  57. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +2 -1
  58. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +4 -2
  59. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
  60. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +25 -0
  61. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  62. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -1
  63. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +6 -6
  64. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  65. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  66. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +82 -50
  67. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  68. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.d.ts +8 -0
  69. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js +29 -0
  70. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js.map +1 -0
  71. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +4 -3
  72. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +15 -11
  73. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
  74. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +3 -2
  75. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +30 -26
  76. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  77. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.d.ts +19 -0
  78. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js +84 -0
  79. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js.map +1 -0
  80. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.d.ts +8 -0
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js +40 -0
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js.map +1 -0
  83. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.d.ts +2 -0
  84. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js +41 -0
  85. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js.map +1 -0
  86. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.d.ts +1 -0
  87. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js +4 -0
  88. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js.map +1 -0
  89. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.d.ts +1 -0
  90. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js +2 -0
  91. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js.map +1 -0
  92. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.d.ts +9 -0
  93. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js +32 -0
  94. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js.map +1 -0
  95. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  96. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  97. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  98. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  99. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +39 -0
  100. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  101. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +50 -0
  102. package/dist/src/core/text-rendering/renderers/TextRenderer.js +19 -0
  103. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  104. package/dist/src/core/textures/ImageTexture.js +14 -9
  105. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  106. package/dist/src/core/utils.d.ts +1 -6
  107. package/dist/src/core/utils.js +3 -2
  108. package/dist/src/core/utils.js.map +1 -1
  109. package/dist/src/main-api/ICoreDriver.d.ts +2 -1
  110. package/dist/src/main-api/RendererMain.d.ts +25 -0
  111. package/dist/src/main-api/RendererMain.js +14 -5
  112. package/dist/src/main-api/RendererMain.js.map +1 -1
  113. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +2 -1
  114. package/dist/src/render-drivers/main/MainCoreDriver.js +6 -4
  115. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
  116. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +10 -0
  117. package/dist/src/render-drivers/main/MainOnlyTextNode.js +45 -0
  118. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  119. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +10 -0
  120. package/dist/src/render-drivers/threadx/TextNodeStruct.js +45 -0
  121. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
  122. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +2 -1
  123. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +8 -1
  124. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
  125. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +5 -0
  126. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +5 -0
  127. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -1
  128. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +4 -1
  129. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -1
  130. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +5 -0
  131. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +10 -0
  132. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
  133. package/dist/src/render-drivers/threadx/worker/renderer.js +5 -3
  134. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  135. package/dist/src/utils.d.ts +2 -1
  136. package/dist/src/utils.js +22 -3
  137. package/dist/src/utils.js.map +1 -1
  138. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  139. package/package.json +3 -2
  140. package/src/common/CommonTypes.ts +9 -0
  141. package/src/core/CoreNode.ts +67 -34
  142. package/src/core/CoreTextNode.ts +56 -0
  143. package/src/core/CoreTextureManager.ts +4 -2
  144. package/src/core/Stage.ts +32 -3
  145. package/src/core/lib/ContextSpy.ts +41 -0
  146. package/src/core/lib/ImageWorker.ts +124 -0
  147. package/src/core/lib/WebGlContextWrapper.ts +965 -0
  148. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +3 -2
  149. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +29 -28
  150. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +10 -14
  151. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +26 -24
  152. package/src/core/renderers/webgl/WebGlCoreShader.ts +34 -25
  153. package/src/core/renderers/webgl/internal/RendererUtils.ts +13 -16
  154. package/src/core/renderers/webgl/internal/ShaderUtils.ts +16 -15
  155. package/src/core/renderers/webgl/shaders/DefaultShader.ts +3 -7
  156. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +3 -3
  157. package/src/core/renderers/webgl/shaders/DynamicShader.ts +42 -14
  158. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +3 -3
  159. package/src/core/renderers/webgl/shaders/SdfShader.ts +3 -3
  160. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +1 -1
  161. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +35 -5
  162. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +3 -3
  163. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +9 -3
  164. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +4 -2
  165. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +25 -0
  166. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +7 -7
  167. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +115 -63
  168. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +26 -18
  169. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +40 -28
  170. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +6 -1
  171. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -0
  172. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/{makeRenderWindow.ts → setRenderWindow.ts} +50 -21
  173. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -0
  174. package/src/core/text-rendering/renderers/TextRenderer.ts +73 -0
  175. package/src/core/textures/ImageTexture.ts +17 -9
  176. package/src/core/utils.ts +87 -85
  177. package/src/env.d.ts +7 -0
  178. package/src/main-api/ICoreDriver.ts +2 -1
  179. package/src/main-api/RendererMain.ts +43 -5
  180. package/src/render-drivers/main/MainCoreDriver.ts +8 -5
  181. package/src/render-drivers/main/MainOnlyTextNode.ts +55 -1
  182. package/src/render-drivers/threadx/TextNodeStruct.ts +45 -0
  183. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +10 -2
  184. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +10 -0
  185. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +5 -1
  186. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +15 -0
  187. package/src/render-drivers/threadx/worker/renderer.ts +6 -4
  188. package/src/utils.ts +25 -4
  189. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.test.ts +0 -136
@@ -0,0 +1,19 @@
1
+ import type { SdfTrFontFace } from '../../../../font-face-types/SdfTrFontFace/SdfTrFontFace.js';
2
+ import type { MappedGlyphInfo } from '../../../../font-face-types/SdfTrFontFace/internal/FontShaper.js';
3
+ export declare class SdfBufferHelper {
4
+ bufferOffset: number;
5
+ vertexBuffer: Float32Array;
6
+ trFontFace: SdfTrFontFace;
7
+ scaleW: number;
8
+ scaleH: number;
9
+ standByGlyphs: MappedGlyphInfo[];
10
+ standByCurX: number;
11
+ standByStartXAfterLeadSpaces: number;
12
+ curX: number;
13
+ curY: number;
14
+ constructor(vertexBuffer: Float32Array, trFontFace: SdfTrFontFace);
15
+ glyphsStandingBy(): boolean;
16
+ getStandByGlyphsWidth(): number;
17
+ pushStandByGlyph(glyph: MappedGlyphInfo): void;
18
+ flushStandByGlyphs(skipLeadingSpaces?: boolean): void;
19
+ }
@@ -0,0 +1,84 @@
1
+ import { assertTruthy } from '../../../../../../utils.js';
2
+ import { isWhiteSpace } from './utils.js';
3
+ export class SdfBufferHelper {
4
+ bufferOffset = 0;
5
+ vertexBuffer;
6
+ trFontFace;
7
+ scaleW;
8
+ scaleH;
9
+ standByGlyphs = [];
10
+ standByCurX = -1;
11
+ standByStartXAfterLeadSpaces = -1;
12
+ curX = 0;
13
+ curY = 0;
14
+ constructor(vertexBuffer, trFontFace) {
15
+ assertTruthy(trFontFace.data);
16
+ this.vertexBuffer = vertexBuffer;
17
+ this.trFontFace = trFontFace;
18
+ this.scaleW = trFontFace.data.common.scaleW;
19
+ this.scaleH = trFontFace.data.common.scaleH;
20
+ }
21
+ glyphsStandingBy() {
22
+ return this.standByGlyphs.length > 0;
23
+ }
24
+ getStandByGlyphsWidth() {
25
+ if (this.standByStartXAfterLeadSpaces === -1 || this.standByCurX === -1) {
26
+ return 0;
27
+ }
28
+ return this.standByCurX - this.standByStartXAfterLeadSpaces;
29
+ }
30
+ pushStandByGlyph(glyph) {
31
+ this.standByGlyphs.push(glyph);
32
+ if (!isWhiteSpace(glyph.codepoint) &&
33
+ this.standByStartXAfterLeadSpaces === -1) {
34
+ this.standByStartXAfterLeadSpaces = this.standByCurX;
35
+ }
36
+ if (this.standByCurX === -1) {
37
+ this.standByCurX = this.curX;
38
+ }
39
+ this.standByCurX += glyph.xAdvance;
40
+ }
41
+ flushStandByGlyphs(skipLeadingSpaces = false) {
42
+ const { vertexBuffer, trFontFace, scaleW, scaleH, curX, curY, standByCurX, } = this;
43
+ let { bufferOffset } = this;
44
+ for (const glyph of this.standByGlyphs) {
45
+ if (skipLeadingSpaces && isWhiteSpace(glyph.codepoint)) {
46
+ continue;
47
+ }
48
+ const atlasEntry = trFontFace.getAtlasEntry(glyph.glyphId);
49
+ // This glyph fits, so we can add it to the buffer
50
+ const quadX = curX + glyph.xOffset;
51
+ const quadY = curY + glyph.yOffset;
52
+ const u = atlasEntry.x / scaleW;
53
+ const v = atlasEntry.y / scaleH;
54
+ const uvWidth = atlasEntry.width / scaleW;
55
+ const uvHeight = atlasEntry.height / scaleH;
56
+ // Top-left
57
+ vertexBuffer[bufferOffset++] = quadX;
58
+ vertexBuffer[bufferOffset++] = quadY;
59
+ vertexBuffer[bufferOffset++] = u;
60
+ vertexBuffer[bufferOffset++] = v;
61
+ // Top-right
62
+ vertexBuffer[bufferOffset++] = quadX + glyph.width;
63
+ vertexBuffer[bufferOffset++] = quadY;
64
+ vertexBuffer[bufferOffset++] = u + uvWidth;
65
+ vertexBuffer[bufferOffset++] = v;
66
+ // Bottom-left
67
+ vertexBuffer[bufferOffset++] = quadX;
68
+ vertexBuffer[bufferOffset++] = quadY + glyph.height;
69
+ vertexBuffer[bufferOffset++] = u;
70
+ vertexBuffer[bufferOffset++] = v + uvHeight;
71
+ // Bottom-right
72
+ vertexBuffer[bufferOffset++] = quadX + glyph.width;
73
+ vertexBuffer[bufferOffset++] = quadY + glyph.height;
74
+ vertexBuffer[bufferOffset++] = u + uvWidth;
75
+ vertexBuffer[bufferOffset++] = v + uvHeight;
76
+ this.bufferOffset = bufferOffset;
77
+ }
78
+ this.curX = standByCurX;
79
+ this.standByGlyphs.length = 0;
80
+ this.standByCurX = -1;
81
+ this.standByStartXAfterLeadSpaces = -1;
82
+ }
83
+ }
84
+ //# sourceMappingURL=SdfBufferHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdfBufferHelper.js","sourceRoot":"","sources":["../../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { MappedGlyphInfo, UnmappedCharacterInfo } from '../../../../font-face-types/SdfTrFontFace/internal/FontShaper.js';
2
+ import { PeekableIterator } from '../PeekableGenerator.js';
3
+ import type { SdfBufferHelper } from './SdfBufferHelper.js';
4
+ export declare function layoutLine(glyphs: PeekableIterator<MappedGlyphInfo | UnmappedCharacterInfo>,
5
+ /**
6
+ * Can be Infinity
7
+ */
8
+ maxLineWidth: number, bufferHelper: SdfBufferHelper): boolean;
@@ -0,0 +1,40 @@
1
+ import { PeekableIterator } from '../PeekableGenerator.js';
2
+ import { getUnicodeCodepoints } from '../getUnicodeCodepoints.js';
3
+ import { isWhiteSpace } from './utils.js';
4
+ export function layoutLine(glyphs,
5
+ /**
6
+ * Can be Infinity
7
+ */
8
+ maxLineWidth, bufferHelper) {
9
+ let moreLeft = true;
10
+ let glyphResult;
11
+ // If there's any standByGlyphs at the beginning of the line, we need to
12
+ // we to flush them if they fit
13
+ if (bufferHelper.getStandByGlyphsWidth() < maxLineWidth) {
14
+ bufferHelper.flushStandByGlyphs(true);
15
+ }
16
+ while ((glyphResult = glyphs.next())) {
17
+ if (glyphResult.done || isWhiteSpace(glyphResult.value.codepoint)) {
18
+ // We're out of glyphs, or we hit a whitespace character.
19
+ // Flush the standByGlyphs if they fit or if this is the last line
20
+ // add the overflow suffix.
21
+ if (bufferHelper.glyphsStandingBy() &&
22
+ bufferHelper.standByCurX <= maxLineWidth) {
23
+ bufferHelper.flushStandByGlyphs();
24
+ }
25
+ else {
26
+ break;
27
+ }
28
+ }
29
+ if (glyphResult.done) {
30
+ moreLeft = false;
31
+ break;
32
+ }
33
+ const glyph = glyphResult.value;
34
+ if (glyph.mapped) {
35
+ bufferHelper.pushStandByGlyph(glyph);
36
+ }
37
+ }
38
+ return moreLeft;
39
+ }
40
+ //# sourceMappingURL=layoutLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutLine.js","sourceRoot":"","sources":["../../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,UAAU,UAAU,CACxB,MAAiE;AACjE;;GAEG;AACH,YAAoB,EACpB,YAA6B;IAE7B,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,WAAoE,CAAC;IAEzE,wEAAwE;IACxE,+BAA+B;IAC/B,IAAI,YAAY,CAAC,qBAAqB,EAAE,GAAG,YAAY,EAAE;QACvD,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;KACvC;IAED,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;QACpC,IAAI,WAAW,CAAC,IAAI,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACjE,yDAAyD;YACzD,kEAAkE;YAClE,2BAA2B;YAC3B,IACE,YAAY,CAAC,gBAAgB,EAAE;gBAC/B,YAAY,CAAC,WAAW,IAAI,YAAY,EACxC;gBACA,YAAY,CAAC,kBAAkB,EAAE,CAAC;aACnC;iBAAM;gBACL,MAAM;aACP;SACF;QAED,IAAI,WAAW,CAAC,IAAI,EAAE;YACpB,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM;SACP;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAEhC,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACtC;KACF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { SdfTrFontFace } from '../../../../font-face-types/SdfTrFontFace/SdfTrFontFace.js';
2
+ export declare function layoutText2(text: string, sdfLetterSpacing: number, trFontFace: SdfTrFontFace): void;
@@ -0,0 +1,41 @@
1
+ import { assertTruthy } from '../../../../../../utils.js';
2
+ import { PeekableIterator } from '../PeekableGenerator.js';
3
+ import { getUnicodeCodepoints } from '../getUnicodeCodepoints.js';
4
+ import { measureText } from '../measureText.js';
5
+ import { SdfBufferHelper } from './SdfBufferHelper.js';
6
+ import { layoutLine } from './layoutLine.js';
7
+ export function layoutText2(text, sdfLetterSpacing, trFontFace) {
8
+ const startingCodepointIndex = 0;
9
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
10
+ const shaper = trFontFace.shaper;
11
+ assertTruthy(shaper);
12
+ const shaperProps = {
13
+ letterSpacing: sdfLetterSpacing,
14
+ };
15
+ // Get glyphs
16
+ const glyphs = new PeekableIterator(shaper.shapeText(shaperProps, new PeekableIterator(getUnicodeCodepoints(text, startingCodepointIndex), startingCodepointIndex)));
17
+ const maxLineWidth = 100;
18
+ const maxLines = 1;
19
+ const overflowSuffix = '...';
20
+ const sdfOverflowSuffWidth = measureText(overflowSuffix, shaperProps, shaper);
21
+ const bufferHelper = new SdfBufferHelper(new Float32Array(100), trFontFace);
22
+ let moreLines = true;
23
+ let lastLine = false;
24
+ let curLineIndex = 0;
25
+ while (moreLines) {
26
+ lastLine = !(maxLines === 0 || curLineIndex + 1 < maxLines);
27
+ layoutLine(glyphs,
28
+ // If this is the last line, we need to account for the overflow suffix
29
+ // in the maxLineWidth it will definitely fit.
30
+ lastLine ? maxLineWidth - sdfOverflowSuffWidth : maxLineWidth, bufferHelper);
31
+ const moreGlyphs = !glyphs.peek().done;
32
+ // If lastLine and there are more glyphs, we need to add the overflow suffix
33
+ // to the end of the line
34
+ if (lastLine && moreGlyphs) {
35
+ layoutLine(new PeekableIterator(shaper.shapeText(shaperProps, new PeekableIterator(getUnicodeCodepoints(overflowSuffix, 0), 0))), Infinity, bufferHelper);
36
+ }
37
+ moreLines = !lastLine && moreGlyphs;
38
+ curLineIndex++;
39
+ }
40
+ }
41
+ //# sourceMappingURL=layoutText2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutText2.js","sourceRoot":"","sources":["../../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,gBAAwB,EACxB,UAAyB;IAEzB,MAAM,sBAAsB,GAAG,CAAC,CAAC;IACjC,oEAAoE;IACpE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAEjC,YAAY,CAAC,MAAM,CAAC,CAAC;IAErB,MAAM,WAAW,GAAoB;QACnC,aAAa,EAAE,gBAAgB;KAChC,CAAC;IAEF,aAAa;IACb,MAAM,MAAM,GAAG,IAAI,gBAAgB,CACjC,MAAM,CAAC,SAAS,CACd,WAAW,EACX,IAAI,gBAAgB,CAClB,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAClD,sBAAsB,CACvB,CACF,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAW,CAAC;IAC7B,MAAM,cAAc,GAAG,KAAK,CAAC;IAC7B,MAAM,oBAAoB,GAAG,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAE9E,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5E,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,OAAO,SAAS,EAAE;QAChB,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE5D,UAAU,CACR,MAAM;QACN,uEAAuE;QACvE,8CAA8C;QAC9C,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,YAAY,EAC7D,YAAY,CACb,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;QACvC,4EAA4E;QAC5E,yBAAyB;QACzB,IAAI,QAAQ,IAAI,UAAU,EAAE;YAC1B,UAAU,CACR,IAAI,gBAAgB,CAClB,MAAM,CAAC,SAAS,CACd,WAAW,EACX,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACjE,CACF,EACD,QAAQ,EACR,YAAY,CACb,CAAC;SACH;QACD,SAAS,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC;QACpC,YAAY,EAAE,CAAC;KAChB;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isWhiteSpace(codepoint: number): boolean;
@@ -0,0 +1,4 @@
1
+ export function isWhiteSpace(codepoint) {
2
+ return codepoint === 32 || codepoint === 10;
3
+ }
4
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=layoutText2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutText2.js","sourceRoot":"","sources":["../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Round up to the nearest multiple of the given number.
3
+ *
4
+ * @param value
5
+ * @param multiple
6
+ * @returns
7
+ */
8
+ export declare function roundUpToMultiple(value: number, multiple: number): number;
9
+ export declare function roundDownToMultiple(value: number, multiple: number): number;
@@ -0,0 +1,32 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ /**
20
+ * Round up to the nearest multiple of the given number.
21
+ *
22
+ * @param value
23
+ * @param multiple
24
+ * @returns
25
+ */
26
+ export function roundUpToMultiple(value, multiple) {
27
+ return Math.ceil(value / multiple) * multiple;
28
+ }
29
+ export function roundDownToMultiple(value, multiple) {
30
+ return Math.floor(value / multiple) * multiple;
31
+ }
32
+ //# sourceMappingURL=roundUpToMultiple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roundUpToMultiple.js","sourceRoot":"","sources":["../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAgB;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,QAAgB;IACjE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACjD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type Bound } from '../../../../lib/utils.js';
2
+ import type { TrProps } from '../../TextRenderer.js';
3
+ export interface SdfRenderWindow {
4
+ screen: Bound;
5
+ sdf: Bound;
6
+ firstLineIdx: number;
7
+ numLines: number;
8
+ valid: boolean;
9
+ }
10
+ /**
11
+ * Create a render window from the given parameters.
12
+ *
13
+ * @remarks
14
+ * The render window is a rectangle that defines the area of the text that
15
+ * should be rendered. It is used to skip rendering parts of the text that
16
+ * are outside of the render window. The render window is relative to the
17
+ * text's top left corner of the overrall text.
18
+ *
19
+ * @param x The x coordinate of the text element's top left corner relative to the screen.
20
+ * @param y The y coordinate of the text element's top left corner relative to the screen.
21
+ * @param scrollY The amount of pixels to scroll the text vertically.
22
+ * @param lineHeight The number of extra lines to render above and below the visible window.
23
+ * @param visibleWindow The visible window of the text element relative to the screen
24
+ * @returns
25
+ */
26
+ export declare function setRenderWindow(outRenderWindow: SdfRenderWindow, x: TrProps['x'], y: TrProps['y'], scrollY: TrProps['scrollY'], lineHeight: number, bufferMargin: number, visibleWindow: Bound, fontSizeRatio: number): void;
@@ -0,0 +1,70 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import { isBoundPositive } from '../../../../lib/utils.js';
20
+ import { roundDownToMultiple, roundUpToMultiple } from './util.js';
21
+ /**
22
+ * Create a render window from the given parameters.
23
+ *
24
+ * @remarks
25
+ * The render window is a rectangle that defines the area of the text that
26
+ * should be rendered. It is used to skip rendering parts of the text that
27
+ * are outside of the render window. The render window is relative to the
28
+ * text's top left corner of the overrall text.
29
+ *
30
+ * @param x The x coordinate of the text element's top left corner relative to the screen.
31
+ * @param y The y coordinate of the text element's top left corner relative to the screen.
32
+ * @param scrollY The amount of pixels to scroll the text vertically.
33
+ * @param lineHeight The number of extra lines to render above and below the visible window.
34
+ * @param visibleWindow The visible window of the text element relative to the screen
35
+ * @returns
36
+ */
37
+ export function setRenderWindow(outRenderWindow, x, y, scrollY, lineHeight, bufferMargin, visibleWindow, fontSizeRatio) {
38
+ const { screen, sdf } = outRenderWindow;
39
+ if (!isBoundPositive(visibleWindow)) {
40
+ screen.x1 = 0;
41
+ screen.y1 = 0;
42
+ screen.x2 = 0;
43
+ screen.y2 = 0;
44
+ sdf.x1 = 0;
45
+ sdf.y1 = 0;
46
+ sdf.x2 = 0;
47
+ sdf.y2 = 0;
48
+ outRenderWindow.numLines = 0;
49
+ outRenderWindow.firstLineIdx = 0;
50
+ }
51
+ else {
52
+ const x1 = visibleWindow.x1 - x;
53
+ const x2 = x1 + (visibleWindow.x2 - visibleWindow.x1);
54
+ const y1Base = visibleWindow.y1 - y + scrollY;
55
+ const y1 = roundDownToMultiple(y1Base - bufferMargin, lineHeight || 1);
56
+ const y2 = roundUpToMultiple(y1Base + (visibleWindow.y2 - visibleWindow.y1) + bufferMargin, lineHeight || 1);
57
+ screen.x1 = x1;
58
+ screen.y1 = y1;
59
+ screen.x2 = x2;
60
+ screen.y2 = y2;
61
+ sdf.x1 = x1 / fontSizeRatio;
62
+ sdf.y1 = y1 / fontSizeRatio;
63
+ sdf.x2 = x2 / fontSizeRatio;
64
+ sdf.y2 = y2 / fontSizeRatio;
65
+ outRenderWindow.numLines = Math.ceil((y2 - y1) / lineHeight);
66
+ outRenderWindow.firstLineIdx = Math.floor(y1 / lineHeight);
67
+ }
68
+ outRenderWindow.valid = true;
69
+ }
70
+ //# sourceMappingURL=setRenderWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setRenderWindow.js","sourceRoot":"","sources":["../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,eAAe,EAAc,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAUnE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAC7B,eAAgC,EAChC,CAAe,EACf,CAAe,EACf,OAA2B,EAC3B,UAAkB,EAClB,YAAoB,EACpB,aAAoB,EACpB,aAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC;IACxC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;QACnC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACX,eAAe,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC7B,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC;KAClC;SAAM;QACL,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;QAC9C,MAAM,EAAE,GAAG,mBAAmB,CAAC,MAAM,GAAG,YAAY,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,iBAAiB,CAC1B,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,YAAY,EAC7D,UAAU,IAAI,CAAC,CAChB,CAAC;QAEF,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC;QAC5B,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC;QAC5B,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC;QAC5B,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC;QAE5B,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QAC7D,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;KAC5D;IACD,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Round up to the nearest multiple of the given number.
3
+ *
4
+ * @param value
5
+ * @param multiple
6
+ * @returns
7
+ */
8
+ export declare function roundUpToMultiple(value: number, multiple: number): number;
9
+ /**
10
+ * Round down to the nearest multiple of the given number.
11
+ *
12
+ * @param value
13
+ * @param multiple
14
+ * @returns
15
+ */
16
+ export declare function roundDownToMultiple(value: number, multiple: number): number;
@@ -0,0 +1,39 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ /**
20
+ * Round up to the nearest multiple of the given number.
21
+ *
22
+ * @param value
23
+ * @param multiple
24
+ * @returns
25
+ */
26
+ export function roundUpToMultiple(value, multiple) {
27
+ return Math.ceil(value / multiple) * multiple;
28
+ }
29
+ /**
30
+ * Round down to the nearest multiple of the given number.
31
+ *
32
+ * @param value
33
+ * @param multiple
34
+ * @returns
35
+ */
36
+ export function roundDownToMultiple(value, multiple) {
37
+ return Math.floor(value / multiple) * multiple;
38
+ }
39
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../../../../src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAgB;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,QAAgB;IACjE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACjD,CAAC"}
@@ -3,6 +3,7 @@ import type { Stage } from '../../Stage.js';
3
3
  import type { Matrix3d } from '../../lib/Matrix3d.js';
4
4
  import type { Rect } from '../../lib/utils.js';
5
5
  import type { TrFontFace, TrFontFaceDescriptors } from '../font-face-types/TrFontFace.js';
6
+ import type { TextBaseline, TextVerticalAlign } from './LightningTextTextureRenderer.js';
6
7
  /**
7
8
  * Augmentable map of text renderer type IDs to text renderer types.
8
9
  *
@@ -215,6 +216,55 @@ export interface TrProps extends TrFontProps {
215
216
  * @default 0
216
217
  */
217
218
  letterSpacing: number;
219
+ /**
220
+ * Line height for text (in pixels)
221
+ *
222
+ * @remarks
223
+ * This property sets the height of each line.
224
+ *
225
+ * @default 0
226
+ */
227
+ lineHeight: number;
228
+ /**
229
+ * Max lines for text
230
+ *
231
+ * @remarks
232
+ * This property sets max number of lines of a text paragraph.
233
+ * Not yet implemented in the SDF renderer.
234
+ *
235
+ * @default 0
236
+ */
237
+ maxLines: number;
238
+ /**
239
+ * Baseline for text
240
+ *
241
+ * @remarks
242
+ * This property sets the text baseline used when drawing text.
243
+ * Not yet implemented in the SDF renderer.
244
+ *
245
+ * @default alphabetic
246
+ */
247
+ textBaseline: TextBaseline;
248
+ /**
249
+ * Vertical Align for text when lineHeight > fontSize
250
+ *
251
+ * @remarks
252
+ * This property sets the vertical align of the text.
253
+ * Not yet implemented in the SDF renderer.
254
+ *
255
+ * @default middle
256
+ */
257
+ verticalAlign: TextVerticalAlign;
258
+ /**
259
+ * Overflow Suffix for text
260
+ *
261
+ * @remarks
262
+ * The suffix to be added when text is cropped due to overflow.
263
+ * Not yet implemented in the SDF renderer.
264
+ *
265
+ * @default "..."
266
+ */
267
+ overflowSuffix: string;
218
268
  zIndex: number;
219
269
  debug: Partial<TextRendererDebugProps>;
220
270
  }
@@ -71,6 +71,21 @@ const trPropSetterDefaults = {
71
71
  letterSpacing: (state, value) => {
72
72
  state.props.letterSpacing = value;
73
73
  },
74
+ lineHeight: (state, value) => {
75
+ state.props.lineHeight = value;
76
+ },
77
+ maxLines: (state, value) => {
78
+ state.props.maxLines = value;
79
+ },
80
+ textBaseline: (state, value) => {
81
+ state.props.textBaseline = value;
82
+ },
83
+ verticalAlign: (state, value) => {
84
+ state.props.verticalAlign = value;
85
+ },
86
+ overflowSuffix: (state, value) => {
87
+ state.props.overflowSuffix = value;
88
+ },
74
89
  debug: (state, value) => {
75
90
  state.props.debug = value;
76
91
  },
@@ -92,6 +107,10 @@ export class TextRenderer {
92
107
  (state, value) => {
93
108
  if (state.props[key] !== value) {
94
109
  setter(state, value);
110
+ // Assume any prop change will require a render
111
+ // This is required because otherwise a paused RAF will result
112
+ // in renders when text props are changed.
113
+ this.stage.requestRender();
95
114
  }
96
115
  },
97
116
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"TextRenderer.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/renderers/TextRenderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextRenderer.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/renderers/TextRenderer.ts"],"names":[],"mappings":"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"}
@@ -50,15 +50,20 @@ export class ImageTexture extends Texture {
50
50
  premultiplyAlpha,
51
51
  };
52
52
  }
53
- const response = await fetch(src);
54
- const blob = await response.blob();
55
- return {
56
- data: await createImageBitmap(blob, {
57
- premultiplyAlpha: premultiplyAlpha ? 'premultiply' : 'none',
58
- colorSpaceConversion: 'none',
59
- imageOrientation: 'none',
60
- }),
61
- };
53
+ if (this.txManager.imageWorkerManager.imageWorkersEnabled) {
54
+ return await this.txManager.imageWorkerManager.getImage(src, premultiplyAlpha);
55
+ }
56
+ else {
57
+ const response = await fetch(src);
58
+ const blob = await response.blob();
59
+ return {
60
+ data: await createImageBitmap(blob, {
61
+ premultiplyAlpha: premultiplyAlpha ? 'premultiply' : 'none',
62
+ colorSpaceConversion: 'none',
63
+ imageOrientation: 'none',
64
+ }),
65
+ };
66
+ }
62
67
  }
63
68
  static makeCacheKey(props) {
64
69
  const resolvedProps = ImageTexture.resolveDefaults(props);
@@ -1 +1 @@
1
- {"version":3,"file":"ImageTexture.js","sourceRoot":"","sources":["../../../../src/core/textures/ImageTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AA8BzD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,KAAK,CAA8B;IAEnC,YAAY,SAA6B,EAAE,KAAwB;QACjE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAEQ,KAAK,CAAC,cAAc;QAC3B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;gBACL,IAAI,EAAE,IAAI;aACX,CAAC;SACH;QACD,IAAI,GAAG,YAAY,SAAS,EAAE;YAC5B,OAAO;gBACL,IAAI,EAAE,GAAG;gBACT,gBAAgB;aACjB,CAAC;SACH;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,MAAM,iBAAiB,CAAC,IAAI,EAAE;gBAClC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;gBAC3D,oBAAoB,EAAE,MAAM;gBAC5B,gBAAgB,EAAE,MAAM;aACzB,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAU,YAAY,CAAC,KAAwB;QACnD,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1D,uDAAuD;QACvD,IAAI,aAAa,CAAC,GAAG,YAAY,SAAS,EAAE;YAC1C,OAAO,KAAK,CAAC;SACd;QACD,OAAO,gBAAgB,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,CAAU,eAAe,CAC7B,KAAwB;QAExB,OAAO;YACL,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;YACpB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;SACjD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe,CAAoB;CAC3C"}
1
+ {"version":3,"file":"ImageTexture.js","sourceRoot":"","sources":["../../../../src/core/textures/ImageTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AA8BzD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,KAAK,CAA8B;IAEnC,YAAY,SAA6B,EAAE,KAAwB;QACjE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAEQ,KAAK,CAAC,cAAc;QAC3B,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;gBACL,IAAI,EAAE,IAAI;aACX,CAAC;SACH;QACD,IAAI,GAAG,YAAY,SAAS,EAAE;YAC5B,OAAO;gBACL,IAAI,EAAE,GAAG;gBACT,gBAAgB;aACjB,CAAC;SACH;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,mBAAmB,EAAE;YACzD,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CACrD,GAAG,EACH,gBAAgB,CACjB,CAAC;SACH;aAAM;YACL,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO;gBACL,IAAI,EAAE,MAAM,iBAAiB,CAAC,IAAI,EAAE;oBAClC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;oBAC3D,oBAAoB,EAAE,MAAM;oBAC5B,gBAAgB,EAAE,MAAM;iBACzB,CAAC;aACH,CAAC;SACH;IACH,CAAC;IAED,MAAM,CAAU,YAAY,CAAC,KAAwB;QACnD,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1D,uDAAuD;QACvD,IAAI,aAAa,CAAC,GAAG,YAAY,SAAS,EAAE;YAC1C,OAAO,KAAK,CAAC;SACd;QACD,OAAO,gBAAgB,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,CAAU,eAAe,CAC7B,KAAwB;QAExB,OAAO;YACL,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;YACpB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;SACjD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe,CAAoB;CAC3C"}
@@ -1,8 +1,3 @@
1
- /**
2
- * Core Utility Functions
3
- *
4
- * @module
5
- */
6
1
  export declare const EPSILON = 0.000001;
7
2
  export declare let ARRAY_TYPE: Float32ArrayConstructor | ArrayConstructor;
8
3
  export declare const RANDOM: () => number;
@@ -12,4 +7,4 @@ export declare const toRadian: (a: number) => number;
12
7
  export declare const equals: (a: number, b: number) => boolean;
13
8
  export declare const rand: (min: number, max: number) => number;
14
9
  export declare const isPowerOfTwo: (value: number) => boolean | 0;
15
- export declare const getTimingFunction: (str: string) => (time: number) => number | undefined;
10
+ export declare const getTimingFunction: ((str: string) => (time: number) => number | undefined) & import("memize").MemizeMemoizedFunction;