@opendaw/studio-core 0.0.113 → 0.0.114

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.
@@ -0,0 +1,17 @@
1
+ import { Nullable } from "@opendaw/lib-std";
2
+ export interface Capturing<T> {
3
+ capture(localX: number, localY: number): Nullable<T>;
4
+ }
5
+ export declare class ElementCapturing<T> {
6
+ #private;
7
+ constructor(element: Element, capturing: Capturing<T>);
8
+ get element(): Element;
9
+ get capturing(): Capturing<T>;
10
+ captureEvent(event: {
11
+ clientX: number;
12
+ clientY: number;
13
+ }): Nullable<T>;
14
+ capturePoint(clientX: number, clientY: number): Nullable<T>;
15
+ captureLocalPoint(x: number, y: number): Nullable<T>;
16
+ }
17
+ //# sourceMappingURL=capturing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capturing.d.ts","sourceRoot":"","sources":["../../../src/ui/canvas/capturing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC;IAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;CAAC;AAEpF,qBAAa,gBAAgB,CAAC,CAAC;;gBAIf,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAKrD,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAyB;IAEtD,YAAY,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IAItE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAK3D,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;CACvD"}
@@ -0,0 +1,18 @@
1
+ export class ElementCapturing {
2
+ #element;
3
+ #capturing;
4
+ constructor(element, capturing) {
5
+ this.#element = element;
6
+ this.#capturing = capturing;
7
+ }
8
+ get element() { return this.#element; }
9
+ get capturing() { return this.#capturing; }
10
+ captureEvent(event) {
11
+ return this.capturePoint(event.clientX, event.clientY);
12
+ }
13
+ capturePoint(clientX, clientY) {
14
+ const { left, top } = this.#element.getBoundingClientRect();
15
+ return this.captureLocalPoint(clientX - left, clientY - top);
16
+ }
17
+ captureLocalPoint(x, y) { return this.#capturing.capture(x, y); }
18
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./capturing";
2
+ export * from "./painter";
3
+ export * from "./scale";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/canvas/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from "./capturing";
2
+ export * from "./painter";
3
+ export * from "./scale";
@@ -0,0 +1,32 @@
1
+ import { Procedure, Terminable } from "@opendaw/lib-std";
2
+ import { Scale } from "./scale";
3
+ export declare class CanvasPainter implements Terminable {
4
+ #private;
5
+ constructor(canvas: HTMLCanvasElement, render: Procedure<CanvasPainter>);
6
+ readonly requestUpdate: () => void;
7
+ get isResized(): boolean;
8
+ get devicePixelRatio(): number;
9
+ get width(): number;
10
+ get height(): number;
11
+ get actualWidth(): number;
12
+ get actualHeight(): number;
13
+ get context(): CanvasRenderingContext2D;
14
+ terminate(): void;
15
+ }
16
+ export declare class CanvasUnitPainter implements Terminable {
17
+ #private;
18
+ constructor(canvas: HTMLCanvasElement, xAxis: Scale, yAxis: Scale, render: Procedure<CanvasUnitPainter>);
19
+ readonly requestUpdate: () => void;
20
+ xToUnit(x: number): number;
21
+ unitToX(value: number): number;
22
+ yToUnit(y: number): number;
23
+ unitToY(value: number): number;
24
+ get context(): CanvasRenderingContext2D;
25
+ get isResized(): boolean;
26
+ get width(): number;
27
+ get height(): number;
28
+ get actualWidth(): number;
29
+ get actualHeight(): number;
30
+ terminate(): void;
31
+ }
32
+ //# sourceMappingURL=painter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/ui/canvas/painter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAEnF,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAE7B,qBAAa,aAAc,YAAW,UAAU;;gBAGhC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC;IAIvE,QAAQ,CAAC,aAAa,QAAO,IAAI,CAAqC;IAEtE,IAAI,SAAS,IAAI,OAAO,CAAmC;IAC3D,IAAI,gBAAgB,IAAI,MAAM,CAA0C;IACxE,IAAI,KAAK,IAAI,MAAM,CAA+B;IAClD,IAAI,MAAM,IAAI,MAAM,CAAgC;IACpD,IAAI,WAAW,IAAI,MAAM,CAAqC;IAC9D,IAAI,YAAY,IAAI,MAAM,CAAsC;IAChE,IAAI,OAAO,IAAI,wBAAwB,CAAiC;IACxE,SAAS,IAAI,IAAI;CACpB;AAED,qBAAa,iBAAkB,YAAW,UAAU;;gBAMpC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAMhD,QAAQ,CAAC,aAAa,QAAO,IAAI,CAAqC;IAEtE,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC9B,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC9B,IAAI,OAAO,IAAI,wBAAwB,CAAiC;IACxE,IAAI,SAAS,IAAI,OAAO,CAAmC;IAC3D,IAAI,KAAK,IAAI,MAAM,CAA+B;IAClD,IAAI,MAAM,IAAI,MAAM,CAAgC;IACpD,IAAI,WAAW,IAAI,MAAM,CAAqC;IAC9D,IAAI,YAAY,IAAI,MAAM,CAAsC;IAChE,SAAS,IAAI,IAAI;CACpB"}
@@ -0,0 +1,81 @@
1
+ import { asDefined, Terminator } from "@opendaw/lib-std";
2
+ import { AnimationFrame, Html } from "@opendaw/lib-dom";
3
+ export class CanvasPainter {
4
+ #rendering;
5
+ constructor(canvas, render) {
6
+ this.#rendering = new CanvasRenderer(canvas, () => render(this));
7
+ }
8
+ requestUpdate = () => { this.#rendering.requestUpdate(); };
9
+ get isResized() { return this.#rendering.isResized; }
10
+ get devicePixelRatio() { return this.#rendering.devicePixelRatio; }
11
+ get width() { return this.#rendering.width; }
12
+ get height() { return this.#rendering.height; }
13
+ get actualWidth() { return this.#rendering.actualWidth; }
14
+ get actualHeight() { return this.#rendering.actualHeight; }
15
+ get context() { return this.#rendering.context; }
16
+ terminate() { this.#rendering.terminate(); }
17
+ }
18
+ export class CanvasUnitPainter {
19
+ #rendering;
20
+ #xAxis;
21
+ #yAxis;
22
+ constructor(canvas, xAxis, yAxis, render) {
23
+ this.#rendering = new CanvasRenderer(canvas, () => render(this));
24
+ this.#xAxis = xAxis;
25
+ this.#yAxis = yAxis;
26
+ }
27
+ requestUpdate = () => { this.#rendering.requestUpdate(); };
28
+ xToUnit(x) { return this.#xAxis.normToUnit(x / this.#rendering.actualWidth); }
29
+ unitToX(value) { return this.#xAxis.unitToNorm(value) * this.#rendering.actualWidth; }
30
+ yToUnit(y) { return this.#yAxis.normToUnit(1.0 - y / this.#rendering.actualHeight); }
31
+ unitToY(value) { return (1.0 - this.#yAxis.unitToNorm(value)) * this.#rendering.actualHeight; }
32
+ get context() { return this.#rendering.context; }
33
+ get isResized() { return this.#rendering.isResized; }
34
+ get width() { return this.#rendering.width; }
35
+ get height() { return this.#rendering.height; }
36
+ get actualWidth() { return this.#rendering.actualWidth; }
37
+ get actualHeight() { return this.#rendering.actualHeight; }
38
+ terminate() { this.#rendering.terminate(); }
39
+ }
40
+ class CanvasRenderer {
41
+ #lifecycle = new Terminator();
42
+ #context;
43
+ #update;
44
+ #width = 0;
45
+ #height = 0;
46
+ #devicePixelRatio = 1;
47
+ #isResized = true;
48
+ #needsUpdate = true;
49
+ constructor(canvas, update) {
50
+ this.#context = asDefined(canvas.getContext("2d"));
51
+ this.#update = update;
52
+ this.#lifecycle.ownAll(Html.watchResize(canvas, () => {
53
+ this.#isResized = true;
54
+ this.#needsUpdate = true;
55
+ }), this.#lifecycle.own(AnimationFrame.add(() => {
56
+ const width = canvas.clientWidth;
57
+ const height = canvas.clientHeight;
58
+ if (!this.#needsUpdate || width === 0 || height === 0) {
59
+ return;
60
+ }
61
+ this.#isResized = width !== this.#width || height !== this.#height || devicePixelRatio !== this.#devicePixelRatio;
62
+ this.#width = width;
63
+ this.#height = height;
64
+ this.#devicePixelRatio = devicePixelRatio;
65
+ canvas.width = width * devicePixelRatio;
66
+ canvas.height = height * devicePixelRatio;
67
+ this.#update();
68
+ this.#isResized = false;
69
+ this.#needsUpdate = false;
70
+ })));
71
+ }
72
+ get isResized() { return this.#isResized; }
73
+ get devicePixelRatio() { return this.#devicePixelRatio; }
74
+ get width() { return this.#width; }
75
+ get height() { return this.#height; }
76
+ get actualWidth() { return this.#width * this.#devicePixelRatio; }
77
+ get actualHeight() { return this.#height * this.#devicePixelRatio; }
78
+ get context() { return this.#context; }
79
+ requestUpdate() { this.#needsUpdate = true; }
80
+ terminate() { this.#lifecycle.terminate(); }
81
+ }
@@ -0,0 +1,22 @@
1
+ import { unitValue } from "@opendaw/lib-std";
2
+ export interface Scale {
3
+ unitToNorm(unit: number): unitValue;
4
+ normToUnit(norm: unitValue): number;
5
+ }
6
+ export declare class LinearScale implements Scale {
7
+ #private;
8
+ constructor(min: number, max: number);
9
+ get min(): number;
10
+ get max(): number;
11
+ normToUnit(norm: number): number;
12
+ unitToNorm(unit: number): number;
13
+ }
14
+ export declare class LogScale implements Scale {
15
+ #private;
16
+ constructor(min: number, max: number);
17
+ get min(): number;
18
+ get max(): number;
19
+ normToUnit(norm: unitValue): number;
20
+ unitToNorm(unit: number): unitValue;
21
+ }
22
+ //# sourceMappingURL=scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/ui/canvas/scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,MAAM,WAAW,KAAK;IAClB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;CACtC;AAED,qBAAa,WAAY,YAAW,KAAK;;gBAMzB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAOpC,IAAI,GAAG,IAAI,MAAM,CAAmB;IACpC,IAAI,GAAG,IAAI,MAAM,CAAmB;IAEpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAChC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CACnC;AAED,qBAAa,QAAS,YAAW,KAAK;;gBAOtB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAQpC,IAAI,GAAG,IAAI,MAAM,CAAmB;IACpC,IAAI,GAAG,IAAI,MAAM,CAAmB;IAEpC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IACnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;CACtC"}
@@ -0,0 +1,34 @@
1
+ export class LinearScale {
2
+ #min;
3
+ #max;
4
+ #range;
5
+ #rangeInv;
6
+ constructor(min, max) {
7
+ this.#min = min;
8
+ this.#max = max;
9
+ this.#range = max - min;
10
+ this.#rangeInv = 1.0 / this.#range;
11
+ }
12
+ get min() { return this.#min; }
13
+ get max() { return this.#max; }
14
+ normToUnit(norm) { return this.#min + norm * this.#range; }
15
+ unitToNorm(unit) { return (unit - this.#min) * this.#rangeInv; }
16
+ }
17
+ export class LogScale {
18
+ #min;
19
+ #max;
20
+ #range;
21
+ #logMin;
22
+ #logRangeInv;
23
+ constructor(min, max) {
24
+ this.#min = min;
25
+ this.#max = max;
26
+ this.#range = Math.log(max / min);
27
+ this.#logMin = Math.log(min);
28
+ this.#logRangeInv = 1.0 / (Math.log(max) - this.#logMin);
29
+ }
30
+ get min() { return this.#min; }
31
+ get max() { return this.#max; }
32
+ normToUnit(norm) { return this.#min * Math.exp(norm * this.#range); }
33
+ unitToNorm(unit) { return (Math.log(unit) - this.#logMin) * this.#logRangeInv; }
34
+ }
@@ -1,3 +1,4 @@
1
+ export * from "./canvas";
1
2
  export * from "./clipboard/ClipboardManager";
2
3
  export * from "./clipboard/ClipboardUtils";
3
4
  export * from "./clipboard/ContextMenu";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,8CAA8C,CAAA;AAC5D,cAAc,2CAA2C,CAAA;AACzD,cAAc,yCAAyC,CAAA;AACvD,cAAc,2CAA2C,CAAA;AACzD,cAAc,0CAA0C,CAAA;AACxD,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,kCAAkC,CAAA;AAChD,cAAc,uCAAuC,CAAA;AACrD,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,8CAA8C,CAAA;AAC5D,cAAc,2CAA2C,CAAA;AACzD,cAAc,yCAAyC,CAAA;AACvD,cAAc,2CAA2C,CAAA;AACzD,cAAc,0CAA0C,CAAA;AACxD,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,kCAAkC,CAAA;AAChD,cAAc,uCAAuC,CAAA;AACrD,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA"}
package/dist/ui/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from "./canvas";
1
2
  export * from "./clipboard/ClipboardManager";
2
3
  export * from "./clipboard/ClipboardUtils";
3
4
  export * from "./clipboard/ContextMenu";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendaw/studio-core",
3
- "version": "0.0.113",
3
+ "version": "0.0.114",
4
4
  "license": "LGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -62,5 +62,5 @@
62
62
  "@opendaw/studio-forge-boxes": "^0.0.78",
63
63
  "@opendaw/typescript-config": "^0.0.29"
64
64
  },
65
- "gitHead": "db95b5ad62412ee3f079fc8cc0767d24e6426320"
65
+ "gitHead": "4781e65b5b6bc29077d2e32da950b8a6a352dfce"
66
66
  }