@flighthq/scene2d-canvas 0.2.1-next.840.857425c
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/canvasBackground.d.ts +3 -0
- package/dist/canvasBackground.d.ts.map +1 -0
- package/dist/canvasBackground.js +19 -0
- package/dist/canvasBackground.js.map +1 -0
- package/dist/canvasBitmap.d.ts +4 -0
- package/dist/canvasBitmap.d.ts.map +1 -0
- package/dist/canvasBitmap.js +36 -0
- package/dist/canvasBitmap.js.map +1 -0
- package/dist/canvasCSSFilterBinding.d.ts +24 -0
- package/dist/canvasCSSFilterBinding.d.ts.map +1 -0
- package/dist/canvasCSSFilterBinding.js +43 -0
- package/dist/canvasCSSFilterBinding.js.map +1 -0
- package/dist/canvasCache.d.ts +33 -0
- package/dist/canvasCache.d.ts.map +1 -0
- package/dist/canvasCache.js +141 -0
- package/dist/canvasCache.js.map +1 -0
- package/dist/canvasClip.d.ts +3 -0
- package/dist/canvasClip.d.ts.map +1 -0
- package/dist/canvasClip.js +38 -0
- package/dist/canvasClip.js.map +1 -0
- package/dist/canvasClipRectangle.d.ts +5 -0
- package/dist/canvasClipRectangle.d.ts.map +1 -0
- package/dist/canvasClipRectangle.js +31 -0
- package/dist/canvasClipRectangle.js.map +1 -0
- package/dist/canvasElement.d.ts +2 -0
- package/dist/canvasElement.d.ts.map +1 -0
- package/dist/canvasElement.js +9 -0
- package/dist/canvasElement.js.map +1 -0
- package/dist/canvasFillPattern.d.ts +4 -0
- package/dist/canvasFillPattern.d.ts.map +1 -0
- package/dist/canvasFillPattern.js +108 -0
- package/dist/canvasFillPattern.js.map +1 -0
- package/dist/canvasImageSource.d.ts +4 -0
- package/dist/canvasImageSource.d.ts.map +1 -0
- package/dist/canvasImageSource.js +45 -0
- package/dist/canvasImageSource.js.map +1 -0
- package/dist/canvasMaterialRegistry.d.ts +6 -0
- package/dist/canvasMaterialRegistry.d.ts.map +1 -0
- package/dist/canvasMaterialRegistry.js +42 -0
- package/dist/canvasMaterialRegistry.js.map +1 -0
- package/dist/canvasMaterials.d.ts +5 -0
- package/dist/canvasMaterials.d.ts.map +1 -0
- package/dist/canvasMaterials.js +39 -0
- package/dist/canvasMaterials.js.map +1 -0
- package/dist/canvasNode2D.d.ts +5 -0
- package/dist/canvasNode2D.d.ts.map +1 -0
- package/dist/canvasNode2D.js +46 -0
- package/dist/canvasNode2D.js.map +1 -0
- package/dist/canvasParticleEmitter2D.d.ts +4 -0
- package/dist/canvasParticleEmitter2D.d.ts.map +1 -0
- package/dist/canvasParticleEmitter2D.js +64 -0
- package/dist/canvasParticleEmitter2D.js.map +1 -0
- package/dist/canvasQuadBatch.d.ts +4 -0
- package/dist/canvasQuadBatch.d.ts.map +1 -0
- package/dist/canvasQuadBatch.js +64 -0
- package/dist/canvasQuadBatch.js.map +1 -0
- package/dist/canvasRegistration.d.ts +4 -0
- package/dist/canvasRegistration.d.ts.map +1 -0
- package/dist/canvasRegistration.js +39 -0
- package/dist/canvasRegistration.js.map +1 -0
- package/dist/canvasRenderState.d.ts +5 -0
- package/dist/canvasRenderState.d.ts.map +1 -0
- package/dist/canvasRenderState.js +44 -0
- package/dist/canvasRenderState.js.map +1 -0
- package/dist/canvasRenderTarget.d.ts +26 -0
- package/dist/canvasRenderTarget.d.ts.map +1 -0
- package/dist/canvasRenderTarget.js +80 -0
- package/dist/canvasRenderTarget.js.map +1 -0
- package/dist/canvasRichText.d.ts +6 -0
- package/dist/canvasRichText.d.ts.map +1 -0
- package/dist/canvasRichText.js +128 -0
- package/dist/canvasRichText.js.map +1 -0
- package/dist/canvasScale9Mapper.d.ts +10 -0
- package/dist/canvasScale9Mapper.d.ts.map +1 -0
- package/dist/canvasScale9Mapper.js +148 -0
- package/dist/canvasScale9Mapper.js.map +1 -0
- package/dist/canvasScale9Shape.d.ts +5 -0
- package/dist/canvasScale9Shape.d.ts.map +1 -0
- package/dist/canvasScale9Shape.js +156 -0
- package/dist/canvasScale9Shape.js.map +1 -0
- package/dist/canvasShape.d.ts +5 -0
- package/dist/canvasShape.d.ts.map +1 -0
- package/dist/canvasShape.js +79 -0
- package/dist/canvasShape.js.map +1 -0
- package/dist/canvasShapeCommands.d.ts +19 -0
- package/dist/canvasShapeCommands.d.ts.map +1 -0
- package/dist/canvasShapeCommands.js +352 -0
- package/dist/canvasShapeCommands.js.map +1 -0
- package/dist/canvasShapeRegistry.d.ts +5 -0
- package/dist/canvasShapeRegistry.d.ts.map +1 -0
- package/dist/canvasShapeRegistry.js +17 -0
- package/dist/canvasShapeRegistry.js.map +1 -0
- package/dist/canvasSprite.d.ts +5 -0
- package/dist/canvasSprite.d.ts.map +1 -0
- package/dist/canvasSprite.js +61 -0
- package/dist/canvasSprite.js.map +1 -0
- package/dist/canvasTextInput.d.ts +4 -0
- package/dist/canvasTextInput.d.ts.map +1 -0
- package/dist/canvasTextInput.js +67 -0
- package/dist/canvasTextInput.js.map +1 -0
- package/dist/canvasTextLabel.d.ts +4 -0
- package/dist/canvasTextLabel.d.ts.map +1 -0
- package/dist/canvasTextLabel.js +56 -0
- package/dist/canvasTextLabel.js.map +1 -0
- package/dist/canvasTextMeasure.d.ts +3 -0
- package/dist/canvasTextMeasure.d.ts.map +1 -0
- package/dist/canvasTextMeasure.js +15 -0
- package/dist/canvasTextMeasure.js.map +1 -0
- package/dist/canvasTilemap.d.ts +4 -0
- package/dist/canvasTilemap.d.ts.map +1 -0
- package/dist/canvasTilemap.js +50 -0
- package/dist/canvasTilemap.js.map +1 -0
- package/dist/canvasTransform.d.ts +3 -0
- package/dist/canvasTransform.d.ts.map +1 -0
- package/dist/canvasTransform.js +9 -0
- package/dist/canvasTransform.js.map +1 -0
- package/dist/canvasVideo.d.ts +4 -0
- package/dist/canvasVideo.d.ts.map +1 -0
- package/dist/canvasVideo.js +26 -0
- package/dist/canvasVideo.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/package.json +55 -0
- package/src/canvasBackground.test.ts +65 -0
- package/src/canvasBitmap.test.ts +92 -0
- package/src/canvasCSSFilterBinding.test.ts +86 -0
- package/src/canvasCache.test.ts +189 -0
- package/src/canvasClip.test.ts +12 -0
- package/src/canvasClipRectangle.test.ts +101 -0
- package/src/canvasElement.test.ts +21 -0
- package/src/canvasFillPattern.test.ts +96 -0
- package/src/canvasImageSource.test.ts +79 -0
- package/src/canvasMaterialRegistry.test.ts +69 -0
- package/src/canvasMaterials.test.ts +85 -0
- package/src/canvasNode2D.test.ts +113 -0
- package/src/canvasParticleEmitter2D.test.ts +105 -0
- package/src/canvasQuadBatch.test.ts +119 -0
- package/src/canvasRegistration.test.ts +57 -0
- package/src/canvasRenderState.test.ts +186 -0
- package/src/canvasRenderTarget.test.ts +162 -0
- package/src/canvasRichText.test.ts +93 -0
- package/src/canvasScale9Mapper.test.ts +53 -0
- package/src/canvasScale9Shape.test.ts +89 -0
- package/src/canvasShape.test.ts +183 -0
- package/src/canvasShapeCommands.test.ts +448 -0
- package/src/canvasShapeRegistry.test.ts +42 -0
- package/src/canvasSprite.test.ts +106 -0
- package/src/canvasTextInput.test.ts +67 -0
- package/src/canvasTextLabel.test.ts +32 -0
- package/src/canvasTextMeasure.test.ts +9 -0
- package/src/canvasTilemap.test.ts +69 -0
- package/src/canvasTransform.test.ts +42 -0
- package/src/canvasVideo.test.ts +43 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { copyMatrix, createMatrix } from '@flighthq/geometry';
|
|
2
|
+
import { getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
3
|
+
const _targetStack = new WeakMap();
|
|
4
|
+
/**
|
|
5
|
+
* Begins a render pass into `target`: redirects subsequent canvas rendering into it (saving the state's
|
|
6
|
+
* current canvas, context, and 2D transform for restore, so passes nest) and CLEARS it by default.
|
|
7
|
+
* `preserve` keeps the target's pixels instead. Canvas clears by erasing (clearRect), so there is no
|
|
8
|
+
* colored render-target clear here; a colored backdrop is drawn as content. Carries no transform — a 2D
|
|
9
|
+
* pass that needs a specific root transform calls setCanvasRenderTransform2D after begin. Pair with
|
|
10
|
+
* endCanvasRenderPass. Mirrors beginGlRenderPass / beginWgpuRenderPass.
|
|
11
|
+
*/
|
|
12
|
+
export function beginCanvasRenderPass(state, target, preserve) {
|
|
13
|
+
const handles = state;
|
|
14
|
+
const runtime = getCanvasRenderStateRuntime(state);
|
|
15
|
+
let stack = _targetStack.get(state);
|
|
16
|
+
if (stack === undefined) {
|
|
17
|
+
stack = [];
|
|
18
|
+
_targetStack.set(state, stack);
|
|
19
|
+
}
|
|
20
|
+
stack.push({
|
|
21
|
+
canvas: handles.canvas,
|
|
22
|
+
context: handles.context,
|
|
23
|
+
renderTransform2D: handles.renderTransform2D,
|
|
24
|
+
});
|
|
25
|
+
handles.canvas = target.canvas;
|
|
26
|
+
handles.context = target.context;
|
|
27
|
+
handles.context.imageSmoothingEnabled = runtime.imageSmoothingEnabled;
|
|
28
|
+
handles.context.imageSmoothingQuality = runtime.imageSmoothingQuality;
|
|
29
|
+
const preserveColor = preserve?.preserveColor;
|
|
30
|
+
const preserved = typeof preserveColor === 'boolean' ? preserveColor : preserveColor?.[0] === true;
|
|
31
|
+
if (!preserved)
|
|
32
|
+
handles.context.clearRect(0, 0, target.width, target.height);
|
|
33
|
+
}
|
|
34
|
+
export function createCanvasRenderTarget(width, height) {
|
|
35
|
+
const canvas = document.createElement('canvas');
|
|
36
|
+
canvas.width = Math.max(1, Math.ceil(width));
|
|
37
|
+
canvas.height = Math.max(1, Math.ceil(height));
|
|
38
|
+
const context = canvas.getContext('2d');
|
|
39
|
+
return { canvas, context, width: canvas.width, height: canvas.height };
|
|
40
|
+
}
|
|
41
|
+
export function destroyCanvasRenderTarget(target) {
|
|
42
|
+
// Collapse the canvas to zero size so the browser can reclaim its backing store now.
|
|
43
|
+
// Setting width/height to 0 also implicitly resets the context state.
|
|
44
|
+
target.canvas.width = 0;
|
|
45
|
+
target.canvas.height = 0;
|
|
46
|
+
target.width = 0;
|
|
47
|
+
target.height = 0;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ends the pass opened by beginCanvasRenderPass: restores the canvas, context, and 2D transform saved at
|
|
51
|
+
* begin. A call with no matching begin is a no-op. Mirrors endGlRenderPass / endWgpuRenderPass.
|
|
52
|
+
*/
|
|
53
|
+
export function endCanvasRenderPass(state) {
|
|
54
|
+
const handles = state;
|
|
55
|
+
const saved = _targetStack.get(state)?.pop();
|
|
56
|
+
if (saved === undefined)
|
|
57
|
+
return;
|
|
58
|
+
handles.canvas = saved.canvas;
|
|
59
|
+
handles.context = saved.context;
|
|
60
|
+
handles.renderTransform2D = saved.renderTransform2D;
|
|
61
|
+
}
|
|
62
|
+
export function resizeCanvasRenderTarget(target, width, height) {
|
|
63
|
+
target.canvas.width = Math.max(1, Math.ceil(width));
|
|
64
|
+
target.canvas.height = Math.max(1, Math.ceil(height));
|
|
65
|
+
target.width = target.canvas.width;
|
|
66
|
+
target.height = target.canvas.height;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Sets the 2D root device transform the display-object update pass reads to place nodes with no parent.
|
|
70
|
+
* Call after beginCanvasRenderPass when a 2D pass renders into a target with its own coordinate system;
|
|
71
|
+
* the value is restored by the matching endCanvasRenderPass. Allocates a fresh matrix so the bracket's
|
|
72
|
+
* saved reference stays intact for restore. Mirrors setGlRenderTransform2D / setWgpuRenderTransform2D.
|
|
73
|
+
*/
|
|
74
|
+
export function setCanvasRenderTransform2D(state, transform) {
|
|
75
|
+
const handles = state;
|
|
76
|
+
const next = createMatrix();
|
|
77
|
+
copyMatrix(next, transform);
|
|
78
|
+
handles.renderTransform2D = next;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=canvasRenderTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasRenderTarget.js","sourceRoot":"","sources":["../src/canvasRenderTarget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CanvasRenderState, CanvasTextInputOverlay, Scene2DRenderer, RenderProxy2D } from '@flighthq/types';
|
|
2
|
+
export declare function drawCanvasRichText(state: CanvasRenderState, renderProxy: RenderProxy2D): void;
|
|
3
|
+
export declare function drawCanvasRichTextMask(state: CanvasRenderState, data: RenderProxy2D): void;
|
|
4
|
+
export declare function registerCanvasTextInputOverlay(overlay: CanvasTextInputOverlay): void;
|
|
5
|
+
export declare const defaultCanvasRichTextRenderer: Scene2DRenderer;
|
|
6
|
+
//# sourceMappingURL=canvasRichText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasRichText.d.ts","sourceRoot":"","sources":["../src/canvasRichText.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,aAAa,EAKd,MAAM,iBAAiB,CAAC;AAKzB,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAS7F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAE1F;AAsHD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAEpF;AASD,eAAO,MAAM,6BAA6B,EAAE,eAG3C,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { computeRgbHexString } from '@flighthq/color';
|
|
2
|
+
import { noopRendererData } from '@flighthq/render';
|
|
3
|
+
import { computeTextFormatFontString, getRichTextPasswordCharacter, getRichTextRuntime } from '@flighthq/text';
|
|
4
|
+
import { computeRichTextContent, computeTextBoundsHeight, computeTextBoundsWidth, computeTextLayout, getRichTextContent, getRichTextScrollYOffset, getRichTextSelectionRectangles, getTextLayoutResult, } from '@flighthq/textlayout';
|
|
5
|
+
import { drawCanvasScene2D } from './canvasNode2D';
|
|
6
|
+
import { setCanvasTransform } from './canvasTransform';
|
|
7
|
+
export function drawCanvasRichText(state, renderProxy) {
|
|
8
|
+
drawCanvasRichTextField(state, renderProxy);
|
|
9
|
+
// The editable-input overlay (caret/selection) draws on top of the field, in its own coordinate
|
|
10
|
+
// space, and must run even when the text is empty — so it is invoked after the field, keyed off the
|
|
11
|
+
// input slot. registerCanvasTextInputOverlay (enableCanvasTextInput) is what installs it; a static
|
|
12
|
+
// RichText leaves the slot null and pulls no text-input code.
|
|
13
|
+
if (_canvasTextInputOverlay !== null && getRichTextRuntime(renderProxy.source).input !== null) {
|
|
14
|
+
_canvasTextInputOverlay(state, renderProxy);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function drawCanvasRichTextMask(state, data) {
|
|
18
|
+
drawCanvasScene2D(state, data);
|
|
19
|
+
}
|
|
20
|
+
function drawCanvasRichTextField(state, renderProxy) {
|
|
21
|
+
drawCanvasScene2D(state, renderProxy);
|
|
22
|
+
const source = renderProxy.source;
|
|
23
|
+
const data = source.data;
|
|
24
|
+
const context = state.context;
|
|
25
|
+
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
26
|
+
context.globalAlpha = renderProxy.alpha;
|
|
27
|
+
setCanvasTransform(state, context, renderProxy.transform2D);
|
|
28
|
+
const richTextRuntime = getRichTextRuntime(source);
|
|
29
|
+
const content = getRichTextContent(richTextRuntime);
|
|
30
|
+
computeRichTextContent(content, data, getRichTextPasswordCharacter(source));
|
|
31
|
+
const { text } = content;
|
|
32
|
+
const measure = (t, fmt) => {
|
|
33
|
+
context.font = computeTextFormatFontString(fmt);
|
|
34
|
+
return context.measureText(t).width;
|
|
35
|
+
};
|
|
36
|
+
const result = getTextLayoutResult(richTextRuntime);
|
|
37
|
+
computeTextLayout(result, {
|
|
38
|
+
text,
|
|
39
|
+
formatRanges: content.formatRanges,
|
|
40
|
+
width: data.width,
|
|
41
|
+
height: data.height,
|
|
42
|
+
measure,
|
|
43
|
+
multiline: data.multiline,
|
|
44
|
+
verticalAlign: data.autoSize === 'none' ? data.verticalAlign : 'top',
|
|
45
|
+
wordWrap: data.wordWrap,
|
|
46
|
+
});
|
|
47
|
+
const fieldW = computeTextBoundsWidth(data, result);
|
|
48
|
+
const fieldH = computeTextBoundsHeight(data, result);
|
|
49
|
+
if (data.background) {
|
|
50
|
+
context.fillStyle = computeRgbHexString(data.backgroundColor);
|
|
51
|
+
context.fillRect(0, 0, fieldW, fieldH);
|
|
52
|
+
}
|
|
53
|
+
if (data.border) {
|
|
54
|
+
context.strokeStyle = computeRgbHexString(data.borderColor);
|
|
55
|
+
context.lineWidth = 1;
|
|
56
|
+
context.strokeRect(0, 0, fieldW, fieldH);
|
|
57
|
+
}
|
|
58
|
+
if (text.length === 0)
|
|
59
|
+
return;
|
|
60
|
+
// scrollV is 1-based: first visible line index = scrollV - 1
|
|
61
|
+
const firstVisibleLine = data.scrollV - 1;
|
|
62
|
+
const scrollYOffset = firstVisibleLine > 0 ? getRichTextScrollYOffset(result.lineHeights, firstVisibleLine) : 0;
|
|
63
|
+
const scrollXOffset = data.scrollH;
|
|
64
|
+
context.save();
|
|
65
|
+
context.beginPath();
|
|
66
|
+
context.rect(0, 0, fieldW, fieldH);
|
|
67
|
+
context.clip();
|
|
68
|
+
if (source.data.selectable && richTextRuntime.selectionBeginIndex !== richTextRuntime.selectionEndIndex) {
|
|
69
|
+
getRichTextSelectionRectangles(_richTextSelectionRectangles, richTextRuntime.selectionBeginIndex, richTextRuntime.selectionEndIndex, result);
|
|
70
|
+
context.fillStyle = SELECTION_COLOR;
|
|
71
|
+
context.globalAlpha = Math.min(1, renderProxy.alpha * SELECTION_ALPHA);
|
|
72
|
+
for (const rectangle of _richTextSelectionRectangles) {
|
|
73
|
+
context.fillRect(rectangle.x - scrollXOffset, rectangle.y - scrollYOffset, rectangle.width, rectangle.height);
|
|
74
|
+
}
|
|
75
|
+
context.globalAlpha = renderProxy.alpha;
|
|
76
|
+
}
|
|
77
|
+
context.textBaseline = 'alphabetic';
|
|
78
|
+
context.textAlign = 'start';
|
|
79
|
+
const bulletLines = new Set();
|
|
80
|
+
for (const group of result.groups) {
|
|
81
|
+
if (group.lineIndex < firstVisibleLine)
|
|
82
|
+
continue;
|
|
83
|
+
context.font = computeTextFormatFontString(group.format);
|
|
84
|
+
context.fillStyle = computeRgbHexString(group.format.color ?? data.textColor);
|
|
85
|
+
const slice = text.substring(group.startIndex, group.endIndex);
|
|
86
|
+
const x = group.offsetX - scrollXOffset;
|
|
87
|
+
const y = group.offsetY + group.ascent - scrollYOffset;
|
|
88
|
+
if (group.format.bullet && !bulletLines.has(group.lineIndex)) {
|
|
89
|
+
bulletLines.add(group.lineIndex);
|
|
90
|
+
const bulletW = context.measureText(BULLET_CHAR).width;
|
|
91
|
+
context.fillText(BULLET_CHAR, x - bulletW - BULLET_GAP, y);
|
|
92
|
+
}
|
|
93
|
+
context.fillText(slice, x, y);
|
|
94
|
+
const lineColor = computeRgbHexString(group.format.color ?? data.textColor);
|
|
95
|
+
const lineWidth = Math.max(1, (group.format.size ?? 12) / 16);
|
|
96
|
+
if (group.format.underline || group.format.strikethrough) {
|
|
97
|
+
context.strokeStyle = lineColor;
|
|
98
|
+
context.lineWidth = lineWidth;
|
|
99
|
+
if (group.format.underline) {
|
|
100
|
+
context.beginPath();
|
|
101
|
+
context.moveTo(x, y + group.descent);
|
|
102
|
+
context.lineTo(x + group.width, y + group.descent);
|
|
103
|
+
context.stroke();
|
|
104
|
+
}
|
|
105
|
+
if (group.format.strikethrough) {
|
|
106
|
+
context.beginPath();
|
|
107
|
+
context.moveTo(x, y - group.ascent * 0.35);
|
|
108
|
+
context.lineTo(x + group.width, y - group.ascent * 0.35);
|
|
109
|
+
context.stroke();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
context.restore();
|
|
114
|
+
}
|
|
115
|
+
export function registerCanvasTextInputOverlay(overlay) {
|
|
116
|
+
_canvasTextInputOverlay = overlay;
|
|
117
|
+
}
|
|
118
|
+
const BULLET_CHAR = '•';
|
|
119
|
+
const BULLET_GAP = 4;
|
|
120
|
+
const SELECTION_ALPHA = 0.35;
|
|
121
|
+
const SELECTION_COLOR = '#0078d7';
|
|
122
|
+
const _richTextSelectionRectangles = [];
|
|
123
|
+
let _canvasTextInputOverlay = null;
|
|
124
|
+
export const defaultCanvasRichTextRenderer = {
|
|
125
|
+
createData: noopRendererData,
|
|
126
|
+
submit: drawCanvasRichText,
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=canvasRichText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasRichText.js","sourceRoot":"","sources":["../src/canvasRichText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAa9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,kBAAkB,CAAC,KAAwB,EAAE,WAA0B;IACrF,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5C,gGAAgG;IAChG,oGAAoG;IACpG,mGAAmG;IACnG,8DAA8D;IAC9D,IAAI,uBAAuB,KAAK,IAAI,IAAI,kBAAkB,CAAC,WAAW,CAAC,MAAkB,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1G,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAwB,EAAE,IAAmB;IAClF,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAwB,EAAE,WAA0B;IACnF,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAkB,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;IACxC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE5D,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAoB,CAAC;IACtE,MAAM,OAAO,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,GAAe,EAAU,EAAE;QACrD,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,eAAmC,CAAC,CAAC;IACxE,iBAAiB,CAAC,MAAM,EAAE;QACxB,IAAI;QACJ,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;QACpE,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5D,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9B,6DAA6D;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;IAEnC,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,eAAe,CAAC,mBAAmB,KAAK,eAAe,CAAC,iBAAiB,EAAE,CAAC;QACxG,8BAA8B,CAC5B,4BAA4B,EAC5B,eAAe,CAAC,mBAAmB,EACnC,eAAe,CAAC,iBAAiB,EACjC,MAAM,CACP,CAAC;QACF,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC;QACpC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;QACvE,KAAK,MAAM,SAAS,IAAI,4BAA4B,EAAE,CAAC;YACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IACpC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;IAE5B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,SAAS,GAAG,gBAAgB;YAAE,SAAS;QAEjD,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,aAAa,CAAC;QACxC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;QAEvD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9B,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACzD,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;YAChC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnD,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC/B,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBACzD,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAA+B;IAC5E,uBAAuB,GAAG,OAAO,CAAC;AACpC,CAAC;AAED,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,MAAM,4BAA4B,GAA6B,EAAE,CAAC;AAClE,IAAI,uBAAuB,GAAkC,IAAI,CAAC;AAElE,MAAM,CAAC,MAAM,6BAA6B,GAAoB;IAC5D,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,kBAAkB;CAC3B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RectangleLike, Scale9Mapper } from '@flighthq/types';
|
|
2
|
+
/**
|
|
3
|
+
* Builds a coordinate mapper for 9-slice scaled rendering.
|
|
4
|
+
* Returns null if scale9Grid cannot be applied (zero/negative scale, degenerate bounds).
|
|
5
|
+
*
|
|
6
|
+
* Caller is responsible for ensuring the canvas transform has the object's own
|
|
7
|
+
* scaleX/scaleY removed (leaving only parent scale + translation) before drawing.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildScale9Mapper(commands: readonly unknown[], scale9Grid: Readonly<RectangleLike>, scaleX: number, scaleY: number): Scale9Mapper | null;
|
|
10
|
+
//# sourceMappingURL=canvasScale9Mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasScale9Mapper.d.ts","sourceRoot":"","sources":["../src/canvasScale9Mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,YAAY,GAAG,IAAI,CAgBrB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a coordinate mapper for 9-slice scaled rendering.
|
|
3
|
+
* Returns null if scale9Grid cannot be applied (zero/negative scale, degenerate bounds).
|
|
4
|
+
*
|
|
5
|
+
* Caller is responsible for ensuring the canvas transform has the object's own
|
|
6
|
+
* scaleX/scaleY removed (leaving only parent scale + translation) before drawing.
|
|
7
|
+
*/
|
|
8
|
+
export function buildScale9Mapper(commands, scale9Grid, scaleX, scaleY) {
|
|
9
|
+
if (scaleX <= 0 || scaleY <= 0)
|
|
10
|
+
return null;
|
|
11
|
+
const bounds = computeCommandsBounds(commands);
|
|
12
|
+
if (bounds === null || bounds.width <= 0 || bounds.height <= 0)
|
|
13
|
+
return null;
|
|
14
|
+
const { width: bw, height: bh } = bounds;
|
|
15
|
+
const gx = scale9Grid.x;
|
|
16
|
+
const gy = scale9Grid.y;
|
|
17
|
+
const gw = scale9Grid.width;
|
|
18
|
+
const gh = scale9Grid.height;
|
|
19
|
+
return {
|
|
20
|
+
mapX: (x) => toScale9Position(x, gx, gw, bw, scaleX),
|
|
21
|
+
mapY: (y) => toScale9Position(y, gy, gh, bh, scaleY),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Private helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Maps a local coordinate to its 9-slice-scaled position.
|
|
29
|
+
* Port of OpenFL's CanvasGraphics.hx `toScale9Position`.
|
|
30
|
+
*/
|
|
31
|
+
function toScale9Position(pos, scale9Start, scale9Center, unscaledSize, scale) {
|
|
32
|
+
const scale9End = unscaledSize - scale9Center - scale9Start;
|
|
33
|
+
const size = unscaledSize * scale;
|
|
34
|
+
const center = size - scale9Start - scale9End;
|
|
35
|
+
if (pos <= scale9Start) {
|
|
36
|
+
if (center < 0) {
|
|
37
|
+
return (pos * (scale9Start + scale9End + center)) / (scale9Start + scale9End);
|
|
38
|
+
}
|
|
39
|
+
return pos;
|
|
40
|
+
}
|
|
41
|
+
if (pos >= scale9Start + scale9Center) {
|
|
42
|
+
if (center < 0) {
|
|
43
|
+
return (((scale9Start + (pos - scale9Start - scale9Center)) * (scale9Start + scale9End + center)) /
|
|
44
|
+
(scale9Start + scale9End));
|
|
45
|
+
}
|
|
46
|
+
return scale9Start + center + (pos - scale9Start - scale9Center);
|
|
47
|
+
}
|
|
48
|
+
if (center < 0) {
|
|
49
|
+
return (scale9Start * (scale9Start + scale9End + center)) / (scale9Start + scale9End);
|
|
50
|
+
}
|
|
51
|
+
return scale9Start + (center * (pos - scale9Start)) / scale9Center;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Computes an axis-aligned bounding box from shape commands.
|
|
55
|
+
* Uses endpoints and control points as a conservative over-estimate of bezier extents.
|
|
56
|
+
*/
|
|
57
|
+
function computeCommandsBounds(commands) {
|
|
58
|
+
let minX = Infinity;
|
|
59
|
+
let minY = Infinity;
|
|
60
|
+
let maxX = -Infinity;
|
|
61
|
+
let maxY = -Infinity;
|
|
62
|
+
function expand(x, y) {
|
|
63
|
+
if (x < minX)
|
|
64
|
+
minX = x;
|
|
65
|
+
if (x > maxX)
|
|
66
|
+
maxX = x;
|
|
67
|
+
if (y < minY)
|
|
68
|
+
minY = y;
|
|
69
|
+
if (y > maxY)
|
|
70
|
+
maxY = y;
|
|
71
|
+
}
|
|
72
|
+
let i = 0;
|
|
73
|
+
while (i < commands.length) {
|
|
74
|
+
const key = commands[i];
|
|
75
|
+
const argCount = commands[i + 1];
|
|
76
|
+
// args begin at i+2 (after key and argCount)
|
|
77
|
+
switch (key) {
|
|
78
|
+
case 'moveTo':
|
|
79
|
+
case 'lineTo':
|
|
80
|
+
expand(commands[i + 2], commands[i + 3]);
|
|
81
|
+
break;
|
|
82
|
+
case 'curveTo':
|
|
83
|
+
expand(commands[i + 2], commands[i + 3]);
|
|
84
|
+
expand(commands[i + 4], commands[i + 5]);
|
|
85
|
+
break;
|
|
86
|
+
case 'cubicCurveTo':
|
|
87
|
+
expand(commands[i + 2], commands[i + 3]);
|
|
88
|
+
expand(commands[i + 4], commands[i + 5]);
|
|
89
|
+
expand(commands[i + 6], commands[i + 7]);
|
|
90
|
+
break;
|
|
91
|
+
case 'drawCircle': {
|
|
92
|
+
const cx = commands[i + 2];
|
|
93
|
+
const cy = commands[i + 3];
|
|
94
|
+
const r = commands[i + 4];
|
|
95
|
+
expand(cx - r, cy - r);
|
|
96
|
+
expand(cx + r, cy + r);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case 'drawEllipse':
|
|
100
|
+
case 'drawRectangle':
|
|
101
|
+
expand(commands[i + 2], commands[i + 3]);
|
|
102
|
+
expand(commands[i + 2] + commands[i + 4], commands[i + 3] + commands[i + 5]);
|
|
103
|
+
break;
|
|
104
|
+
case 'drawRoundRectangle':
|
|
105
|
+
expand(commands[i + 2], commands[i + 3]);
|
|
106
|
+
expand(commands[i + 2] + commands[i + 4], commands[i + 3] + commands[i + 5]);
|
|
107
|
+
break;
|
|
108
|
+
case 'drawPath': {
|
|
109
|
+
const pathCmds = commands[i + 2];
|
|
110
|
+
const data = commands[i + 3];
|
|
111
|
+
let di = 0;
|
|
112
|
+
for (const pc of pathCmds) {
|
|
113
|
+
switch (pc) {
|
|
114
|
+
case 1: // MOVE_TO
|
|
115
|
+
case 2: // LINE_TO
|
|
116
|
+
expand(data[di], data[di + 1]);
|
|
117
|
+
di += 2;
|
|
118
|
+
break;
|
|
119
|
+
case 3: // CURVE_TO
|
|
120
|
+
expand(data[di], data[di + 1]);
|
|
121
|
+
expand(data[di + 2], data[di + 3]);
|
|
122
|
+
di += 4;
|
|
123
|
+
break;
|
|
124
|
+
case 4: // WIDE_MOVE_TO
|
|
125
|
+
case 5: // WIDE_LINE_TO
|
|
126
|
+
expand(data[di + 2], data[di + 3]);
|
|
127
|
+
di += 4;
|
|
128
|
+
break;
|
|
129
|
+
case 6: // CUBIC_CURVE_TO
|
|
130
|
+
expand(data[di], data[di + 1]);
|
|
131
|
+
expand(data[di + 2], data[di + 3]);
|
|
132
|
+
expand(data[di + 4], data[di + 5]);
|
|
133
|
+
di += 6;
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
i += argCount + 2;
|
|
143
|
+
}
|
|
144
|
+
if (!isFinite(minX))
|
|
145
|
+
return null;
|
|
146
|
+
return { width: maxX - minX, height: maxY - minY };
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=canvasScale9Mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasScale9Mapper.js","sourceRoot":"","sources":["../src/canvasScale9Mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CanvasRenderState, Scene2DRenderer, RenderProxy2D, Scale9Mapper } from '@flighthq/types';
|
|
2
|
+
export declare function drawCanvasScale9Shape(state: CanvasRenderState, renderProxy: RenderProxy2D): void;
|
|
3
|
+
export declare function mapCanvasScale9ShapeCommands(out: unknown[], source: readonly unknown[], mapper: Scale9Mapper): void;
|
|
4
|
+
export declare const defaultCanvasScale9ShapeRenderer: Scene2DRenderer;
|
|
5
|
+
//# sourceMappingURL=canvasScale9Shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasScale9Shape.d.ts","sourceRoot":"","sources":["../src/canvasScale9Shape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAEf,aAAa,EACb,YAAY,EAEb,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAsBhG;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAsEnH;AAED,eAAO,MAAM,gCAAgC,EAAE,eAG9C,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { noopRendererData } from '@flighthq/render';
|
|
2
|
+
import { drawCanvasScene2D } from './canvasNode2D';
|
|
3
|
+
import { buildScale9Mapper } from './canvasScale9Mapper';
|
|
4
|
+
import { renderCanvasShapeCommands } from './canvasShape';
|
|
5
|
+
import { setCanvasTransform } from './canvasTransform';
|
|
6
|
+
const _remappedCommands = [];
|
|
7
|
+
const _remappedPathData = [];
|
|
8
|
+
export function drawCanvasScale9Shape(state, renderProxy) {
|
|
9
|
+
drawCanvasScene2D(state, renderProxy);
|
|
10
|
+
const source = renderProxy.source;
|
|
11
|
+
const { commands, scale9Grid } = source.data;
|
|
12
|
+
if (commands.length === 0)
|
|
13
|
+
return;
|
|
14
|
+
const context = state.context;
|
|
15
|
+
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
16
|
+
context.globalAlpha = renderProxy.alpha;
|
|
17
|
+
const { scaleX, scaleY } = source;
|
|
18
|
+
const mapper = buildScale9Mapper(commands, scale9Grid, scaleX, scaleY);
|
|
19
|
+
if (mapper === null) {
|
|
20
|
+
setCanvasTransform(state, context, renderProxy.transform2D);
|
|
21
|
+
renderCanvasShapeCommands(context, commands);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
applyStrippedTransform(state, context, renderProxy.transform2D, scaleX, scaleY);
|
|
25
|
+
mapCanvasScale9ShapeCommands(_remappedCommands, commands, mapper);
|
|
26
|
+
renderCanvasShapeCommands(context, _remappedCommands);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function mapCanvasScale9ShapeCommands(out, source, mapper) {
|
|
30
|
+
if (out !== source) {
|
|
31
|
+
out.length = source.length;
|
|
32
|
+
for (let k = 0; k < source.length; k++)
|
|
33
|
+
out[k] = source[k];
|
|
34
|
+
}
|
|
35
|
+
let i = 0;
|
|
36
|
+
while (i < out.length) {
|
|
37
|
+
const key = out[i];
|
|
38
|
+
const argCount = out[i + 1];
|
|
39
|
+
switch (key) {
|
|
40
|
+
case 'moveTo':
|
|
41
|
+
case 'lineTo':
|
|
42
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
43
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
44
|
+
break;
|
|
45
|
+
case 'curveTo':
|
|
46
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
47
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
48
|
+
out[i + 4] = mapper.mapX(out[i + 4]);
|
|
49
|
+
out[i + 5] = mapper.mapY(out[i + 5]);
|
|
50
|
+
break;
|
|
51
|
+
case 'cubicCurveTo':
|
|
52
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
53
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
54
|
+
out[i + 4] = mapper.mapX(out[i + 4]);
|
|
55
|
+
out[i + 5] = mapper.mapY(out[i + 5]);
|
|
56
|
+
out[i + 6] = mapper.mapX(out[i + 6]);
|
|
57
|
+
out[i + 7] = mapper.mapY(out[i + 7]);
|
|
58
|
+
break;
|
|
59
|
+
case 'drawRectangle':
|
|
60
|
+
case 'drawEllipse': {
|
|
61
|
+
const x = out[i + 2];
|
|
62
|
+
const y = out[i + 3];
|
|
63
|
+
const w = out[i + 4];
|
|
64
|
+
const h = out[i + 5];
|
|
65
|
+
const mx = mapper.mapX(x);
|
|
66
|
+
const my = mapper.mapY(y);
|
|
67
|
+
out[i + 2] = mx;
|
|
68
|
+
out[i + 3] = my;
|
|
69
|
+
out[i + 4] = mapper.mapX(x + w) - mx;
|
|
70
|
+
out[i + 5] = mapper.mapY(y + h) - my;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case 'drawRoundRectangle': {
|
|
74
|
+
const x = out[i + 2];
|
|
75
|
+
const y = out[i + 3];
|
|
76
|
+
const w = out[i + 4];
|
|
77
|
+
const h = out[i + 5];
|
|
78
|
+
const mx = mapper.mapX(x);
|
|
79
|
+
const my = mapper.mapY(y);
|
|
80
|
+
out[i + 2] = mx;
|
|
81
|
+
out[i + 3] = my;
|
|
82
|
+
out[i + 4] = mapper.mapX(x + w) - mx;
|
|
83
|
+
out[i + 5] = mapper.mapY(y + h) - my;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'drawCircle':
|
|
87
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
88
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
89
|
+
break;
|
|
90
|
+
case 'drawPath':
|
|
91
|
+
remapPathData(_remappedPathData, out[i + 3], out[i + 2], mapper);
|
|
92
|
+
out[i + 3] = _remappedPathData;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
i += argCount + 2;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export const defaultCanvasScale9ShapeRenderer = {
|
|
99
|
+
createData: noopRendererData,
|
|
100
|
+
submit: drawCanvasScale9Shape,
|
|
101
|
+
};
|
|
102
|
+
function applyStrippedTransform(state, context, t, scaleX, scaleY) {
|
|
103
|
+
const a = scaleX !== 0 ? t.a / scaleX : t.a;
|
|
104
|
+
const b = scaleX !== 0 ? t.b / scaleX : t.b;
|
|
105
|
+
const c = scaleY !== 0 ? t.c / scaleY : t.c;
|
|
106
|
+
const d = scaleY !== 0 ? t.d / scaleY : t.d;
|
|
107
|
+
if (state.roundPixels) {
|
|
108
|
+
context.setTransform(a, b, c, d, Math.fround(t.tx), Math.fround(t.ty));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
context.setTransform(a, b, c, d, t.tx, t.ty);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function remapPathData(out, source, cmds, mapper) {
|
|
115
|
+
if (out !== source) {
|
|
116
|
+
out.length = source.length;
|
|
117
|
+
for (let k = 0; k < source.length; k++)
|
|
118
|
+
out[k] = source[k];
|
|
119
|
+
}
|
|
120
|
+
let di = 0;
|
|
121
|
+
for (const pc of cmds) {
|
|
122
|
+
switch (pc) {
|
|
123
|
+
case 1: // MOVE_TO [x, y]
|
|
124
|
+
case 2: // LINE_TO [x, y]
|
|
125
|
+
out[di] = mapper.mapX(out[di]);
|
|
126
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
127
|
+
di += 2;
|
|
128
|
+
break;
|
|
129
|
+
case 3: // CURVE_TO [cx, cy, ax, ay]
|
|
130
|
+
out[di] = mapper.mapX(out[di]);
|
|
131
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
132
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
133
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
134
|
+
di += 4;
|
|
135
|
+
break;
|
|
136
|
+
case 4: // WIDE_MOVE_TO [?, ?, x, y]
|
|
137
|
+
case 5: // WIDE_LINE_TO [?, ?, x, y]
|
|
138
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
139
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
140
|
+
di += 4;
|
|
141
|
+
break;
|
|
142
|
+
case 6: // CUBIC_CURVE_TO [cx1, cy1, cx2, cy2, ax, ay]
|
|
143
|
+
out[di] = mapper.mapX(out[di]);
|
|
144
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
145
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
146
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
147
|
+
out[di + 4] = mapper.mapX(out[di + 4]);
|
|
148
|
+
out[di + 5] = mapper.mapY(out[di + 5]);
|
|
149
|
+
di += 6;
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=canvasScale9Shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasScale9Shape.js","sourceRoot":"","sources":["../src/canvasScale9Shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CanvasRenderState, Scene2DRenderer, RenderProxy2D } from '@flighthq/types';
|
|
2
|
+
export declare function drawCanvasShape(state: CanvasRenderState, renderProxy: RenderProxy2D): void;
|
|
3
|
+
export declare function renderCanvasShapeCommands(context: CanvasRenderingContext2D, commands: unknown[]): void;
|
|
4
|
+
export declare const defaultCanvasShapeRenderer: Scene2DRenderer;
|
|
5
|
+
//# sourceMappingURL=canvasShape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasShape.d.ts","sourceRoot":"","sources":["../src/canvasShape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,eAAe,EAAE,aAAa,EAAS,MAAM,iBAAiB,CAAC;AAMtH,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAa1F;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CActG;AAED,eAAO,MAAM,0BAA0B,EAAE,eAGxC,CAAC"}
|