@react-fabric/graph 1.0.0-beta.62 → 1.0.1

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 (220) hide show
  1. package/dist/cjs/context/context.js +16 -0
  2. package/dist/cjs/graph/index.js +62 -385
  3. package/dist/cjs/index.js +25 -21
  4. package/dist/cjs/utils/edge.js +76 -0
  5. package/dist/cjs/utils/node.js +93 -0
  6. package/dist/cjs/utils/sdfFolder.js +107 -0
  7. package/dist/cjs/viewer/Graph.js +174 -0
  8. package/dist/esm/context/context.js +15 -0
  9. package/dist/esm/graph/index.js +63 -386
  10. package/dist/esm/index.js +24 -20
  11. package/dist/esm/utils/edge.js +75 -0
  12. package/dist/esm/utils/node.js +92 -0
  13. package/dist/esm/utils/sdfFolder.js +107 -0
  14. package/dist/esm/viewer/Graph.js +174 -0
  15. package/dist/types/context/context.d.ts +35 -0
  16. package/dist/types/graph/index.d.ts +47 -24
  17. package/dist/types/index.d.ts +28 -2
  18. package/dist/types/types/index.d.ts +124 -175
  19. package/dist/types/utils/edge.d.ts +28 -0
  20. package/dist/types/utils/node.d.ts +28 -0
  21. package/dist/types/utils/sdfFolder.d.ts +75 -0
  22. package/dist/types/viewer/Graph.d.ts +31 -0
  23. package/package.json +19 -25
  24. package/src/context/context.tsx +43 -0
  25. package/src/graph/index.ts +76 -399
  26. package/src/index.ts +24 -26
  27. package/src/types/index.ts +139 -185
  28. package/src/utils/edge.ts +65 -0
  29. package/src/utils/node.ts +105 -0
  30. package/src/utils/sdfFolder.ts +141 -0
  31. package/src/viewer/Graph.tsx +159 -0
  32. package/css/styles.css +0 -56
  33. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  34. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  35. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -35
  36. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
  37. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  38. package/dist/cjs/_virtual/elk-worker.js +0 -8
  39. package/dist/cjs/components/Context.js +0 -107
  40. package/dist/cjs/components/ContextMenu.js +0 -133
  41. package/dist/cjs/components/Tools.js +0 -205
  42. package/dist/cjs/components/Viewer.js +0 -58
  43. package/dist/cjs/constants/index.js +0 -16
  44. package/dist/cjs/hooks/sigmaDragSelect.js +0 -169
  45. package/dist/cjs/hooks/sigmaHilighter.js +0 -83
  46. package/dist/cjs/hooks/sigmaMouseActions.js +0 -145
  47. package/dist/cjs/hooks/useGraphology.js +0 -41
  48. package/dist/cjs/hooks/useSigma.js +0 -112
  49. package/dist/cjs/programs/arrow-head/frag.glsl.js +0 -8
  50. package/dist/cjs/programs/arrow-head/index.js +0 -142
  51. package/dist/cjs/programs/arrow-head/vert.glsl.js +0 -8
  52. package/dist/cjs/programs/edge-curve/drawLabel.js +0 -136
  53. package/dist/cjs/programs/edge-curve/frag.glsl.js +0 -8
  54. package/dist/cjs/programs/edge-curve/index.js +0 -157
  55. package/dist/cjs/programs/edge-curve/vert.glsl.js +0 -8
  56. package/dist/cjs/programs/edge-line/drawLabel.js +0 -70
  57. package/dist/cjs/programs/edge-line/frag.glsl.js +0 -8
  58. package/dist/cjs/programs/edge-line/index.js +0 -166
  59. package/dist/cjs/programs/edge-line/vert.glsl.js +0 -8
  60. package/dist/cjs/programs/node-badge/factory.js +0 -249
  61. package/dist/cjs/programs/node-badge/frag.glsl.js +0 -8
  62. package/dist/cjs/programs/node-badge/index.js +0 -33
  63. package/dist/cjs/programs/node-badge/texture.js +0 -455
  64. package/dist/cjs/programs/node-badge/vert.glsl.js +0 -19
  65. package/dist/cjs/programs/node-circle/base/drawHover.js +0 -71
  66. package/dist/cjs/programs/node-circle/base/drawLabel.js +0 -113
  67. package/dist/cjs/programs/node-circle/base/frag.glsl.js +0 -8
  68. package/dist/cjs/programs/node-circle/base/index.js +0 -136
  69. package/dist/cjs/programs/node-circle/base/vert.glsl.js +0 -8
  70. package/dist/cjs/programs/node-circle/index.js +0 -15
  71. package/dist/cjs/programs/node-image/factory.js +0 -223
  72. package/dist/cjs/programs/node-image/frag.glsl.js +0 -8
  73. package/dist/cjs/programs/node-image/index.js +0 -14
  74. package/dist/cjs/programs/node-image/texture.js +0 -472
  75. package/dist/cjs/programs/node-image/vert.glsl.js +0 -8
  76. package/dist/cjs/programs/node-rect/base/drawHover.js +0 -68
  77. package/dist/cjs/programs/node-rect/base/drawLabel.js +0 -107
  78. package/dist/cjs/programs/node-rect/base/frag.glsl.js +0 -8
  79. package/dist/cjs/programs/node-rect/base/index.js +0 -135
  80. package/dist/cjs/programs/node-rect/base/vert.glsl.js +0 -8
  81. package/dist/cjs/programs/node-rect/index.js +0 -15
  82. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  83. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  84. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -34
  85. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -13
  86. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  87. package/dist/esm/_virtual/elk-worker.js +0 -8
  88. package/dist/esm/components/Context.js +0 -106
  89. package/dist/esm/components/ContextMenu.js +0 -133
  90. package/dist/esm/components/Tools.js +0 -205
  91. package/dist/esm/components/Viewer.js +0 -58
  92. package/dist/esm/constants/index.js +0 -16
  93. package/dist/esm/hooks/sigmaDragSelect.js +0 -169
  94. package/dist/esm/hooks/sigmaHilighter.js +0 -83
  95. package/dist/esm/hooks/sigmaMouseActions.js +0 -145
  96. package/dist/esm/hooks/useGraphology.js +0 -41
  97. package/dist/esm/hooks/useSigma.js +0 -112
  98. package/dist/esm/programs/arrow-head/frag.glsl.js +0 -8
  99. package/dist/esm/programs/arrow-head/index.js +0 -141
  100. package/dist/esm/programs/arrow-head/vert.glsl.js +0 -8
  101. package/dist/esm/programs/edge-curve/drawLabel.js +0 -136
  102. package/dist/esm/programs/edge-curve/frag.glsl.js +0 -8
  103. package/dist/esm/programs/edge-curve/index.js +0 -156
  104. package/dist/esm/programs/edge-curve/vert.glsl.js +0 -8
  105. package/dist/esm/programs/edge-line/drawLabel.js +0 -70
  106. package/dist/esm/programs/edge-line/frag.glsl.js +0 -8
  107. package/dist/esm/programs/edge-line/index.js +0 -166
  108. package/dist/esm/programs/edge-line/vert.glsl.js +0 -8
  109. package/dist/esm/programs/node-badge/factory.js +0 -249
  110. package/dist/esm/programs/node-badge/frag.glsl.js +0 -8
  111. package/dist/esm/programs/node-badge/index.js +0 -32
  112. package/dist/esm/programs/node-badge/texture.js +0 -445
  113. package/dist/esm/programs/node-badge/vert.glsl.js +0 -19
  114. package/dist/esm/programs/node-circle/base/drawHover.js +0 -71
  115. package/dist/esm/programs/node-circle/base/drawLabel.js +0 -113
  116. package/dist/esm/programs/node-circle/base/frag.glsl.js +0 -8
  117. package/dist/esm/programs/node-circle/base/index.js +0 -136
  118. package/dist/esm/programs/node-circle/base/vert.glsl.js +0 -8
  119. package/dist/esm/programs/node-circle/index.js +0 -15
  120. package/dist/esm/programs/node-image/factory.js +0 -223
  121. package/dist/esm/programs/node-image/frag.glsl.js +0 -8
  122. package/dist/esm/programs/node-image/index.js +0 -13
  123. package/dist/esm/programs/node-image/texture.js +0 -462
  124. package/dist/esm/programs/node-image/vert.glsl.js +0 -8
  125. package/dist/esm/programs/node-rect/base/drawHover.js +0 -68
  126. package/dist/esm/programs/node-rect/base/drawLabel.js +0 -107
  127. package/dist/esm/programs/node-rect/base/frag.glsl.js +0 -8
  128. package/dist/esm/programs/node-rect/base/index.js +0 -135
  129. package/dist/esm/programs/node-rect/base/vert.glsl.js +0 -8
  130. package/dist/esm/programs/node-rect/index.js +0 -15
  131. package/dist/types/components/Context.d.ts +0 -18
  132. package/dist/types/components/ContextMenu.d.ts +0 -1
  133. package/dist/types/components/Tools.d.ts +0 -1
  134. package/dist/types/components/Viewer.d.ts +0 -2
  135. package/dist/types/constants/index.d.ts +0 -12
  136. package/dist/types/graph/layout.worker.d.ts +0 -1
  137. package/dist/types/hooks/sigmaDragSelect.d.ts +0 -8
  138. package/dist/types/hooks/sigmaHilighter.d.ts +0 -3
  139. package/dist/types/hooks/sigmaMouseActions.d.ts +0 -3
  140. package/dist/types/hooks/useGraphology.d.ts +0 -6
  141. package/dist/types/hooks/useSigma.d.ts +0 -8
  142. package/dist/types/i18n/index.d.ts +0 -0
  143. package/dist/types/programs/arrow-head/frag.glsl.d.ts +0 -2
  144. package/dist/types/programs/arrow-head/index.d.ts +0 -9
  145. package/dist/types/programs/arrow-head/vert.glsl.d.ts +0 -2
  146. package/dist/types/programs/edge-curve/drawLabel.d.ts +0 -6
  147. package/dist/types/programs/edge-curve/frag.glsl.d.ts +0 -2
  148. package/dist/types/programs/edge-curve/index.d.ts +0 -43
  149. package/dist/types/programs/edge-curve/vert.glsl.d.ts +0 -2
  150. package/dist/types/programs/edge-line/drawLabel.d.ts +0 -5
  151. package/dist/types/programs/edge-line/frag.glsl.d.ts +0 -2
  152. package/dist/types/programs/edge-line/index.d.ts +0 -11
  153. package/dist/types/programs/edge-line/vert.glsl.d.ts +0 -2
  154. package/dist/types/programs/node-badge/factory.d.ts +0 -27
  155. package/dist/types/programs/node-badge/frag.glsl.d.ts +0 -2
  156. package/dist/types/programs/node-badge/index.d.ts +0 -5
  157. package/dist/types/programs/node-badge/texture.d.ts +0 -102
  158. package/dist/types/programs/node-badge/vert.glsl.d.ts +0 -2
  159. package/dist/types/programs/node-circle/base/drawHover.d.ts +0 -8
  160. package/dist/types/programs/node-circle/base/drawLabel.d.ts +0 -8
  161. package/dist/types/programs/node-circle/base/frag.glsl.d.ts +0 -2
  162. package/dist/types/programs/node-circle/base/index.d.ts +0 -37
  163. package/dist/types/programs/node-circle/base/vert.glsl.d.ts +0 -2
  164. package/dist/types/programs/node-circle/index.d.ts +0 -11
  165. package/dist/types/programs/node-image/factory.d.ts +0 -25
  166. package/dist/types/programs/node-image/frag.glsl.d.ts +0 -2
  167. package/dist/types/programs/node-image/index.d.ts +0 -5
  168. package/dist/types/programs/node-image/texture.d.ts +0 -102
  169. package/dist/types/programs/node-image/vert.glsl.d.ts +0 -2
  170. package/dist/types/programs/node-rect/base/drawHover.d.ts +0 -8
  171. package/dist/types/programs/node-rect/base/drawLabel.d.ts +0 -8
  172. package/dist/types/programs/node-rect/base/frag.glsl.d.ts +0 -2
  173. package/dist/types/programs/node-rect/base/index.d.ts +0 -34
  174. package/dist/types/programs/node-rect/base/vert.glsl.d.ts +0 -2
  175. package/dist/types/programs/node-rect/index.d.ts +0 -11
  176. package/src/components/Context.tsx +0 -143
  177. package/src/components/ContextMenu.tsx +0 -174
  178. package/src/components/Tools.tsx +0 -106
  179. package/src/components/Viewer.tsx +0 -76
  180. package/src/constants/index.ts +0 -22
  181. package/src/graph/layout.worker.ts +0 -42
  182. package/src/hooks/sigmaDragSelect.ts +0 -219
  183. package/src/hooks/sigmaHilighter.ts +0 -107
  184. package/src/hooks/sigmaMouseActions.ts +0 -153
  185. package/src/hooks/useGraphology.ts +0 -31
  186. package/src/hooks/useSigma.ts +0 -118
  187. package/src/i18n/index.ts +0 -0
  188. package/src/programs/arrow-head/frag.glsl.ts +0 -18
  189. package/src/programs/arrow-head/index.ts +0 -157
  190. package/src/programs/arrow-head/vert.glsl.ts +0 -75
  191. package/src/programs/edge-curve/drawLabel.ts +0 -166
  192. package/src/programs/edge-curve/frag.glsl.ts +0 -86
  193. package/src/programs/edge-curve/index.ts +0 -158
  194. package/src/programs/edge-curve/vert.glsl.ts +0 -110
  195. package/src/programs/edge-line/drawLabel.ts +0 -113
  196. package/src/programs/edge-line/frag.glsl.ts +0 -34
  197. package/src/programs/edge-line/index.ts +0 -165
  198. package/src/programs/edge-line/vert.glsl.ts +0 -104
  199. package/src/programs/node-badge/factory.ts +0 -327
  200. package/src/programs/node-badge/frag.glsl.ts +0 -79
  201. package/src/programs/node-badge/index.ts +0 -35
  202. package/src/programs/node-badge/texture.ts +0 -425
  203. package/src/programs/node-badge/vert.glsl.ts +0 -99
  204. package/src/programs/node-circle/base/drawHover.ts +0 -80
  205. package/src/programs/node-circle/base/drawLabel.ts +0 -145
  206. package/src/programs/node-circle/base/frag.glsl.ts +0 -72
  207. package/src/programs/node-circle/base/index.ts +0 -102
  208. package/src/programs/node-circle/base/vert.glsl.ts +0 -83
  209. package/src/programs/node-circle/index.ts +0 -19
  210. package/src/programs/node-image/factory.ts +0 -301
  211. package/src/programs/node-image/frag.glsl.ts +0 -97
  212. package/src/programs/node-image/index.ts +0 -7
  213. package/src/programs/node-image/texture.ts +0 -435
  214. package/src/programs/node-image/vert.glsl.ts +0 -60
  215. package/src/programs/node-rect/base/drawHover.ts +0 -77
  216. package/src/programs/node-rect/base/drawLabel.ts +0 -149
  217. package/src/programs/node-rect/base/frag.glsl.ts +0 -67
  218. package/src/programs/node-rect/base/index.ts +0 -109
  219. package/src/programs/node-rect/base/vert.glsl.ts +0 -87
  220. package/src/programs/node-rect/index.ts +0 -19
@@ -1,301 +0,0 @@
1
- /* eslint-disable @typescript-eslint/naming-convention */
2
-
3
- import { isSvgPath } from "@react-fabric/utilities";
4
- import { type Attributes } from "graphology-types";
5
- import type Sigma from "sigma";
6
- import {
7
- type NodeHoverDrawingFunction,
8
- type NodeLabelDrawingFunction,
9
- NodeProgram,
10
- type NodeProgramType,
11
- type ProgramInfo,
12
- } from "sigma/rendering";
13
- import { type NodeDisplayData, type RenderParams } from "sigma/types";
14
- import { floatColor } from "sigma/utils";
15
- import { type EdgeAttributes, type NodeAttributes } from "../../types";
16
- import FRAGMENT_SHADER_SOURCE from "./frag.glsl";
17
- import {
18
- type Atlas,
19
- DEFAULT_TEXTURE_MANAGER_OPTIONS,
20
- TextureManager,
21
- type TextureManagerOptions,
22
- } from "./texture";
23
- import VERTEX_SHADER_SOURCE from "./vert.glsl";
24
-
25
- /* istanbul ignore file */
26
-
27
- const { UNSIGNED_BYTE, FLOAT } = WebGLRenderingContext;
28
-
29
- interface CreateNodeImageProgramOptions<
30
- N extends Attributes,
31
- E extends Attributes,
32
- G extends Attributes,
33
- > extends TextureManagerOptions {
34
- // - If "background", color will be used to color full node behind the image.
35
- // - If "color", color will be used to color image pixels (for pictograms)
36
- drawingMode: "background" | "color";
37
- // If true, the images are always cropped to the circle
38
- keepWithinCircle: boolean;
39
- // Allows overriding drawLabel and drawHover returned class static methods.
40
- drawLabel: NodeLabelDrawingFunction<N, E, G> | undefined;
41
- drawHover: NodeHoverDrawingFunction<N, E, G> | undefined;
42
- // The padding should be expressed as a [0, 1] percentage.
43
- // A padding of 0.05 will always be 5% of the diameter of a node.
44
- padding: number;
45
- // Allows using a different color attribute name.
46
- colorAttribute: string;
47
- }
48
-
49
- const DEFAULT_CREATE_NODE_IMAGE_OPTIONS: CreateNodeImageProgramOptions<
50
- Attributes,
51
- Attributes,
52
- Attributes
53
- > = {
54
- ...DEFAULT_TEXTURE_MANAGER_OPTIONS,
55
- drawingMode: "background",
56
- keepWithinCircle: true,
57
- drawLabel: undefined,
58
- drawHover: undefined,
59
- padding: 0,
60
- colorAttribute: "color",
61
- };
62
-
63
- const UNIFORMS = [
64
- "u_sizeRatio",
65
- "u_correctionRatio",
66
- "u_cameraAngle",
67
- "u_percentagePadding",
68
- "u_matrix",
69
- "u_colorizeImages",
70
- "u_keepWithinCircle",
71
- "u_atlas",
72
- ] as const;
73
-
74
- /**
75
- * To share the texture between the program instances of the graph and the
76
- * hovered nodes (to prevent some flickering, mostly), this program must be
77
- * "built" for each sigma instance:
78
- */
79
- export default function getNodeImageProgram(
80
- options?: Partial<
81
- CreateNodeImageProgramOptions<
82
- NodeAttributes & { bg: string; opacity: number },
83
- EdgeAttributes,
84
- Attributes
85
- >
86
- >,
87
- ): NodeProgramType<
88
- NodeAttributes & { bg: string; opacity: number },
89
- EdgeAttributes
90
- > {
91
- const {
92
- drawHover,
93
- drawLabel,
94
- drawingMode,
95
- keepWithinCircle,
96
- padding,
97
- colorAttribute,
98
- ...textureManagerOptions
99
- }: CreateNodeImageProgramOptions<
100
- NodeAttributes & { bg: string; opacity: number },
101
- EdgeAttributes,
102
- Attributes
103
- > = {
104
- ...DEFAULT_CREATE_NODE_IMAGE_OPTIONS,
105
- ...(options ?? {}),
106
- drawLabel: undefined,
107
- drawHover: undefined,
108
- };
109
-
110
- /**
111
- * This texture manager is shared between all instances of this exact class,
112
- * returned by this call to getNodeProgramImage. This means that remounting
113
- * the sigma instance will not reload the images and regenerate the texture.
114
- */
115
- const textureManager = new TextureManager(textureManagerOptions);
116
-
117
- return class NodeImageProgram extends NodeProgram<
118
- (typeof UNIFORMS)[number],
119
- NodeAttributes & { bg: string; opacity: number },
120
- EdgeAttributes,
121
- Attributes
122
- > {
123
- static readonly ANGLE_1 = (1 * Math.PI) / 4;
124
- static readonly ANGLE_2 = (3 * Math.PI) / 4;
125
- static readonly ANGLE_3 = (5 * Math.PI) / 4;
126
- static readonly ANGLE_4 = (7 * Math.PI) / 4;
127
-
128
- static drawLabel = drawLabel;
129
- static drawHover = drawHover;
130
-
131
- getDefinition() {
132
- return {
133
- VERTICES: 4,
134
- VERTEX_SHADER_SOURCE,
135
- FRAGMENT_SHADER_SOURCE,
136
- METHOD: WebGLRenderingContext.TRIANGLE_FAN,
137
- UNIFORMS,
138
- ATTRIBUTES: [
139
- { name: "a_position", size: 2, type: FLOAT },
140
- { name: "a_size", size: 1, type: FLOAT },
141
- { name: "a_opacity", size: 1, type: FLOAT },
142
- { name: "a_colorMode", size: 1, type: FLOAT },
143
- { name: "a_fill", size: 4, type: UNSIGNED_BYTE, normalized: true },
144
- { name: "a_color", size: 4, type: UNSIGNED_BYTE, normalized: true },
145
- { name: "a_id", size: 4, type: UNSIGNED_BYTE, normalized: true },
146
- { name: "a_texture", size: 4, type: FLOAT },
147
- ],
148
- CONSTANT_ATTRIBUTES: [{ name: "a_angle", size: 1, type: FLOAT }],
149
- CONSTANT_DATA: [
150
- [NodeImageProgram.ANGLE_1],
151
- [NodeImageProgram.ANGLE_2],
152
- [NodeImageProgram.ANGLE_3],
153
- [NodeImageProgram.ANGLE_4],
154
- ],
155
- };
156
- }
157
-
158
- atlas: Atlas;
159
- texture: WebGLTexture;
160
- textureImage: ImageData;
161
- latestRenderParams?: RenderParams;
162
- textureManagerCallback: () => void;
163
-
164
- constructor(
165
- gl: WebGLRenderingContext,
166
- pickingBuffer: WebGLFramebuffer | null,
167
- renderer: Sigma<
168
- NodeAttributes & { bg: string; opacity: number },
169
- EdgeAttributes,
170
- Attributes
171
- >,
172
- ) {
173
- super(gl, pickingBuffer, renderer);
174
-
175
- this.textureManagerCallback = () => {
176
- if (!this) return;
177
-
178
- if (this.bindTexture) {
179
- this.atlas = textureManager.getAtlas();
180
- this.textureImage = textureManager.getTexture();
181
- this.bindTexture();
182
- if (this.latestRenderParams) this.render(this.latestRenderParams);
183
- }
184
-
185
- if (renderer?.refresh) renderer.refresh();
186
- };
187
- textureManager.on(
188
- TextureManager.NEW_TEXTURE_EVENT,
189
- this.textureManagerCallback,
190
- );
191
-
192
- this.atlas = textureManager.getAtlas();
193
- this.textureImage = textureManager.getTexture();
194
- this.texture = gl.createTexture() as AnyObject;
195
- this.bindTexture();
196
- }
197
-
198
- kill() {
199
- textureManager.off(
200
- TextureManager.NEW_TEXTURE_EVENT,
201
- this.textureManagerCallback,
202
- );
203
- }
204
-
205
- bindTexture() {
206
- const gl = this.normalProgram.gl;
207
-
208
- gl.bindTexture(gl.TEXTURE_2D, this.texture);
209
- gl.texImage2D(
210
- gl.TEXTURE_2D,
211
- 0,
212
- gl.RGBA,
213
- gl.RGBA,
214
- gl.UNSIGNED_BYTE,
215
- this.textureImage,
216
- );
217
- gl.generateMipmap(gl.TEXTURE_2D);
218
- }
219
-
220
- protected renderProgram(params: RenderParams, programInfo: ProgramInfo) {
221
- if (!programInfo.isPicking) {
222
- // Rebind texture (since it's been just unbound by picking):
223
- const gl = programInfo.gl;
224
- gl.bindTexture(gl.TEXTURE_2D, this.texture);
225
- }
226
- super.renderProgram(params, programInfo);
227
- }
228
-
229
- processVisibleItem(
230
- nodeIndex: number,
231
- startIndex: number,
232
- data: NodeDisplayData &
233
- NodeAttributes & { opacity: number; iconColor: string },
234
- ): void {
235
- const array = this.array;
236
- const fill = floatColor(
237
- data.color ?? this.renderer.getSetting("defaultNodeColor"),
238
- );
239
- const color = floatColor(
240
- data.iconColor ?? this.renderer.getSetting("labelColor").color,
241
- );
242
-
243
- const imageSource = data.image ?? data.path;
244
- const imagePosition = imageSource ? this.atlas[imageSource] : undefined;
245
-
246
- if (typeof imageSource === "string" && !imagePosition)
247
- void textureManager.registerImage(imageSource);
248
-
249
- array[startIndex++] = data.x;
250
- array[startIndex++] = data.y;
251
- array[startIndex++] =
252
- data.size - (data.border ?? 0) - (data.pie?.length ? 4 : 2);
253
- array[startIndex++] = data.opacity ?? 1;
254
- array[startIndex++] = isSvgPath(imageSource) ? 1 : 0;
255
- array[startIndex++] = fill;
256
- array[startIndex++] = color;
257
- array[startIndex++] = nodeIndex;
258
-
259
- // Reference texture:
260
- if (imagePosition) {
261
- const { width, height } = this.textureImage;
262
- array[startIndex++] = imagePosition.x / width;
263
- array[startIndex++] = imagePosition.y / height;
264
- array[startIndex++] = imagePosition.size / width;
265
- array[startIndex++] = imagePosition.size / height;
266
- } else {
267
- array[startIndex++] = 0;
268
- array[startIndex++] = 0;
269
- array[startIndex++] = 0;
270
- array[startIndex++] = 0;
271
- }
272
- }
273
-
274
- setUniforms(
275
- params: RenderParams,
276
- { gl, uniformLocations }: ProgramInfo,
277
- ): void {
278
- const {
279
- u_sizeRatio,
280
- u_correctionRatio,
281
- u_matrix,
282
- u_atlas,
283
- u_keepWithinCircle,
284
- u_cameraAngle,
285
- u_percentagePadding,
286
- } = uniformLocations;
287
- this.latestRenderParams = params;
288
-
289
- gl.uniform1f(u_correctionRatio, params.correctionRatio);
290
- gl.uniform1f(
291
- u_sizeRatio,
292
- keepWithinCircle ? params.sizeRatio : params.sizeRatio / Math.SQRT2,
293
- );
294
- gl.uniform1f(u_cameraAngle, params.cameraAngle);
295
- gl.uniform1f(u_percentagePadding, padding);
296
- gl.uniformMatrix3fv(u_matrix, false, params.matrix);
297
- gl.uniform1i(u_atlas, 0);
298
- gl.uniform1i(u_keepWithinCircle, keepWithinCircle ? 1 : 0);
299
- }
300
- };
301
- }
@@ -1,97 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- // language=GLSL
4
- const SHADER_SOURCE = /* glsl */ `
5
- precision highp float;
6
-
7
- varying vec4 v_fill;
8
- varying vec4 v_color;
9
- varying vec4 v_texture;
10
- varying vec2 v_diffVector;
11
- varying float v_opacity;
12
- varying float v_radius;
13
- varying float v_colorMode;
14
-
15
- uniform sampler2D u_atlas;
16
- uniform float u_correctionRatio;
17
- uniform float u_cameraAngle;
18
- uniform float u_percentagePadding;
19
- uniform bool u_keepWithinCircle;
20
- uniform bool u_shape;
21
-
22
- const vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);
23
-
24
- const float radius = 0.5;
25
-
26
- void main(void) {
27
- float border = 2.0 * u_correctionRatio;
28
- float dist = length(v_diffVector);
29
- vec4 color = v_fill;
30
-
31
- float c = cos(-u_cameraAngle);
32
- float s = sin(-u_cameraAngle);
33
- vec2 diffVector = mat2(c, s, -s, c) * (v_diffVector);
34
-
35
- // No antialiasing for picking mode:
36
- #ifdef PICKING_MODE
37
- border = 0.0;
38
- gl_FragColor = v_color;
39
-
40
- #else
41
- // First case: No image to display
42
- if (v_texture.w <= 0.0) {
43
- if (v_colorMode==0.0) {
44
- color = v_fill;
45
- }
46
- }
47
-
48
- // Second case: Image loaded into the texture
49
- else {
50
- float paddingRatio = 1.0 + 2.0 * u_percentagePadding;
51
- float coef = u_keepWithinCircle ? 1.0 : ${Math.SQRT2};
52
- vec2 coordinateInTexture = diffVector * vec2(paddingRatio, -paddingRatio) / v_radius / 2.0 * coef + vec2(0.5, 0.5);
53
- vec4 texel = texture2D(u_atlas, (v_texture.xy + coordinateInTexture * v_texture.zw), -1.0);
54
-
55
- // Colorize all visible image pixels:
56
- if (v_colorMode==1.0) {
57
- color = mix(v_fill, v_color, texel.a);
58
- }
59
-
60
- // Colorize background pixels, keep image pixel colors:
61
- else {
62
- color = vec4(mix(v_color, texel, texel.a).rgb, max(texel.a, v_color.a));
63
- }
64
-
65
- // Erase pixels "in the padding":
66
- if (abs(diffVector.x) > v_radius / paddingRatio || abs(diffVector.y) > v_radius / paddingRatio) {
67
- color = v_colorMode == 1.0 ? gl_FragColor : v_fill;
68
- }
69
- }
70
-
71
- // Crop in a circle when u_keepWithinCircle is truthy:
72
- if (u_keepWithinCircle) {
73
- if (dist - v_radius + border > border)
74
- gl_FragColor = transparent;
75
- else if (dist - v_radius + border > 0.0) {
76
- gl_FragColor = mix(v_fill, transparent, (dist - v_radius + border) / border);
77
- }
78
- else {
79
- gl_FragColor = mix(v_fill, color, v_opacity);
80
- }
81
- }
82
-
83
- // Crop in a square else:
84
- else {
85
- float squareHalfSize = v_radius * ${Math.SQRT1_2 * Math.cos(Math.PI / 12)};
86
- if (abs(diffVector.x) > squareHalfSize || abs(diffVector.y) > squareHalfSize) {
87
- gl_FragColor = transparent;
88
- } else {
89
- gl_FragColor = mix(v_fill, color, v_opacity);
90
- }
91
- }
92
- #endif
93
-
94
- }
95
- `;
96
-
97
- export default SHADER_SOURCE;
@@ -1,7 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- import createNodeImageProgram from "./factory";
4
-
5
- export { default as createNodeImageProgram } from "./factory";
6
- export const NodeImageProgram = (isCircle: boolean) =>
7
- createNodeImageProgram({ keepWithinCircle: isCircle });