@genome-spy/core 0.78.0 → 0.79.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.
- package/dist/bundle/{browser-KWU9rWZT.js → browser-CETrb2cm.js} +53 -33
- package/dist/bundle/esm-BdLYkz-m.js +248 -0
- package/dist/bundle/esm-BwiDsqSb.js +1367 -0
- package/dist/bundle/esm-CDFd1cjk.js +441 -0
- package/dist/bundle/{esm-DVOHLB1e.js → esm-CTUHLDbv.js} +30 -30
- package/dist/bundle/{esm-NIYEaYkc.js → esm-Cx-EbkOj.js} +13 -13
- package/dist/bundle/esm-DlYGqi79.js +128 -0
- package/dist/bundle/{esm-BygJiwh0.js → esm-k9p3oHkt.js} +133 -158
- package/dist/bundle/{esm-CT3ygiMq.js → esm-zAZJQO6D.js} +226 -212
- package/dist/bundle/index.es.js +14840 -11661
- package/dist/bundle/index.js +119 -108
- package/dist/bundle/{parquetRead-DG_-F5j5.js → parquetRead-Cad1SOVV.js} +473 -399
- package/dist/schema.json +18940 -6914
- package/dist/src/config/axisConfig.d.ts +2 -2
- package/dist/src/config/axisConfig.d.ts.map +1 -1
- package/dist/src/config/axisConfig.js +28 -44
- package/dist/src/config/configLayers.d.ts +45 -0
- package/dist/src/config/configLayers.d.ts.map +1 -0
- package/dist/src/config/configLayers.js +110 -0
- package/dist/src/config/defaultConfig.d.ts.map +1 -1
- package/dist/src/config/defaultConfig.js +8 -1
- package/dist/src/config/defaults/legendDefaults.d.ts +14 -0
- package/dist/src/config/defaults/legendDefaults.d.ts.map +1 -0
- package/dist/src/config/defaults/legendDefaults.js +46 -0
- package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/titleDefaults.js +26 -18
- package/dist/src/config/legendConfig.d.ts +11 -0
- package/dist/src/config/legendConfig.d.ts.map +1 -0
- package/dist/src/config/legendConfig.js +63 -0
- package/dist/src/config/styleUtils.d.ts +8 -2
- package/dist/src/config/styleUtils.d.ts.map +1 -1
- package/dist/src/config/styleUtils.js +25 -1
- package/dist/src/config/themes.d.ts.map +1 -1
- package/dist/src/config/themes.js +21 -2
- package/dist/src/config/titleConfig.d.ts.map +1 -1
- package/dist/src/config/titleConfig.js +2 -18
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +40 -18
- package/dist/src/data/flowInit.d.ts +6 -0
- package/dist/src/data/flowInit.d.ts.map +1 -1
- package/dist/src/data/flowInit.js +1 -1
- package/dist/src/data/flowNode.d.ts +32 -0
- package/dist/src/data/flowNode.d.ts.map +1 -1
- package/dist/src/data/flowNode.js +59 -0
- package/dist/src/data/sources/lazy/bamSource.d.ts +0 -1
- package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bamSource.js +39 -30
- package/dist/src/data/sources/lazy/bigBedSource.d.ts +0 -10
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.js +127 -62
- package/dist/src/data/sources/lazy/bigWigSource.d.ts +2 -2
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +234 -81
- package/dist/src/data/sources/lazy/gff3Source.d.ts +7 -3
- package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/gff3Source.js +7 -8
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts +1 -1
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/indexedFastaSource.js +28 -19
- package/dist/src/data/sources/lazy/legendEntriesSource.d.ts +24 -0
- package/dist/src/data/sources/lazy/legendEntriesSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/legendEntriesSource.js +217 -0
- package/dist/src/data/sources/lazy/legendGradientSource.d.ts +30 -0
- package/dist/src/data/sources/lazy/legendGradientSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/legendGradientSource.js +388 -0
- package/dist/src/data/sources/lazy/mockLazySource.d.ts +4 -1
- package/dist/src/data/sources/lazy/mockLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/mockLazySource.js +49 -4
- package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +3 -4
- package/dist/src/data/sources/lazy/tabixSource.d.ts +9 -4
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixSource.js +201 -70
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +2 -3
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixTsvSource.js +14 -12
- package/dist/src/data/sources/lazy/vcfSource.d.ts +7 -3
- package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/vcfSource.js +7 -8
- package/dist/src/data/sources/urlDescriptor.d.ts +165 -0
- package/dist/src/data/sources/urlDescriptor.d.ts.map +1 -0
- package/dist/src/data/sources/urlDescriptor.js +473 -0
- package/dist/src/data/sources/urlDescriptorController.d.ts +25 -0
- package/dist/src/data/sources/urlDescriptorController.d.ts.map +1 -0
- package/dist/src/data/sources/urlDescriptorController.js +72 -0
- package/dist/src/data/sources/urlDescriptorState.d.ts +47 -0
- package/dist/src/data/sources/urlDescriptorState.d.ts.map +1 -0
- package/dist/src/data/sources/urlDescriptorState.js +129 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +101 -61
- package/dist/src/data/transforms/packLegendLabels.d.ts +21 -0
- package/dist/src/data/transforms/packLegendLabels.d.ts.map +1 -0
- package/dist/src/data/transforms/packLegendLabels.js +189 -0
- package/dist/src/data/transforms/transformFactory.d.ts.map +1 -1
- package/dist/src/data/transforms/transformFactory.js +4 -0
- package/dist/src/data/transforms/truncateText.d.ts +27 -0
- package/dist/src/data/transforms/truncateText.d.ts.map +1 -0
- package/dist/src/data/transforms/truncateText.js +94 -0
- package/dist/src/debug/dataflowDebugSnapshot.d.ts +58 -0
- package/dist/src/debug/dataflowDebugSnapshot.d.ts.map +1 -0
- package/dist/src/debug/dataflowDebugSnapshot.js +159 -0
- package/dist/src/debug/markDebugSnapshot.d.ts +54 -0
- package/dist/src/debug/markDebugSnapshot.d.ts.map +1 -0
- package/dist/src/debug/markDebugSnapshot.js +100 -0
- package/dist/src/debug/paramDebugSnapshot.d.ts +53 -0
- package/dist/src/debug/paramDebugSnapshot.d.ts.map +1 -0
- package/dist/src/debug/paramDebugSnapshot.js +86 -0
- package/dist/src/debug/resolutionDebugSnapshot.d.ts +155 -0
- package/dist/src/debug/resolutionDebugSnapshot.d.ts.map +1 -0
- package/dist/src/debug/resolutionDebugSnapshot.js +291 -0
- package/dist/src/debug/valuePreview.d.ts +9 -0
- package/dist/src/debug/valuePreview.d.ts.map +1 -0
- package/dist/src/debug/valuePreview.js +57 -0
- package/dist/src/debug/viewDebugSnapshot.d.ts +131 -0
- package/dist/src/debug/viewDebugSnapshot.d.ts.map +1 -0
- package/dist/src/debug/viewDebugSnapshot.js +390 -0
- package/dist/src/embedFactory.d.ts.map +1 -1
- package/dist/src/embedFactory.js +6 -1
- package/dist/src/encoder/encoder.d.ts +2 -2
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +5 -4
- package/dist/src/fonts/bmFontManager.d.ts +1 -1
- package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
- package/dist/src/fonts/bmFontManager.js +45 -10
- package/dist/src/fonts/textMetrics.d.ts +69 -0
- package/dist/src/fonts/textMetrics.d.ts.map +1 -0
- package/dist/src/fonts/textMetrics.js +73 -0
- package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -1
- package/dist/src/genomeSpy/headlessBootstrap.js +6 -0
- package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -1
- package/dist/src/genomeSpy/renderCoordinator.js +25 -3
- package/dist/src/genomeSpy/viewDataInit.d.ts +14 -0
- package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
- package/dist/src/genomeSpy/viewDataInit.js +45 -8
- package/dist/src/genomeSpyBase.d.ts +6 -0
- package/dist/src/genomeSpyBase.d.ts.map +1 -1
- package/dist/src/genomeSpyBase.js +20 -3
- package/dist/src/gl/glslScaleGenerator.d.ts +17 -0
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +39 -2
- package/dist/src/gl/includes/common.glsl.js +1 -1
- package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -1
- package/dist/src/gl/vertexRangeIndex.js +4 -2
- package/dist/src/gl/webGLHelper.d.ts +1 -1
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +13 -8
- package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +140 -3
- package/dist/src/marks/mark.d.ts +47 -4
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +158 -54
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +4 -0
- package/dist/src/marks/point.vertex.glsl.js +1 -1
- package/dist/src/marks/text.d.ts +1 -1
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +2 -7
- package/dist/src/marks/text.vertex.glsl.js +1 -1
- package/dist/src/paramRuntime/paramUtils.d.ts +43 -9
- package/dist/src/paramRuntime/paramUtils.d.ts.map +1 -1
- package/dist/src/paramRuntime/paramUtils.js +61 -1
- package/dist/src/paramRuntime/viewParamRuntime.d.ts +32 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +63 -0
- package/dist/src/scales/axisResolution.d.ts +35 -0
- package/dist/src/scales/axisResolution.d.ts.map +1 -1
- package/dist/src/scales/axisResolution.js +115 -7
- package/dist/src/scales/legendResolution.d.ts +83 -0
- package/dist/src/scales/legendResolution.d.ts.map +1 -0
- package/dist/src/scales/legendResolution.js +461 -0
- package/dist/src/scales/scaleResolution.d.ts +36 -0
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +59 -0
- package/dist/src/scales/viewLevelGuideConfig.d.ts +53 -0
- package/dist/src/scales/viewLevelGuideConfig.d.ts.map +1 -0
- package/dist/src/scales/viewLevelGuideConfig.js +224 -0
- package/dist/src/scales/viewLevelScaleConfig.d.ts.map +1 -1
- package/dist/src/scales/viewLevelScaleConfig.js +13 -2
- package/dist/src/spec/axis.d.ts +109 -3
- package/dist/src/spec/channel.d.ts +23 -4
- package/dist/src/spec/config.d.ts +59 -4
- package/dist/src/spec/data.d.ts +177 -17
- package/dist/src/spec/legend.d.ts +246 -0
- package/dist/src/spec/mark.d.ts +16 -4
- package/dist/src/spec/title.d.ts +58 -1
- package/dist/src/spec/transform.d.ts +149 -0
- package/dist/src/spec/view.d.ts +39 -6
- package/dist/src/types/embedApi.d.ts +262 -6
- package/dist/src/types/rendering.d.ts +19 -3
- package/dist/src/types/viewContext.d.ts +18 -2
- package/dist/src/utils/arrayUtils.d.ts +11 -0
- package/dist/src/utils/arrayUtils.d.ts.map +1 -1
- package/dist/src/utils/arrayUtils.js +23 -0
- package/dist/src/utils/suspension.d.ts +17 -0
- package/dist/src/utils/suspension.d.ts.map +1 -0
- package/dist/src/utils/suspension.js +41 -0
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +1 -4
- package/dist/src/view/axisView.d.ts +18 -2
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +180 -75
- package/dist/src/view/concatView.d.ts +10 -2
- package/dist/src/view/concatView.d.ts.map +1 -1
- package/dist/src/view/concatView.js +46 -9
- package/dist/src/view/containerMutationHelper.d.ts +20 -1
- package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
- package/dist/src/view/containerMutationHelper.js +196 -33
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/gridView/gridChild.d.ts +54 -4
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +301 -120
- package/dist/src/view/gridView/gridChildLegends.d.ts +57 -0
- package/dist/src/view/gridView/gridChildLegends.d.ts.map +1 -0
- package/dist/src/view/gridView/gridChildLegends.js +503 -0
- package/dist/src/view/gridView/gridView.d.ts +25 -0
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +454 -78
- package/dist/src/view/gridView/legendLayout.d.ts +26 -0
- package/dist/src/view/gridView/legendLayout.d.ts.map +1 -0
- package/dist/src/view/gridView/legendLayout.js +111 -0
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +1 -4
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +1 -4
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
- package/dist/src/view/gridView/separatorView.js +1 -4
- package/dist/src/view/layerView.d.ts +9 -2
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layerView.js +18 -1
- package/dist/src/view/layout/flexLayout.d.ts +20 -4
- package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
- package/dist/src/view/layout/flexLayout.js +331 -31
- package/dist/src/view/layout/rectangle.d.ts +14 -0
- package/dist/src/view/layout/rectangle.d.ts.map +1 -1
- package/dist/src/view/layout/rectangle.js +40 -0
- package/dist/src/view/legend/legendEntries.d.ts +20 -0
- package/dist/src/view/legend/legendEntries.d.ts.map +1 -0
- package/dist/src/view/legend/legendEntries.js +21 -0
- package/dist/src/view/legendView.d.ts +134 -0
- package/dist/src/view/legendView.d.ts.map +1 -0
- package/dist/src/view/legendView.js +1611 -0
- package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
- package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +26 -4
- package/dist/src/view/renderingContext/clipOptions.d.ts +44 -0
- package/dist/src/view/renderingContext/clipOptions.d.ts.map +1 -0
- package/dist/src/view/renderingContext/clipOptions.js +140 -0
- package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -1
- package/dist/src/view/renderingContext/simpleViewRenderingContext.js +12 -1
- package/dist/src/view/resolutionPlanner.d.ts +2 -1
- package/dist/src/view/resolutionPlanner.d.ts.map +1 -1
- package/dist/src/view/resolutionPlanner.js +89 -25
- package/dist/src/view/testUtils.d.ts +4 -2
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +29 -7
- package/dist/src/view/titleView.d.ts +37 -0
- package/dist/src/view/titleView.d.ts.map +1 -0
- package/dist/src/view/titleView.js +584 -0
- package/dist/src/view/unitView.d.ts +3 -3
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +3 -2
- package/dist/src/view/view.d.ts +25 -24
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +121 -16
- package/dist/src/view/viewFactory.d.ts +2 -5
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +1 -2
- package/dist/src/view/viewIdentityRegistry.d.ts +37 -0
- package/dist/src/view/viewIdentityRegistry.d.ts.map +1 -0
- package/dist/src/view/viewIdentityRegistry.js +71 -0
- package/dist/src/view/viewMutationAcidTestUtils.d.ts +112 -0
- package/dist/src/view/viewMutationAcidTestUtils.d.ts.map +1 -0
- package/dist/src/view/viewMutationAcidTestUtils.js +234 -0
- package/dist/src/view/viewMutationApi.d.ts +42 -0
- package/dist/src/view/viewMutationApi.d.ts.map +1 -0
- package/dist/src/view/viewMutationApi.js +811 -0
- package/dist/src/view/viewSelectors.d.ts +10 -0
- package/dist/src/view/viewSelectors.d.ts.map +1 -1
- package/dist/src/view/viewSelectors.js +23 -1
- package/package.json +4 -4
- package/dist/bundle/esm-CuMSzCHy.js +0 -298
- package/dist/bundle/esm-DAnOffpD.js +0 -1426
- package/dist/bundle/esm-DMXpJXM4.js +0 -369
- package/dist/bundle/esm-DNtC3H80.js +0 -121
- package/dist/src/view/title.d.ts +0 -13
- package/dist/src/view/title.d.ts.map +0 -1
- package/dist/src/view/title.js +0 -154
- /package/dist/bundle/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BTmAcN-t.js} +0 -0
- /package/dist/bundle/{esm-CuVa5T98.js → esm-VvpZ9hsq.js} +0 -0
- /package/dist/bundle/{chunk-DmhlhrBa.js → rolldown-runtime-Dy4uBu1J.js} +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("./bmFontManager.js").BMFontMetrics} BMFontMetrics
|
|
3
|
+
* @typedef {import("../spec/font.js").FontStyle} FontStyle
|
|
4
|
+
* @typedef {import("../spec/font.js").FontWeight} FontWeight
|
|
5
|
+
* @typedef {{ metrics?: BMFontMetrics, texture?: WebGLTexture }} FontEntryLike
|
|
6
|
+
* @typedef {{
|
|
7
|
+
* font?: string,
|
|
8
|
+
* fontStyle?: FontStyle,
|
|
9
|
+
* fontWeight?: FontWeight,
|
|
10
|
+
* }} FontConfig
|
|
11
|
+
* @typedef {{
|
|
12
|
+
* getDefaultFont: () => FontEntryLike,
|
|
13
|
+
* getFont: (
|
|
14
|
+
* family?: string,
|
|
15
|
+
* style?: FontStyle,
|
|
16
|
+
* weight?: FontWeight
|
|
17
|
+
* ) => FontEntryLike,
|
|
18
|
+
* }} FontManagerLike
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Requests a font entry and registers asynchronous loading for custom fonts.
|
|
23
|
+
*
|
|
24
|
+
* @param {FontManagerLike} fontManager
|
|
25
|
+
* @param {FontConfig} config
|
|
26
|
+
* @returns {FontEntryLike}
|
|
27
|
+
*/
|
|
28
|
+
export function requestFont(fontManager, config) {
|
|
29
|
+
return fontManager.getFont(
|
|
30
|
+
config.font,
|
|
31
|
+
config.fontStyle,
|
|
32
|
+
config.fontWeight
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @param {BMFontMetrics} metrics
|
|
38
|
+
* @param {number} fontSize
|
|
39
|
+
*/
|
|
40
|
+
export function getTextHeight(metrics, fontSize) {
|
|
41
|
+
return (
|
|
42
|
+
((metrics.capHeight + metrics.descent) / metrics.common.base) * fontSize
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {BMFontMetrics} metrics
|
|
48
|
+
* @param {string} text
|
|
49
|
+
* @param {number} fontSize
|
|
50
|
+
*/
|
|
51
|
+
export function measureText(metrics, text, fontSize) {
|
|
52
|
+
return {
|
|
53
|
+
width: metrics.measureWidth(text, fontSize),
|
|
54
|
+
height: getTextHeight(metrics, fontSize),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Returns the projected text extent along a layout direction after rotation.
|
|
60
|
+
*
|
|
61
|
+
* @param {{ width: number, height: number }} size
|
|
62
|
+
* @param {number} angle
|
|
63
|
+
* @param {"horizontal" | "vertical"} direction
|
|
64
|
+
*/
|
|
65
|
+
export function getProjectedTextExtent(size, angle, direction) {
|
|
66
|
+
const radians = (angle * Math.PI) / 180;
|
|
67
|
+
const absSin = Math.abs(Math.sin(radians));
|
|
68
|
+
const absCos = Math.abs(Math.cos(radians));
|
|
69
|
+
|
|
70
|
+
return direction == "vertical"
|
|
71
|
+
? size.width * absSin + size.height * absCos
|
|
72
|
+
: size.width * absCos + size.height * absSin;
|
|
73
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headlessBootstrap.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/headlessBootstrap.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headlessBootstrap.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/headlessBootstrap.js"],"names":[],"mappings":"AAuEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,oDAhCW;IACN,kBAAkB,CAAC,EAAE,OAAO,wBAAwB,EAAE,kBAAkB,CAAC;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;IAClD,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IAClD,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC;IAC/D,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC9E,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CACpB,IAAI,EAAE,SAAS,GAAG,OAAO,EACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,KACrC,IAAI,CAAC;IACV,oBAAoB,CAAC,EAAE,CACrB,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAClD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,iBAAiB,EAAE,gBAAgB,KAAK,IAAI,KACpE,IAAI,CAAC;IACV,uBAAuB,CAAC,EAAE,CACxB,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAClD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,iBAAiB,EAAE,gBAAgB,KAAK,IAAI,KACpE,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IACzE,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;CACnD,GACS,WAAW,CA4DvB;AAED;;;;GAIG;AACH,+CAFW,OAAO,iBAAiB,EAAE,OAAO,QAK3C;AAED;;;;;;;;;;;GAWG;AACH,2CARW,QAAQ,YACR;IACN,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CAChD,GACS,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,CAiCtF;AAED;;;;;;;;;;;GAWG;AACH,kDARW,QAAQ,YACR;IACN,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,OAAO,wBAAwB,EAAE,kBAAkB,CAAC;CAC1E,GACS,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,CAwBtF;;;;uBA1PY,OAAO,iBAAiB,EAAE,QAAQ;;;;0BAClC,OAAO,yBAAyB,EAAE,OAAO;qBAGjC,qBAAqB;wBAClB,0BAA0B;0BACxB,2BAA2B;kCAGnB,4BAA4B"}
|
|
@@ -15,6 +15,10 @@ import { createViewContext } from "./viewContextFactory.js";
|
|
|
15
15
|
import { ViewFactory, VIEW_ROOT_NAME } from "../view/viewFactory.js";
|
|
16
16
|
import { ensureAssembliesForView } from "../genome/assemblyPreflight.js";
|
|
17
17
|
import { attachViewLevelScaleConfigs } from "../scales/viewLevelScaleConfig.js";
|
|
18
|
+
import {
|
|
19
|
+
attachViewLevelAxisConfigs,
|
|
20
|
+
attachViewLevelLegendConfigs,
|
|
21
|
+
} from "../scales/viewLevelGuideConfig.js";
|
|
18
22
|
import {
|
|
19
23
|
configureViewHierarchy,
|
|
20
24
|
configureViewOpacity,
|
|
@@ -198,6 +202,8 @@ export async function createHeadlessEngine(spec, options = {}) {
|
|
|
198
202
|
);
|
|
199
203
|
|
|
200
204
|
attachViewLevelScaleConfigs(view);
|
|
205
|
+
attachViewLevelAxisConfigs(view);
|
|
206
|
+
attachViewLevelLegendConfigs(view);
|
|
201
207
|
await ensureAssembliesForView(view, context.genomeStore);
|
|
202
208
|
prepareViewHierarchy(view);
|
|
203
209
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderCoordinator.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/renderCoordinator.js"],"names":[],"mappings":"AAIA;IAiBI;;;;;;;OAOG;IACH,iFANG;QAAmD,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;QACe,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QAChB,aAAa,EAAnC,MAAM,MAAM;QACyE,SAAS,EAA9F,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI;QACvD,gBAAgB,EAApC,MAAM,IAAI;KACpB,EAqBA;IAED,
|
|
1
|
+
{"version":3,"file":"renderCoordinator.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/renderCoordinator.js"],"names":[],"mappings":"AAIA;IAiBI;;;;;;;OAOG;IACH,iFANG;QAAmD,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;QACe,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QAChB,aAAa,EAAnC,MAAM,MAAM;QACyE,SAAS,EAA9F,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI;QACvD,gBAAgB,EAApC,MAAM,IAAI;KACpB,EAqBA;IAED,sBA2BC;IA+CD,kBAIC;IAED,iCAOC;;CACJ"}
|
|
@@ -57,6 +57,29 @@ export default class RenderCoordinator {
|
|
|
57
57
|
|
|
58
58
|
this.#broadcast("layout");
|
|
59
59
|
|
|
60
|
+
// Layout may change the root-derived canvas size. Start with a fresh
|
|
61
|
+
// size, then repeat only if the pass caused the applied canvas size to
|
|
62
|
+
// change so buffered render commands use current dimensions.
|
|
63
|
+
this.#glHelper.invalidateSize();
|
|
64
|
+
let remainingPasses = 5;
|
|
65
|
+
while (this.#computeLayoutPass()) {
|
|
66
|
+
if (!this.#glHelper.invalidateSize()) {
|
|
67
|
+
this.#onLayoutComputed();
|
|
68
|
+
this.#broadcast("layoutComputed");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
remainingPasses--;
|
|
73
|
+
if (remainingPasses == 0) {
|
|
74
|
+
throw new Error(
|
|
75
|
+
"Layout did not settle: canvas size kept changing."
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#computeLayoutPass() {
|
|
82
|
+
const root = this.#viewRoot;
|
|
60
83
|
const canvasSize = this.#glHelper.getLogicalCanvasSize();
|
|
61
84
|
|
|
62
85
|
if (isNaN(canvasSize.width) || isNaN(canvasSize.height)) {
|
|
@@ -64,7 +87,7 @@ export default class RenderCoordinator {
|
|
|
64
87
|
console.log(
|
|
65
88
|
`NaN in canvas size: ${canvasSize.width}x${canvasSize.height}. Skipping computeLayout().`
|
|
66
89
|
);
|
|
67
|
-
return;
|
|
90
|
+
return false;
|
|
68
91
|
}
|
|
69
92
|
|
|
70
93
|
const commonOptions = {
|
|
@@ -97,8 +120,7 @@ export default class RenderCoordinator {
|
|
|
97
120
|
Rectangle.create(0, 0, canvasSize.width, canvasSize.height)
|
|
98
121
|
);
|
|
99
122
|
|
|
100
|
-
|
|
101
|
-
this.#broadcast("layoutComputed");
|
|
123
|
+
return true;
|
|
102
124
|
}
|
|
103
125
|
|
|
104
126
|
renderAll() {
|
|
@@ -19,4 +19,18 @@ export function initializeViewData(viewRoot: import("../view/view.js").default,
|
|
|
19
19
|
* @returns {Promise<import("../data/dataFlow.js").default>}
|
|
20
20
|
*/
|
|
21
21
|
export function initializeVisibleViewData(viewRoot: import("../view/view.js").default, dataFlow: import("../data/dataFlow.js").default, fontManager: import("../fonts/bmFontManager.js").default): Promise<import("../data/dataFlow.js").default>;
|
|
22
|
+
/**
|
|
23
|
+
* Initializes dataflow/graphics for selected views while avoiding unnecessary
|
|
24
|
+
* data source reloads.
|
|
25
|
+
*
|
|
26
|
+
* If a selected view attaches downstream of an already completed collector,
|
|
27
|
+
* the collector is repropagated instead of reloading the source.
|
|
28
|
+
*
|
|
29
|
+
* @param {import("../view/view.js").default} viewRoot
|
|
30
|
+
* @param {import("../data/dataFlow.js").default} dataFlow
|
|
31
|
+
* @param {import("../fonts/bmFontManager.js").default} fontManager
|
|
32
|
+
* @param {Iterable<import("../view/view.js").default>} candidateViews
|
|
33
|
+
* @returns {Promise<import("../data/dataFlow.js").default>}
|
|
34
|
+
*/
|
|
35
|
+
export function initializeViewDataForViews(viewRoot: import("../view/view.js").default, dataFlow: import("../data/dataFlow.js").default, fontManager: import("../fonts/bmFontManager.js").default, candidateViews: Iterable<import("../view/view.js").default>): Promise<import("../data/dataFlow.js").default>;
|
|
22
36
|
//# sourceMappingURL=viewDataInit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewDataInit.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewDataInit.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewDataInit.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewDataInit.js"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,6CANW,OAAO,iBAAiB,EAAE,OAAO,YACjC,OAAO,qBAAqB,EAAE,OAAO,eACrC,OAAO,2BAA2B,EAAE,OAAO,mBAC3C,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,OAAO,KAAK,IAAI,GACvD,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAoC1D;AAED;;;;;;;;GAQG;AACH,oDALW,OAAO,iBAAiB,EAAE,OAAO,YACjC,OAAO,qBAAqB,EAAE,OAAO,eACrC,OAAO,2BAA2B,EAAE,OAAO,GACzC,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAqB1D;AAED;;;;;;;;;;;;GAYG;AACH,qDANW,OAAO,iBAAiB,EAAE,OAAO,YACjC,OAAO,qBAAqB,EAAE,OAAO,eACrC,OAAO,2BAA2B,EAAE,OAAO,kBAC3C,QAAQ,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,GACzC,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CA+E1D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
broadcastSubtreeDataReady,
|
|
2
3
|
initializeViewSubtree,
|
|
3
4
|
loadViewSubtreeData,
|
|
4
5
|
} from "../data/flowInit.js";
|
|
@@ -38,6 +39,8 @@ export async function initializeViewData(
|
|
|
38
39
|
// await fonts inside text mark graphics updates and before loading data for
|
|
39
40
|
// subtrees that contain measureText transforms.
|
|
40
41
|
await fontManager.waitUntilReady();
|
|
42
|
+
viewRoot.invalidateSizeCache();
|
|
43
|
+
await finalizeSubtreeGraphics(graphicsPromises);
|
|
41
44
|
|
|
42
45
|
// Find all data sources and initiate loading.
|
|
43
46
|
await loadViewSubtreeData(
|
|
@@ -46,8 +49,6 @@ export async function initializeViewData(
|
|
|
46
49
|
visibilityPredicate
|
|
47
50
|
);
|
|
48
51
|
|
|
49
|
-
await finalizeSubtreeGraphics(graphicsPromises);
|
|
50
|
-
|
|
51
52
|
return builtDataFlow;
|
|
52
53
|
}
|
|
53
54
|
|
|
@@ -65,10 +66,6 @@ export async function initializeVisibleViewData(
|
|
|
65
66
|
dataFlow,
|
|
66
67
|
fontManager
|
|
67
68
|
) {
|
|
68
|
-
// Initialize dataflow/graphics for views that have become visible since the
|
|
69
|
-
// initial load, while avoiding unnecessary data source reloads. If a view
|
|
70
|
-
// attaches downstream of an already completed collector, repropagate that
|
|
71
|
-
// collector instead of reloading the source.
|
|
72
69
|
const visibilityPredicate = (
|
|
73
70
|
/** @type {import("../view/view.js").default} */ view
|
|
74
71
|
) => view.isConfiguredVisible();
|
|
@@ -77,6 +74,45 @@ export async function initializeVisibleViewData(
|
|
|
77
74
|
(view) => view.getDataInitializationState() === "none"
|
|
78
75
|
);
|
|
79
76
|
|
|
77
|
+
return initializeViewDataForViews(
|
|
78
|
+
viewRoot,
|
|
79
|
+
dataFlow,
|
|
80
|
+
fontManager,
|
|
81
|
+
viewsToInitialize
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Initializes dataflow/graphics for selected views while avoiding unnecessary
|
|
87
|
+
* data source reloads.
|
|
88
|
+
*
|
|
89
|
+
* If a selected view attaches downstream of an already completed collector,
|
|
90
|
+
* the collector is repropagated instead of reloading the source.
|
|
91
|
+
*
|
|
92
|
+
* @param {import("../view/view.js").default} viewRoot
|
|
93
|
+
* @param {import("../data/dataFlow.js").default} dataFlow
|
|
94
|
+
* @param {import("../fonts/bmFontManager.js").default} fontManager
|
|
95
|
+
* @param {Iterable<import("../view/view.js").default>} candidateViews
|
|
96
|
+
* @returns {Promise<import("../data/dataFlow.js").default>}
|
|
97
|
+
*/
|
|
98
|
+
export async function initializeViewDataForViews(
|
|
99
|
+
viewRoot,
|
|
100
|
+
dataFlow,
|
|
101
|
+
fontManager,
|
|
102
|
+
candidateViews
|
|
103
|
+
) {
|
|
104
|
+
const candidates = new Set(candidateViews);
|
|
105
|
+
const visibilityPredicate = (
|
|
106
|
+
/** @type {import("../view/view.js").default} */ view
|
|
107
|
+
) => view.isConfiguredVisible();
|
|
108
|
+
const viewsToInitialize = collectVisibleViews(
|
|
109
|
+
viewRoot,
|
|
110
|
+
visibilityPredicate
|
|
111
|
+
).filter(
|
|
112
|
+
(view) =>
|
|
113
|
+
candidates.has(view) && view.getDataInitializationState() === "none"
|
|
114
|
+
);
|
|
115
|
+
|
|
80
116
|
if (viewsToInitialize.length === 0) {
|
|
81
117
|
return dataFlow;
|
|
82
118
|
}
|
|
@@ -113,6 +149,8 @@ export async function initializeVisibleViewData(
|
|
|
113
149
|
// Newly visible subtrees may introduce text marks or measureText transforms
|
|
114
150
|
// that request fonts during initializeViewSubtree.
|
|
115
151
|
await fontManager.waitUntilReady();
|
|
152
|
+
viewRoot.invalidateSizeCache();
|
|
153
|
+
await finalizeSubtreeGraphics(graphicsPromises);
|
|
116
154
|
|
|
117
155
|
for (const collector of collectorsToRepropagate) {
|
|
118
156
|
collector.repropagate();
|
|
@@ -131,8 +169,7 @@ export async function initializeVisibleViewData(
|
|
|
131
169
|
)
|
|
132
170
|
);
|
|
133
171
|
}
|
|
134
|
-
|
|
135
|
-
await finalizeSubtreeGraphics(graphicsPromises);
|
|
172
|
+
broadcastSubtreeDataReady(viewRoot);
|
|
136
173
|
|
|
137
174
|
return builtDataFlow;
|
|
138
175
|
}
|
|
@@ -24,6 +24,8 @@ export default class GenomeSpy {
|
|
|
24
24
|
/** @type {(function(string):object[])[]} */
|
|
25
25
|
namedDataProviders: ((arg0: string) => object[])[];
|
|
26
26
|
animator: Animator;
|
|
27
|
+
/** @type {(timestamp?: number) => void} */
|
|
28
|
+
_layoutReflowTransition: (timestamp?: number) => void;
|
|
27
29
|
/** @type {GenomeStore} */
|
|
28
30
|
genomeStore: GenomeStore;
|
|
29
31
|
/**
|
|
@@ -122,6 +124,10 @@ export default class GenomeSpy {
|
|
|
122
124
|
height: number | undefined;
|
|
123
125
|
};
|
|
124
126
|
computeLayout(): void;
|
|
127
|
+
/**
|
|
128
|
+
* Recomputes layout and schedules the buffered render commands to be drawn.
|
|
129
|
+
*/
|
|
130
|
+
requestLayoutReflow(): void;
|
|
125
131
|
renderAll(): void;
|
|
126
132
|
renderPickingFramebuffer(): void;
|
|
127
133
|
getSearchableViews(): UnitView<import("./spec/view.js").UnitSpec>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genomeSpyBase.d.ts","sourceRoot":"","sources":["../../src/genomeSpyBase.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"genomeSpyBase.d.ts","sourceRoot":"","sources":["../../src/genomeSpyBase.js"],"names":[],"mappings":"AAoDA;;;GAGG;AAEH;IAoBI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA+CpD;IA5CG,uBAA0B;IAC1B,oDAAsB;IAItB,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,CAAC,CAAS,IAAM,EAAN,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAIpD,2CAA2C;IAC3C,yBADW,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CACkB;IAEzD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,yBAFU,CAAC,IAAI,qEAAM,KAAK,OAAO,CAE8B;IAE/D,oFAAoF;IACpF,iBADW,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,8EAAyB;IAIzB,YAAkC;IAatC;;;OAGG;IACH,oCAFW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAYf;IAED;;;;OAIG;IACH,eAFW,MAAM,oFAIhB;IAED;;;OAGG;IACH,uBAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;OAGG;IACH,0BAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAMb;IAmEG,iDAAsB;IAQ1B;;OAEG;IACH,gBAqBC;IA6ND;;;OAGG;IACH,UAFa,OAAO,CAAC,OAAO,CAAC,CA2C5B;IAED,2CAiBC;IAED;;;;;OAKG;IACH,8BAFW,WAAW,iBAerB;IAED;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAKlF;IAED;;;;;;;;OAQG;IACH,4BANW,MAAM,kBACN,MAAM,qBACN,MAAM,eACN,MAAM,UAuBhB;IAED;;;MAEC;IAED;eACwB,MAAM,GAAG,SAAS;gBAAU,MAAM,GAAG,SAAS;MAcrE;IAED,sBAEC;IAED;;OAEG;IACH,4BAEC;IAED,kBAEC;IAED,iCAEC;IAED,oEAYC;IAED,uFAWC;;CACJ;;;;iCAzqBY,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB;4BA5BnC,uBAAuB;qBAP9C,qBAAqB;wBAElB,yBAAyB;qBAL5B,oBAAoB"}
|
|
@@ -35,6 +35,10 @@ import { resolveEmbedParam } from "./paramRuntime/embedParamApi.js";
|
|
|
35
35
|
import SingleAxisWindowedSource from "./data/sources/lazy/singleAxisWindowedSource.js";
|
|
36
36
|
import { ensureAssembliesForView } from "./genome/assemblyPreflight.js";
|
|
37
37
|
import { attachViewLevelScaleConfigs } from "./scales/viewLevelScaleConfig.js";
|
|
38
|
+
import {
|
|
39
|
+
attachViewLevelAxisConfigs,
|
|
40
|
+
attachViewLevelLegendConfigs,
|
|
41
|
+
} from "./scales/viewLevelGuideConfig.js";
|
|
38
42
|
import { resolveRootGenomeConfig } from "./genome/rootGenomeConfig.js";
|
|
39
43
|
import { awaitSubtreeLazyReady } from "./view/dataReadiness.js";
|
|
40
44
|
import { INTERNAL_DEFAULT_CONFIG } from "./config/defaultConfig.js";
|
|
@@ -100,6 +104,11 @@ export default class GenomeSpy {
|
|
|
100
104
|
|
|
101
105
|
this.animator = new Animator(() => this.renderAll());
|
|
102
106
|
|
|
107
|
+
// Use a stable callback identity so repeated layout requests coalesce
|
|
108
|
+
// in Animator's transition queue before the next render.
|
|
109
|
+
/** @type {(timestamp?: number) => void} */
|
|
110
|
+
this._layoutReflowTransition = () => this.computeLayout();
|
|
111
|
+
|
|
103
112
|
/** @type {GenomeStore} */
|
|
104
113
|
this.genomeStore = undefined;
|
|
105
114
|
|
|
@@ -441,6 +450,8 @@ export default class GenomeSpy {
|
|
|
441
450
|
// inheritance resolved), but before any code path that may touch scales
|
|
442
451
|
// (e.g. step-based sizes, dynamic opacity, encoder initialization).
|
|
443
452
|
attachViewLevelScaleConfigs(this.viewRoot);
|
|
453
|
+
attachViewLevelAxisConfigs(this.viewRoot);
|
|
454
|
+
attachViewLevelLegendConfigs(this.viewRoot);
|
|
444
455
|
await ensureAssembliesForView(this.viewRoot, this.genomeStore);
|
|
445
456
|
|
|
446
457
|
this.#loadingStatusRegistry.set(this.viewRoot, "loading");
|
|
@@ -486,7 +497,7 @@ export default class GenomeSpy {
|
|
|
486
497
|
|
|
487
498
|
// Allow early layout requests from view subscriptions created during initialization.
|
|
488
499
|
// Layout will be recomputed anyway once launch completes.
|
|
489
|
-
context.requestLayoutReflow = this.
|
|
500
|
+
context.requestLayoutReflow = this.requestLayoutReflow.bind(this);
|
|
490
501
|
|
|
491
502
|
this.#setupDpr();
|
|
492
503
|
}
|
|
@@ -507,7 +518,7 @@ export default class GenomeSpy {
|
|
|
507
518
|
*/
|
|
508
519
|
#finalizeViewInitialization(context) {
|
|
509
520
|
// Allow layout computation (in case a custom context overrode the early assignment).
|
|
510
|
-
context.requestLayoutReflow = this.
|
|
521
|
+
context.requestLayoutReflow = this.requestLayoutReflow.bind(this);
|
|
511
522
|
|
|
512
523
|
// Invalidate cached sizes to ensure that step-based sizes are current.
|
|
513
524
|
// TODO: This should be done automatically when the domains of band/point scales are updated.
|
|
@@ -679,7 +690,13 @@ export default class GenomeSpy {
|
|
|
679
690
|
|
|
680
691
|
computeLayout() {
|
|
681
692
|
this.#renderCoordinator.computeLayout();
|
|
682
|
-
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* Recomputes layout and schedules the buffered render commands to be drawn.
|
|
697
|
+
*/
|
|
698
|
+
requestLayoutReflow() {
|
|
699
|
+
this.animator.requestTransition(this._layoutReflowTransition);
|
|
683
700
|
}
|
|
684
701
|
|
|
685
702
|
renderAll() {
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets the boundary values that the shader uses for discretizing scale buckets.
|
|
3
|
+
* Threshold scales expose the boundaries as their domain, while quantize scales
|
|
4
|
+
* derive them from the domain extent and range count.
|
|
5
|
+
*
|
|
6
|
+
* @param {any} scale
|
|
7
|
+
* @returns {number[]}
|
|
8
|
+
*/
|
|
9
|
+
export function getDiscretizingDomainForGlsl(scale: any): number[];
|
|
10
|
+
/**
|
|
11
|
+
* Gets the number of buckets needed for a discrete or discretizing range
|
|
12
|
+
* texture.
|
|
13
|
+
*
|
|
14
|
+
* @param {any} scale
|
|
15
|
+
* @returns {number}
|
|
16
|
+
*/
|
|
17
|
+
export function getDiscreteRangeCountForGlsl(scale: any): number;
|
|
1
18
|
/**
|
|
2
19
|
*
|
|
3
20
|
* @param {Channel} channel
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA8BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AACH,2CAJW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;
|
|
1
|
+
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":"AAsDA;;;;;;;GAOG;AACH,oDAHW,GAAG,GACD,MAAM,EAAE,CAQpB;AAED;;;;;;GAMG;AACH,oDAHW,GAAG,GACD,MAAM,CAUlB;AAED;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA8BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AACH,2CAJW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;EA0QjD;AAED;;;;GAIG;AACH,wDAHW,OAAO,YACP,OAAO,qBAAqB,EAAE,cAAc,EAAE,UA+BxD;AAmED;;GAEG;AACH,qDAFW,OAAO,6BAQjB;AAuCD;;;;GAIG;AACH,iDAHW,OAAO,qBAAqB,EAAE,SAAS,WACvC,OAAO,oBAAoB,EAAE,OAAO;mBAQjB,MAAM;sBAAoB,sBAAsB,GAAG,sBAAsB,GAAG,uBAAuB;;;;;;EAoBhI;AAED;;;;GAIG;AACH,2CAFW,MAAM,6BAIhB;AAED;;;;GAIG;AACH,sCAFW,MAAM,EAAE,WAIlB;AAMD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAED;;;GAGG;AACH,2CAHW,MAAM,QACN,MAAM,EAAE,YAUlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAwBD;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACN,MAAM,CAgClB;AA12BD,+BAAgC,OAAO,CAAC;AACxC,4BAA6B,UAAU,CAAC;AACxC,2BAA4B,QAAQ,CAAC;AACrC,uCAAwC,WAAW,CAAC;AACpD,oCAAqC,QAAQ,CAAC;AAC9C,qCAAsC,YAAY,CAAC;AACnD,mCAAoC,gBAAgB,CAAC;AACrD,2BAA4B,SAAS,CAAC;AACtC,uCAAwC,iBAAiB,CAAC;AAysB1D,wCAAyC,EAAE,CAAC;AAC5C,+CAAwE;AACxE,+CAAuE;AA4GhE,uCAJI,GAAG,WACH,OAAO,GACL,MAAM,EAAE,CAQA;sBAvzBR,OAAO,oBAAoB,EAAE,OAAO;;aAgEvC,OAAO;kBACP,MAAM;0BACN,MAAM;oBACN,MAAM;oBACN,MAAM;kBACN,MAAM;kBACN,MAAM;eACN,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG;;;;;8BAsfZ,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;;;;uBA0LhD,CAAC,MAAM,EAAE,OAAO,CAAC;0BA1wBJ,WAAW"}
|
|
@@ -52,6 +52,39 @@ function splitScaleType(type) {
|
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Gets the boundary values that the shader uses for discretizing scale buckets.
|
|
57
|
+
* Threshold scales expose the boundaries as their domain, while quantize scales
|
|
58
|
+
* derive them from the domain extent and range count.
|
|
59
|
+
*
|
|
60
|
+
* @param {any} scale
|
|
61
|
+
* @returns {number[]}
|
|
62
|
+
*/
|
|
63
|
+
export function getDiscretizingDomainForGlsl(scale) {
|
|
64
|
+
if (scale.type === "quantize") {
|
|
65
|
+
return scale.thresholds();
|
|
66
|
+
} else {
|
|
67
|
+
return scale.domain();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Gets the number of buckets needed for a discrete or discretizing range
|
|
73
|
+
* texture.
|
|
74
|
+
*
|
|
75
|
+
* @param {any} scale
|
|
76
|
+
* @returns {number}
|
|
77
|
+
*/
|
|
78
|
+
export function getDiscreteRangeCountForGlsl(scale) {
|
|
79
|
+
if (scale.type === "quantize") {
|
|
80
|
+
return scale.range().length;
|
|
81
|
+
} else if (scale.type === "threshold") {
|
|
82
|
+
return scale.domain().length + 1;
|
|
83
|
+
} else {
|
|
84
|
+
return scale.domain().length;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
55
88
|
/**
|
|
56
89
|
*
|
|
57
90
|
* @param {Channel} channel
|
|
@@ -250,7 +283,11 @@ export function generateScaleGlsl(channel, scale, channelDef) {
|
|
|
250
283
|
|
|
251
284
|
const { hp, attributeType } = getAttributeAndArrayTypes(scale, channel);
|
|
252
285
|
|
|
253
|
-
const domainLength = scale.domain
|
|
286
|
+
const domainLength = scale.domain
|
|
287
|
+
? isDiscretizing(scale.type)
|
|
288
|
+
? getDiscretizingDomainForGlsl(scale).length
|
|
289
|
+
: scale.domain().length
|
|
290
|
+
: undefined;
|
|
254
291
|
|
|
255
292
|
/** @type {string} */
|
|
256
293
|
let domainUniform;
|
|
@@ -345,8 +382,8 @@ export function generateScaleGlsl(channel, scale, channelDef) {
|
|
|
345
382
|
break;
|
|
346
383
|
|
|
347
384
|
case "threshold":
|
|
385
|
+
case "quantize":
|
|
348
386
|
// TODO: Quantile (it's a specialization of threshold scale)
|
|
349
|
-
// TODO: Quantize
|
|
350
387
|
break;
|
|
351
388
|
|
|
352
389
|
default:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const shader = "#define PI 3.141593\nuniform View{mediump vec2 uViewOffset;mediump vec2 uViewScale;mediump vec2 uViewportSize;lowp float uDevicePixelRatio;lowp float uViewOpacity;bool uPickingEnabled;};/***Maps a coordinate on the unit scale to a normalized device coordinate.*(0,0)is at the bottom left corner.*/vec4 unitToNdc(vec2 coord){return vec4((coord*uViewScale+uViewOffset)*2.0-1.0,0.0,1.0);}vec4 unitToNdc(float x,float y){return unitToNdc(vec2(x,y));}vec4 pixelsToNdc(vec2 coord){return unitToNdc(coord/uViewportSize);}vec4 pixelsToNdc(float x,float y){return pixelsToNdc(vec2(x,y));}float linearstep(float edge0,float edge1,float x){return clamp((x-edge0)/(edge1-edge0),0.0,1.0);}const highp uint HASH_EMPTY_KEY=0xffffffffu;highp uint hash32(highp uint key){highp uint v=key;v ^=v>>16u;v*=0x7feb352du;v ^=v>>15u;v*=0x846ca68bu;v ^=v>>16u;return v;}bool isEmptyHashTexture(highp usampler2D s){ivec2 texSize=textureSize(s,0);return texSize.x==1&&texSize.y==1&&texelFetch(s,ivec2(0,0),0).r==HASH_EMPTY_KEY;}bool hashContainsTexture(highp usampler2D s,highp uint value){ivec2 texSize=textureSize(s,0);highp uint width=uint(texSize.x);highp uint size=width*uint(texSize.y);highp uint mask=size-1u;highp uint index=hash32(value)&mask;for(highp uint probe=0u;probe<size;probe+=1u){ivec2 coord=ivec2(int(index % width),int(index/width));highp uint entry=texelFetch(s,coord,0).r;if(entry==value){return true;}if(entry==HASH_EMPTY_KEY){return false;}index=(index+1u)&mask;}return false;}/***Calculates a gamma for antialiasing opacity based on the color.*/float getGammaForColor(vec3 rgb){return mix(1.25,0.75,smoothstep(0.0,1.0,dot(rgb,vec3(0.299,0.587,0.114))));}/***Specialized linearstep for doing antialiasing*/float distanceToRatio(float d){return clamp(d*uDevicePixelRatio+0.5,0.0,1.0);}vec4 distanceToColor(float d,vec4 fill,vec4 stroke,vec4 background,float halfStrokeWidth){if(halfStrokeWidth>0.0){float sd=abs(d)-halfStrokeWidth;return mix(stroke,d<=0.0 ? fill : background,distanceToRatio(sd));}else{return mix(background,fill,distanceToRatio(-d));}}";
|
|
1
|
+
const shader = "#define PI 3.141593\nuniform View{mediump vec2 uViewOffset;mediump vec2 uViewScale;mediump vec2 uViewportSize;mediump vec4 uLogicalVisibleRect;lowp vec2 uCullByVisibleRange;lowp float uDevicePixelRatio;lowp float uViewOpacity;bool uPickingEnabled;};/***Maps a coordinate on the unit scale to a normalized device coordinate.*(0,0)is at the bottom left corner.*/vec4 unitToNdc(vec2 coord){return vec4((coord*uViewScale+uViewOffset)*2.0-1.0,0.0,1.0);}vec4 unitToNdc(float x,float y){return unitToNdc(vec2(x,y));}vec4 pixelsToNdc(vec2 coord){return unitToNdc(coord/uViewportSize);}vec4 pixelsToNdc(float x,float y){return pixelsToNdc(vec2(x,y));}bool isOutsideVisibleRange(vec2 pos){return(uCullByVisibleRange.x>0.5&&(pos.x<uLogicalVisibleRect.x||pos.x>uLogicalVisibleRect.z))||(uCullByVisibleRange.y>0.5&&(pos.y<uLogicalVisibleRect.y||pos.y>uLogicalVisibleRect.w));}float linearstep(float edge0,float edge1,float x){return clamp((x-edge0)/(edge1-edge0),0.0,1.0);}const highp uint HASH_EMPTY_KEY=0xffffffffu;highp uint hash32(highp uint key){highp uint v=key;v ^=v>>16u;v*=0x7feb352du;v ^=v>>15u;v*=0x846ca68bu;v ^=v>>16u;return v;}bool isEmptyHashTexture(highp usampler2D s){ivec2 texSize=textureSize(s,0);return texSize.x==1&&texSize.y==1&&texelFetch(s,ivec2(0,0),0).r==HASH_EMPTY_KEY;}bool hashContainsTexture(highp usampler2D s,highp uint value){ivec2 texSize=textureSize(s,0);highp uint width=uint(texSize.x);highp uint size=width*uint(texSize.y);highp uint mask=size-1u;highp uint index=hash32(value)&mask;for(highp uint probe=0u;probe<size;probe+=1u){ivec2 coord=ivec2(int(index % width),int(index/width));highp uint entry=texelFetch(s,coord,0).r;if(entry==value){return true;}if(entry==HASH_EMPTY_KEY){return false;}index=(index+1u)&mask;}return false;}/***Calculates a gamma for antialiasing opacity based on the color.*/float getGammaForColor(vec3 rgb){return mix(1.25,0.75,smoothstep(0.0,1.0,dot(rgb,vec3(0.299,0.587,0.114))));}/***Specialized linearstep for doing antialiasing*/float distanceToRatio(float d){return clamp(d*uDevicePixelRatio+0.5,0.0,1.0);}vec4 distanceToColor(float d,vec4 fill,vec4 stroke,vec4 background,float halfStrokeWidth){if(halfStrokeWidth>0.0){float sd=abs(d)-halfStrokeWidth;return mix(stroke,d<=0.0 ? fill : background,distanceToRatio(sd));}else{return mix(background,fill,distanceToRatio(-d));}}";
|
|
2
2
|
export default shader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertexRangeIndex.d.ts","sourceRoot":"","sources":["../../../src/gl/vertexRangeIndex.js"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,+CARW,MAAM,UACN,CAAC,MAAM,EAAE,MAAM,CAAC,aAChB,YAAY,YACZ,YAAY,qBACZ,MAAM,mBACN,MAAM,GACJ,OAAO,yBAAyB,EAAE,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"vertexRangeIndex.d.ts","sourceRoot":"","sources":["../../../src/gl/vertexRangeIndex.js"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,+CARW,MAAM,UACN,CAAC,MAAM,EAAE,MAAM,CAAC,aAChB,YAAY,YACZ,YAAY,qBACZ,MAAM,mBACN,MAAM,GACJ,OAAO,yBAAyB,EAAE,MAAM,GAAG,SAAS,CA+HhE;yCAhJU,MAAM,KACJ,MAAM"}
|
|
@@ -40,6 +40,8 @@ export function createVertexRangeIndexer(
|
|
|
40
40
|
return undefined;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
const pointIndex = readStart === readEnd;
|
|
44
|
+
|
|
43
45
|
const startIndices = new Array(size);
|
|
44
46
|
startIndices.fill(MAX_INTEGER);
|
|
45
47
|
|
|
@@ -105,14 +107,14 @@ export function createVertexRangeIndexer(
|
|
|
105
107
|
break;
|
|
106
108
|
}
|
|
107
109
|
|
|
108
|
-
if (runX < lastStart || runX2 < runX) {
|
|
110
|
+
if (runX < lastStart || (!pointIndex && runX2 < runX)) {
|
|
109
111
|
unordered = true;
|
|
110
112
|
break;
|
|
111
113
|
}
|
|
112
114
|
lastStart = runX;
|
|
113
115
|
|
|
114
116
|
const startBin = getBin(runX, false);
|
|
115
|
-
const endBin = getBin(runX2, true);
|
|
117
|
+
const endBin = pointIndex ? startBin : getBin(runX2, true);
|
|
116
118
|
|
|
117
119
|
for (let bin = startBin; bin <= endBin; bin++) {
|
|
118
120
|
if (startIndices[bin] > runStart) {
|
|
@@ -74,7 +74,7 @@ export default class WebGLHelper {
|
|
|
74
74
|
/** @type {import("twgl.js").AttachmentOptions[]} */
|
|
75
75
|
_pickingAttachmentOptions: import("twgl.js").AttachmentOptions[];
|
|
76
76
|
_pickingBufferInfo: import("twgl.js").FramebufferInfo;
|
|
77
|
-
invalidateSize():
|
|
77
|
+
invalidateSize(): boolean;
|
|
78
78
|
/**
|
|
79
79
|
* Compiles and caches a shader. The shader source is used as a cache key.
|
|
80
80
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AA+cA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAliBD;IACI;;;;;;;;OAQG;IACH,uBAPW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,mBACtB,MAAM,IAAI,EAoHpB;IArGG;;OAEG;IACH,mBAFU,gBAAgB,CAEQ;IAElC;;OAEG;IACH,oBAFU;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAEjF;IAEnC,yBAAyB;IACzB,iBADW,MAAM,IAAI,CAC8B;IAEnD,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAmBL,0BAKC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,oBAkCC;IAED,iBAGC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAI3C;IAED;;;;OAIG;IACH,kCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,UAI3C;IAED;;;OAGG;IACH;;;MAEC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA6GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BAwClE;CACJ;6BA5Y4B,uBAAuB"}
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
createInterpolatedColorTexture,
|
|
22
22
|
createSchemeTexture,
|
|
23
23
|
} from "./colorUtils.js";
|
|
24
|
+
import { getDiscreteRangeCountForGlsl } from "./glslScaleGenerator.js";
|
|
24
25
|
import {
|
|
25
26
|
getDiscreteRangeMapper,
|
|
26
27
|
isColorChannel,
|
|
@@ -161,7 +162,9 @@ export default class WebGLHelper {
|
|
|
161
162
|
|
|
162
163
|
invalidateSize() {
|
|
163
164
|
this._canvasSizeHelper.invalidate();
|
|
164
|
-
|
|
165
|
+
// The return value tells layout code whether cached render commands may
|
|
166
|
+
// have been built against a stale logical or physical canvas size.
|
|
167
|
+
return this.adjustGl();
|
|
165
168
|
}
|
|
166
169
|
|
|
167
170
|
/**
|
|
@@ -290,10 +293,8 @@ export default class WebGLHelper {
|
|
|
290
293
|
function fixCount(count, scale) {
|
|
291
294
|
if (isDiscrete(scale.type)) {
|
|
292
295
|
return scale.domain().length;
|
|
293
|
-
} else if (scale.type == "threshold") {
|
|
294
|
-
return scale
|
|
295
|
-
} else if (scale.type == "quantize") {
|
|
296
|
-
return count ?? 4;
|
|
296
|
+
} else if (scale.type == "threshold" || scale.type == "quantize") {
|
|
297
|
+
return getDiscreteRangeCountForGlsl(scale);
|
|
297
298
|
} else if (scale.type == "quantile") {
|
|
298
299
|
return count ?? 4;
|
|
299
300
|
}
|
|
@@ -317,7 +318,7 @@ export default class WebGLHelper {
|
|
|
317
318
|
texture = createDiscreteColorTexture(
|
|
318
319
|
range,
|
|
319
320
|
this.gl,
|
|
320
|
-
scale
|
|
321
|
+
getDiscreteRangeCountForGlsl(scale),
|
|
321
322
|
existingTexture
|
|
322
323
|
);
|
|
323
324
|
} else {
|
|
@@ -351,7 +352,9 @@ export default class WebGLHelper {
|
|
|
351
352
|
texture = createDiscreteColorTexture(
|
|
352
353
|
range,
|
|
353
354
|
this.gl,
|
|
354
|
-
scale.
|
|
355
|
+
isDiscretizing(scale.type)
|
|
356
|
+
? getDiscreteRangeCountForGlsl(scale)
|
|
357
|
+
: scale.domain().length,
|
|
355
358
|
existingTexture
|
|
356
359
|
);
|
|
357
360
|
}
|
|
@@ -373,7 +376,9 @@ export default class WebGLHelper {
|
|
|
373
376
|
createDiscreteTexture(
|
|
374
377
|
range.map(mapper),
|
|
375
378
|
this.gl,
|
|
376
|
-
scale.
|
|
379
|
+
isDiscretizing(scale.type)
|
|
380
|
+
? getDiscreteRangeCountForGlsl(scale)
|
|
381
|
+
: scale.domain().length,
|
|
377
382
|
existingTexture
|
|
378
383
|
)
|
|
379
384
|
);
|