@cornerstonejs/core 4.18.1 → 4.18.2

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.
@@ -9,7 +9,7 @@ import VolumeViewport from './VolumeViewport';
9
9
  import StackViewport from './StackViewport';
10
10
  import VolumeViewport3D from './VolumeViewport3D';
11
11
  import viewportTypeUsesCustomRenderingPipeline from './helpers/viewportTypeUsesCustomRenderingPipeline';
12
- import getOrCreateCanvas from './helpers/getOrCreateCanvas';
12
+ import getOrCreateCanvas, { updateCanvasSizeAndAspectRatio, } from './helpers/getOrCreateCanvas';
13
13
  class ContextPoolRenderingEngine extends BaseRenderingEngine {
14
14
  constructor(id) {
15
15
  super(id);
@@ -47,6 +47,7 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
47
47
  const viewportsDrivenByVtkJs = viewports.filter((vp) => viewportTypeUsesCustomRenderingPipeline(vp.type) === false);
48
48
  const canvasesDrivenByVtkJs = viewportsDrivenByVtkJs.map((vp) => vp.canvas);
49
49
  const canvas = getOrCreateCanvas(viewportInputEntry.element);
50
+ updateCanvasSizeAndAspectRatio(canvas);
50
51
  canvasesDrivenByVtkJs.push(canvas);
51
52
  const internalViewportEntry = { ...viewportInputEntry, canvas };
52
53
  this.addVtkjsDrivenViewport(internalViewportEntry);
@@ -113,12 +114,7 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
113
114
  setVtkjsDrivenViewports(viewportInputEntries) {
114
115
  if (viewportInputEntries.length) {
115
116
  const vtkDrivenCanvases = viewportInputEntries.map((vp) => getOrCreateCanvas(vp.element));
116
- vtkDrivenCanvases.forEach((canvas) => {
117
- const devicePixelRatio = window.devicePixelRatio || 1;
118
- const rect = canvas.getBoundingClientRect();
119
- canvas.width = rect.width * devicePixelRatio;
120
- canvas.height = rect.height * devicePixelRatio;
121
- });
117
+ vtkDrivenCanvases.forEach((canvas) => updateCanvasSizeAndAspectRatio(canvas));
122
118
  for (let i = 0; i < viewportInputEntries.length; i++) {
123
119
  const vtkDrivenViewportInputEntry = viewportInputEntries[i];
124
120
  const canvas = vtkDrivenCanvases[i];
@@ -290,12 +286,7 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
290
286
  const { element, canvas, id: viewportId, renderingEngineId, suppressEvents, } = viewport;
291
287
  const dWidth = viewport.sWidth;
292
288
  const dHeight = viewport.sHeight;
293
- if (canvas.width !== dWidth ||
294
- (canvas.height !== dHeight && dWidth >= 1 && dHeight >= 1)) {
295
- canvas.width = dWidth;
296
- canvas.height = dHeight;
297
- canvas.style.aspectRatio = `${dWidth} / ${dHeight}`;
298
- }
289
+ updateCanvasSizeAndAspectRatio(canvas, { width: dWidth, height: dHeight });
299
290
  const onScreenContext = canvas.getContext('2d');
300
291
  const contextIndex = this.contextPool.getContextIndexForViewport(viewportId);
301
292
  const maxSize = this.contextPool.getMaxSizeForContext(contextIndex);
@@ -2,5 +2,10 @@ export declare const EPSILON = 0.0001;
2
2
  export declare function createCanvas(element: Element | HTMLDivElement, width?: number, height?: number): HTMLCanvasElement;
3
3
  export declare function createViewportElement(element: HTMLDivElement): HTMLDivElement;
4
4
  export declare function setCanvasCreator(canvasCreatorArg: any): void;
5
+ export type ViewportCanvasExtent = HTMLCanvasElement | {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ export declare function updateCanvasSizeAndAspectRatio(canvas: HTMLCanvasElement, extentOrOffscreen?: ViewportCanvasExtent): boolean | undefined;
5
10
  export declare function getOrCreateCanvas(element: HTMLDivElement): HTMLCanvasElement;
6
11
  export default getOrCreateCanvas;
@@ -30,6 +30,32 @@ export function createViewportElement(element) {
30
30
  export function setCanvasCreator(canvasCreatorArg) {
31
31
  canvasCreator = canvasCreatorArg;
32
32
  }
33
+ export function updateCanvasSizeAndAspectRatio(canvas, extentOrOffscreen) {
34
+ if (extentOrOffscreen === undefined) {
35
+ const devicePixelRatio = window.devicePixelRatio || 1;
36
+ const rect = canvas.getBoundingClientRect();
37
+ const w = Math.round(rect.width * devicePixelRatio);
38
+ const h = Math.round(rect.height * devicePixelRatio);
39
+ if (w > 0 && h > 0) {
40
+ canvas.width = w;
41
+ canvas.height = h;
42
+ canvas.style.aspectRatio = `${w} / ${h}`;
43
+ }
44
+ return undefined;
45
+ }
46
+ const { width: targetW, height: targetH } = extentOrOffscreen;
47
+ if (targetW < 1 || targetH < 1) {
48
+ return false;
49
+ }
50
+ const needsUpdate = canvas.width !== targetW || canvas.height !== targetH;
51
+ if (needsUpdate) {
52
+ canvas.width = targetW;
53
+ canvas.height = targetH;
54
+ canvas.style.aspectRatio = `${targetW} / ${targetH}`;
55
+ return true;
56
+ }
57
+ return false;
58
+ }
33
59
  export function getOrCreateCanvas(element) {
34
60
  const canvasSelector = `canvas.${CANVAS_CSS_CLASS}`;
35
61
  const viewportElement = `div.${VIEWPORT_ELEMENT}`;
@@ -1 +1 @@
1
- export declare const version = "4.18.1";
1
+ export declare const version = "4.18.2";
@@ -1 +1 @@
1
- export const version = '4.18.1';
1
+ export const version = '4.18.2';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/core",
3
- "version": "4.18.1",
3
+ "version": "4.18.2",
4
4
  "description": "Cornerstone3D Core",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/esm/index.d.ts",
@@ -97,5 +97,5 @@
97
97
  "type": "individual",
98
98
  "url": "https://ohif.org/donate"
99
99
  },
100
- "gitHead": "1fc5684032269b1b1e3e3733cd891d48c27303f7"
100
+ "gitHead": "a978600e12def8b794ce0c1045e61bd4fc646851"
101
101
  }