@cyanheads/pixoo-mcp-server 1.2.1 → 1.3.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/AGENTS.md +17 -10
- package/CLAUDE.md +17 -10
- package/Dockerfile +63 -46
- package/README.md +16 -12
- package/changelog/1.2.x/1.2.2.md +40 -0
- package/changelog/1.3.x/1.3.0.md +35 -0
- package/dist/config/server-config.d.ts +1 -1
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +6 -1
- package/dist/config/server-config.js.map +1 -1
- package/dist/mcp-server/resources/definitions/pixoo-design-guide.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/pixoo-design-guide.resource.js +4 -1
- package/dist/mcp-server/resources/definitions/pixoo-design-guide.resource.js.map +1 -1
- package/dist/mcp-server/tools/asset-source-schema.d.ts +13 -0
- package/dist/mcp-server/tools/asset-source-schema.d.ts.map +1 -0
- package/dist/mcp-server/tools/asset-source-schema.js +25 -0
- package/dist/mcp-server/tools/asset-source-schema.js.map +1 -0
- package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.d.ts +139 -55
- package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.js +182 -79
- package/dist/mcp-server/tools/definitions/pixoo-compose-scene.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.js +14 -6
- package/dist/mcp-server/tools/definitions/pixoo-design-brief.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-discover-devices.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-discover-devices.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-discover-devices.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.d.ts +8 -9
- package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.js +50 -29
- package/dist/mcp-server/tools/definitions/pixoo-display-text.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-overlay-text.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-overlay-text.tool.js +1 -3
- package/dist/mcp-server/tools/definitions/pixoo-overlay-text.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.d.ts +30 -1
- package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.js +106 -28
- package/dist/mcp-server/tools/definitions/pixoo-push-image.tool.js.map +1 -1
- package/dist/mcp-server/tools/finish-schema.d.ts +28 -0
- package/dist/mcp-server/tools/finish-schema.d.ts.map +1 -0
- package/dist/mcp-server/tools/finish-schema.js +42 -0
- package/dist/mcp-server/tools/finish-schema.js.map +1 -0
- package/dist/renderer/finish.d.ts +34 -0
- package/dist/renderer/finish.d.ts.map +1 -0
- package/dist/renderer/finish.js +62 -0
- package/dist/renderer/finish.js.map +1 -0
- package/dist/renderer/keyframes.d.ts +5 -1
- package/dist/renderer/keyframes.d.ts.map +1 -1
- package/dist/renderer/keyframes.js +16 -2
- package/dist/renderer/keyframes.js.map +1 -1
- package/dist/renderer/remote-image.d.ts +9 -7
- package/dist/renderer/remote-image.d.ts.map +1 -1
- package/dist/renderer/remote-image.js +15 -23
- package/dist/renderer/remote-image.js.map +1 -1
- package/dist/renderer/scene-renderer.d.ts +59 -14
- package/dist/renderer/scene-renderer.d.ts.map +1 -1
- package/dist/renderer/scene-renderer.js +204 -66
- package/dist/renderer/scene-renderer.js.map +1 -1
- package/dist/renderer/text-engine.d.ts +40 -11
- package/dist/renderer/text-engine.d.ts.map +1 -1
- package/dist/renderer/text-engine.js +75 -40
- package/dist/renderer/text-engine.js.map +1 -1
- package/dist/services/pixoo/pixoo-service.d.ts.map +1 -1
- package/dist/services/pixoo/pixoo-service.js +9 -33
- package/dist/services/pixoo/pixoo-service.js.map +1 -1
- package/package.json +3 -3
- package/server.json +3 -3
|
@@ -4,51 +4,115 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from 'node:fs/promises';
|
|
6
6
|
import { invalidParams, notFound } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
import { Canvas, downsampleSprite, drawText, FONT_3x5,
|
|
7
|
+
import { Canvas, downsampleSprite, drawText, FONT_3x5, lerpColor, loadImage, measureText, renderSprite, renderSvgPath, resolveColor, } from '@cyanheads/pixoo-toolkit';
|
|
8
|
+
import { finishFrame } from './finish.js';
|
|
8
9
|
import { ICONS } from './icons.js';
|
|
9
10
|
import { compileEffect, getKeyframeValue, interpolateColorKeyframe, } from './keyframes.js';
|
|
10
|
-
import {
|
|
11
|
-
import { drawStyledText, resolveX, resolveY, } from './text-engine.js';
|
|
11
|
+
import { fetchRemoteImageBytes, isRemoteSource } from './remote-image.js';
|
|
12
|
+
import { boxFits, drawStyledText, FONT_FACES, resolveX, resolveY, } from './text-engine.js';
|
|
12
13
|
import { PALETTES, THEMES } from './themes.js';
|
|
14
|
+
/** The cache key of a sprite sheet: its path and grid, which fix the downsample. */
|
|
15
|
+
function spriteKey(el) {
|
|
16
|
+
return `${el.path}:${el.cols}:${el.rows}`;
|
|
17
|
+
}
|
|
13
18
|
/**
|
|
14
19
|
* Confirm a local image or sprite-sheet path is readable before the toolkit's
|
|
15
20
|
* loader reaches it — the loader fails a missing file with an unclassified error.
|
|
16
21
|
*
|
|
17
|
-
* @throws {McpError} NotFound with `reason: 'asset_not_found'` when the path is
|
|
18
|
-
*
|
|
22
|
+
* @throws {McpError} NotFound with `reason: 'asset_not_found'` when the path is missing
|
|
23
|
+
* or unreadable; the framework fills in the calling tool's declared recovery.
|
|
19
24
|
*/
|
|
20
25
|
async function assertReadableAsset(assetPath, label) {
|
|
21
26
|
try {
|
|
22
27
|
await fs.access(assetPath, fs.constants.R_OK);
|
|
23
28
|
}
|
|
24
29
|
catch (err) {
|
|
25
|
-
throw notFound(`${label} not found or unreadable: "${assetPath}".`, {
|
|
26
|
-
reason: 'asset_not_found',
|
|
27
|
-
path: assetPath,
|
|
28
|
-
recovery: { hint: 'Pass an absolute path to an existing, readable image file.' },
|
|
29
|
-
}, { cause: err });
|
|
30
|
+
throw notFound(`${label} not found or unreadable: "${assetPath}".`, { reason: 'asset_not_found', path: assetPath }, { cause: err });
|
|
30
31
|
}
|
|
31
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* The message for an image source that was read but did not decode: the source as the
|
|
35
|
+
* caller passed it, then the decoder's reason. Only the reason's first line is kept —
|
|
36
|
+
* libvips repeats itself across several lines on a corrupt header.
|
|
37
|
+
*/
|
|
38
|
+
export function decodeFailureMessage(label, source, err) {
|
|
39
|
+
const reason = (err instanceof Error ? err.message : String(err)).split('\n')[0];
|
|
40
|
+
return `${label} "${source}" could not be decoded: ${reason}.`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The error for an image source or sprite sheet that was read but did not decode — a
|
|
44
|
+
* text file, an HTML page, a truncated download. The framework fills in the calling
|
|
45
|
+
* tool's declared `invalid_image` recovery.
|
|
46
|
+
*/
|
|
47
|
+
function undecodableAsset(el, err) {
|
|
48
|
+
const [label, field, value] = el.type === 'image' ? ['Image source', 'source', el.source] : ['Sprite sheet', 'path', el.path];
|
|
49
|
+
return invalidParams(decodeFailureMessage(label, value, err), { reason: 'invalid_image', [field]: value }, { cause: err });
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* An image source as `loadImage` takes it: a URL's fetched bytes, or a local path
|
|
53
|
+
* confirmed readable.
|
|
54
|
+
*/
|
|
55
|
+
async function readImageSource(source, ctx) {
|
|
56
|
+
if (isRemoteSource(source))
|
|
57
|
+
return fetchRemoteImageBytes(source, ctx);
|
|
58
|
+
await assertReadableAsset(source, 'Image file');
|
|
59
|
+
return source;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Downsample a sprite element's sheet to its grid. The sheet must be a local file;
|
|
63
|
+
* a URL is refused without being fetched.
|
|
64
|
+
*/
|
|
65
|
+
async function loadSpriteSheet(el) {
|
|
66
|
+
if (isRemoteSource(el.path)) {
|
|
67
|
+
throw notFound(`Sprite sheet path "${el.path}" is a URL; sprite sheets take an absolute local path.`, { reason: 'asset_not_found', path: el.path });
|
|
68
|
+
}
|
|
69
|
+
await assertReadableAsset(el.path, 'Sprite sheet');
|
|
70
|
+
return downsampleSprite(el.path, el.cols, el.rows).catch((err) => {
|
|
71
|
+
throw undecodableAsset(el, err);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The in-flight load for `key`, started by `load` on first request. Every caller
|
|
76
|
+
* awaits the same promise, so a failed load rejects each of them with one error.
|
|
77
|
+
*/
|
|
78
|
+
function loadOnce(loads, key, load) {
|
|
79
|
+
let pending = loads.get(key);
|
|
80
|
+
if (!pending) {
|
|
81
|
+
pending = load();
|
|
82
|
+
loads.set(key, pending);
|
|
83
|
+
}
|
|
84
|
+
return pending;
|
|
85
|
+
}
|
|
32
86
|
/**
|
|
33
87
|
* Preload all async assets referenced in elements. Images load onto a `size` canvas,
|
|
34
88
|
* the scene's own, so an image with no `w`/`h` fits the display.
|
|
35
89
|
*
|
|
90
|
+
* Each distinct load runs once per call, however many elements share it: a URL is
|
|
91
|
+
* fetched once, a sprite sheet decodes once per grid, and an image decodes once per
|
|
92
|
+
* placement — source, fit, kernel, position, and size, all of which `loadImage` bakes
|
|
93
|
+
* into its canvas. `loadImage` decodes and places in one call, so a source placed two
|
|
94
|
+
* ways decodes twice. An image's `finish` runs once per placement and finish, on the
|
|
95
|
+
* placement's canvas, which it never mutates: elements differing only in `finish` share
|
|
96
|
+
* the decode and nothing after it.
|
|
97
|
+
*
|
|
36
98
|
* `ctx` is threaded through so a remote image fetch correlates to the originating
|
|
37
99
|
* request in logs and traces, and stops when that request is cancelled.
|
|
100
|
+
*
|
|
101
|
+
* @throws {McpError} NotFound with `reason: 'asset_not_found'` for a missing or
|
|
102
|
+
* unreadable path, a sprite path given as a URL, or a URL that cannot be fetched.
|
|
103
|
+
* @throws {McpError} InvalidParams with `reason: 'invalid_image'` for an image source
|
|
104
|
+
* or sprite sheet that was read but did not decode.
|
|
105
|
+
* @throws {Error} The toolkit's `Unknown color` error for an unresolvable `finish`
|
|
106
|
+
* palette entry.
|
|
38
107
|
*/
|
|
39
108
|
export async function preloadAssets(elements, ctx, size) {
|
|
40
109
|
const cache = { images: new Map(), sprites: new Map() };
|
|
110
|
+
const sourceLoads = new Map();
|
|
111
|
+
const imageLoads = new Map();
|
|
112
|
+
const sheetLoads = new Map();
|
|
41
113
|
await Promise.all(elements.map(async (el) => {
|
|
42
114
|
if (el.type === 'image') {
|
|
43
|
-
const
|
|
44
|
-
// The toolkit's loadImage reads from disk, so a remote source is
|
|
45
|
-
// staged to a temp PNG first and unlinked once it has been read.
|
|
46
|
-
const remote = isRemoteSource(source);
|
|
47
|
-
if (!remote)
|
|
48
|
-
await assertReadableAsset(source, 'Image file');
|
|
49
|
-
const tmpPathToCleanup = remote ? await fetchRemoteImageToTempPng(source, ctx) : undefined;
|
|
50
|
-
const localPath = tmpPathToCleanup ?? source;
|
|
51
|
-
const loadOpts = {
|
|
115
|
+
const placement = {
|
|
52
116
|
size,
|
|
53
117
|
fit: el.fit ?? 'contain',
|
|
54
118
|
kernel: el.kernel ?? 'nearest',
|
|
@@ -56,22 +120,25 @@ export async function preloadAssets(elements, ctx, size) {
|
|
|
56
120
|
y: typeof el.y === 'number' ? el.y : 0,
|
|
57
121
|
};
|
|
58
122
|
if (el.w !== undefined)
|
|
59
|
-
|
|
123
|
+
placement.width = el.w;
|
|
60
124
|
if (el.h !== undefined)
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
125
|
+
placement.height = el.h;
|
|
126
|
+
const placed = JSON.stringify([el.source, placement]);
|
|
127
|
+
const load = () => loadOnce(imageLoads, placed, async () => {
|
|
128
|
+
const image = await loadOnce(sourceLoads, el.source, () => readImageSource(el.source, ctx));
|
|
129
|
+
return loadImage(image, placement).catch((err) => {
|
|
130
|
+
throw undecodableAsset(el, err);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
const { finish } = el;
|
|
134
|
+
const canvas = await (finish
|
|
135
|
+
? loadOnce(imageLoads, JSON.stringify([el.source, placement, finish]), async () => finishFrame(await load(), finish))
|
|
136
|
+
: load());
|
|
66
137
|
cache.images.set(el, canvas);
|
|
67
138
|
}
|
|
68
139
|
else if (el.type === 'sprite') {
|
|
69
|
-
const key =
|
|
70
|
-
|
|
71
|
-
await assertReadableAsset(el.path, 'Sprite sheet');
|
|
72
|
-
const sprite = await downsampleSprite(el.path, el.cols, el.rows);
|
|
73
|
-
cache.sprites.set(key, sprite);
|
|
74
|
-
}
|
|
140
|
+
const key = spriteKey(el);
|
|
141
|
+
cache.sprites.set(key, await loadOnce(sheetLoads, key, () => loadSpriteSheet(el)));
|
|
75
142
|
}
|
|
76
143
|
}));
|
|
77
144
|
return cache;
|
|
@@ -87,7 +154,7 @@ export function applyBackground(canvas, bg) {
|
|
|
87
154
|
}
|
|
88
155
|
return;
|
|
89
156
|
}
|
|
90
|
-
if (
|
|
157
|
+
if (bg.theme) {
|
|
91
158
|
const theme = THEMES[bg.theme];
|
|
92
159
|
if (!theme) {
|
|
93
160
|
throw invalidParams(`Unknown theme "${bg.theme}". Valid themes: ${Object.keys(THEMES).join(', ')}.`);
|
|
@@ -101,7 +168,7 @@ export function applyBackground(canvas, bg) {
|
|
|
101
168
|
}
|
|
102
169
|
return;
|
|
103
170
|
}
|
|
104
|
-
if (
|
|
171
|
+
if (bg.gradient) {
|
|
105
172
|
const grad = bg.gradient;
|
|
106
173
|
const from_ = resolveColor(grad.from);
|
|
107
174
|
const to_ = resolveColor(grad.to);
|
|
@@ -164,8 +231,81 @@ function renderIconRamp(canvas, paths, svgViewBox, targetRect, stop) {
|
|
|
164
231
|
* The element fits when the box lies wholly on the canvas.
|
|
165
232
|
*/
|
|
166
233
|
function placedEntry(element, type, box, canvas) {
|
|
167
|
-
|
|
168
|
-
|
|
234
|
+
return { element, type, box, fits: boxFits(box, canvas.width, canvas.height), action: 'none' };
|
|
235
|
+
}
|
|
236
|
+
/** The element's stroke, each option at its default when omitted. */
|
|
237
|
+
function strokeOf(el) {
|
|
238
|
+
return { width: el.strokeWidth ?? 1, antialias: el.antialias ?? false };
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Whether the toolkit draws `stroke` as a band rather than a 1px Bresenham line or
|
|
242
|
+
* midpoint circle, whose pixels stay within the endpoints or the diameter.
|
|
243
|
+
*/
|
|
244
|
+
function isBand({ width, antialias }) {
|
|
245
|
+
return width > 1 || antialias;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* The box of every pixel a band line lights, on the canvas or off it — the toolkit's stroke
|
|
249
|
+
* geometry: the major axis steps from one endpoint's pixel to the other's, and each step
|
|
250
|
+
* covers `width/2 · √(1 + slope²)` either side of the centerline. Aliased, the endpoints
|
|
251
|
+
* are floored and a pixel lights when its center lies in that half-open span; anti-aliased,
|
|
252
|
+
* the endpoints are exact and a pixel lights when it overlaps the span at all.
|
|
253
|
+
*/
|
|
254
|
+
function bandLineBox(ex0, ey0, ex1, ey1, { width, antialias }) {
|
|
255
|
+
const snap = antialias ? (v) => v : Math.floor;
|
|
256
|
+
const [x0, y0, x1, y1] = [snap(ex0), snap(ey0), snap(ex1), snap(ey1)];
|
|
257
|
+
const xMajor = Math.abs(x1 - x0) >= Math.abs(y1 - y0);
|
|
258
|
+
const [a0, b0, a1, b1] = xMajor ? [x0, y0, x1, y1] : [y0, x0, y1, x1];
|
|
259
|
+
const slope = a1 === a0 ? 0 : (b1 - b0) / (a1 - a0);
|
|
260
|
+
const half = (width / 2) * Math.sqrt(1 + slope * slope);
|
|
261
|
+
const first = Math.floor(Math.min(a0, a1));
|
|
262
|
+
const last = Math.floor(Math.max(a0, a1));
|
|
263
|
+
// The centerline is straight, so its first and last steps bound it
|
|
264
|
+
const [m0, m1] = [b0 + (first - a0) * slope, b0 + (last - a0) * slope];
|
|
265
|
+
const lo = Math.min(m0, m1) - half;
|
|
266
|
+
const hi = Math.max(m0, m1) + half;
|
|
267
|
+
const minorFirst = antialias ? Math.floor(lo - 0.5) + 1 : Math.ceil(lo);
|
|
268
|
+
const minorSpan = (antialias ? Math.ceil(hi + 0.5) : Math.ceil(hi)) - minorFirst;
|
|
269
|
+
const majorSpan = last - first + 1;
|
|
270
|
+
return xMajor
|
|
271
|
+
? { x: first, y: minorFirst, w: majorSpan, h: minorSpan }
|
|
272
|
+
: { x: minorFirst, y: first, w: minorSpan, h: majorSpan };
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* The box of every pixel a band ring lights: each pixel center nearer the circle's center
|
|
276
|
+
* than `radius + width/2`, or `radius + width/2 + ½` anti-aliased, where the band's
|
|
277
|
+
* coverage runs out.
|
|
278
|
+
*/
|
|
279
|
+
function bandRingBox(cx, cy, radius, stroke) {
|
|
280
|
+
const reach = radius + stroke.width / 2 + (stroke.antialias ? 0.5 : 0);
|
|
281
|
+
const x = Math.floor(cx - reach) + 1;
|
|
282
|
+
const y = Math.floor(cy - reach) + 1;
|
|
283
|
+
return { x, y, w: Math.ceil(cx + reach) - x, h: Math.ceil(cy + reach) - y };
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Composite an element's own scratch layer onto the canvas. `normal` lands each pixel
|
|
287
|
+
* source-over at its alpha × `opacity`, so a soft edge keeps its falloff as the element
|
|
288
|
+
* fades. Any other mode scales the layer's alpha by `opacity`, then blits the layer in
|
|
289
|
+
* that mode.
|
|
290
|
+
*/
|
|
291
|
+
function compositeLayer(canvas, layer, opacity, blend) {
|
|
292
|
+
const fade = opacity / 100;
|
|
293
|
+
if (blend === 'normal') {
|
|
294
|
+
for (let y = 0; y < layer.height; y++) {
|
|
295
|
+
for (let x = 0; x < layer.width; x++) {
|
|
296
|
+
const [r, g, b, a] = layer.getPixelRgba(x, y);
|
|
297
|
+
if (a > 0)
|
|
298
|
+
canvas.blendPixel(x, y, [r, g, b], (a / 255) * fade);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (fade < 1) {
|
|
304
|
+
const { buffer } = layer;
|
|
305
|
+
for (let i = 3; i < buffer.length; i += 4)
|
|
306
|
+
buffer[i] = Math.round((buffer[i] ?? 0) * fade);
|
|
307
|
+
}
|
|
308
|
+
canvas.blit(layer, 0, 0, { mode: blend });
|
|
169
309
|
}
|
|
170
310
|
/** Render a single element onto a canvas at a specific frame. */
|
|
171
311
|
export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets, layoutEntries) {
|
|
@@ -173,7 +313,7 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
173
313
|
const kf = el.animate
|
|
174
314
|
? el.animate
|
|
175
315
|
: el.effect
|
|
176
|
-
? compileEffect(el.effect.name, el.effect, totalFrames)
|
|
316
|
+
? compileEffect(el.effect.name, el.effect, totalFrames, elIdx)
|
|
177
317
|
: undefined;
|
|
178
318
|
const visible = kf
|
|
179
319
|
? Boolean(getKeyframeValue(kf, 'visible', frameIdx, el.visible ?? true))
|
|
@@ -188,8 +328,9 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
188
328
|
// A keyframed `color` stands in for the element's own `color` on this frame.
|
|
189
329
|
const colorFrames = kf?.['color'];
|
|
190
330
|
const keyframedColor = colorFrames ? interpolateColorKeyframe(colorFrames, frameIdx) : undefined;
|
|
191
|
-
//
|
|
192
|
-
const
|
|
331
|
+
// Under opacity or a blend mode, the element draws on its own layer, composited at the end
|
|
332
|
+
const blend = el.blend ?? 'normal';
|
|
333
|
+
const target = opacity < 100 || blend !== 'normal' ? new Canvas(canvas.width) : canvas;
|
|
193
334
|
switch (el.type) {
|
|
194
335
|
case 'text': {
|
|
195
336
|
// A copy: the per-frame color must not stick to the caller's style object.
|
|
@@ -197,10 +338,10 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
197
338
|
const color = keyframedColor ?? el.color;
|
|
198
339
|
if (!style.color && color)
|
|
199
340
|
style.color = color;
|
|
200
|
-
const fontVariant = el.font
|
|
341
|
+
const fontVariant = el.font ?? 'standard';
|
|
201
342
|
const px = el.x ?? 0;
|
|
202
343
|
const py = el.y ?? 0;
|
|
203
|
-
const font = fontVariant
|
|
344
|
+
const font = FONT_FACES[fontVariant];
|
|
204
345
|
const scale = style.scale ?? 1;
|
|
205
346
|
const textW = measureText(el.text, { font, scale });
|
|
206
347
|
const textH = font.height * scale;
|
|
@@ -282,7 +423,9 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
282
423
|
target.fillRect(x, y, el.w, el.h, resolveColor(fill));
|
|
283
424
|
}
|
|
284
425
|
if (el.borderColor) {
|
|
285
|
-
target.drawRect(x, y, el.w, el.h, resolveColor(el.borderColor)
|
|
426
|
+
target.drawRect(x, y, el.w, el.h, resolveColor(el.borderColor), {
|
|
427
|
+
width: el.strokeWidth ?? 1,
|
|
428
|
+
});
|
|
286
429
|
}
|
|
287
430
|
layoutEntries.push(placedEntry(elIdx, 'rect', { x, y, w: el.w, h: el.h }, canvas));
|
|
288
431
|
break;
|
|
@@ -292,15 +435,18 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
292
435
|
const cy = el.cy + dy;
|
|
293
436
|
const colorSpec = keyframedColor ?? el.color;
|
|
294
437
|
const color = colorSpec ? resolveColor(colorSpec) : [255, 255, 255];
|
|
438
|
+
const stroke = strokeOf(el);
|
|
295
439
|
if (el.fill !== false) {
|
|
296
440
|
target.fillCircle(cx, cy, el.radius, color);
|
|
297
441
|
}
|
|
298
442
|
else {
|
|
299
|
-
target.drawCircle(cx, cy, el.radius, color);
|
|
443
|
+
target.drawCircle(cx, cy, el.radius, color, stroke);
|
|
300
444
|
}
|
|
301
|
-
// The circle covers its center pixel plus `radius` on each side.
|
|
445
|
+
// The circle covers its center pixel plus `radius` on each side; a band ring reaches past it.
|
|
302
446
|
const diameter = el.radius * 2 + 1;
|
|
303
|
-
const box =
|
|
447
|
+
const box = el.fill === false && isBand(stroke)
|
|
448
|
+
? bandRingBox(cx, cy, el.radius, stroke)
|
|
449
|
+
: { x: cx - el.radius, y: cy - el.radius, w: diameter, h: diameter };
|
|
304
450
|
layoutEntries.push(placedEntry(elIdx, 'circle', box, canvas));
|
|
305
451
|
break;
|
|
306
452
|
}
|
|
@@ -311,14 +457,17 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
311
457
|
const y0 = el.y0 + dy;
|
|
312
458
|
const x1 = el.x1 + dx;
|
|
313
459
|
const y1 = el.y1 + dy;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
460
|
+
const stroke = strokeOf(el);
|
|
461
|
+
target.drawLine(x0, y0, x1, y1, color, stroke);
|
|
462
|
+
// A 1px line draws both endpoints, so it spans one pixel more than their distance.
|
|
463
|
+
const box = isBand(stroke)
|
|
464
|
+
? bandLineBox(x0, y0, x1, y1, stroke)
|
|
465
|
+
: {
|
|
466
|
+
x: Math.min(x0, x1),
|
|
467
|
+
y: Math.min(y0, y1),
|
|
468
|
+
w: Math.abs(x1 - x0) + 1,
|
|
469
|
+
h: Math.abs(y1 - y0) + 1,
|
|
470
|
+
};
|
|
322
471
|
layoutEntries.push(placedEntry(elIdx, 'line', box, canvas));
|
|
323
472
|
break;
|
|
324
473
|
}
|
|
@@ -441,8 +590,7 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
441
590
|
break;
|
|
442
591
|
}
|
|
443
592
|
case 'sprite': {
|
|
444
|
-
const
|
|
445
|
-
const sprite = assets.sprites.get(key);
|
|
593
|
+
const sprite = assets.sprites.get(spriteKey(el));
|
|
446
594
|
if (sprite) {
|
|
447
595
|
const scale = el.scale ?? 1;
|
|
448
596
|
const spriteW = sprite.cols * scale;
|
|
@@ -468,18 +616,8 @@ export function renderElement(canvas, el, elIdx, frameIdx, totalFrames, assets,
|
|
|
468
616
|
break;
|
|
469
617
|
}
|
|
470
618
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
const alpha = opacity / 100;
|
|
474
|
-
for (let py_ = 0; py_ < canvas.height; py_++) {
|
|
475
|
-
for (let px_ = 0; px_ < canvas.width; px_++) {
|
|
476
|
-
const [r, g, b, a] = target.getPixelRgba(px_, py_);
|
|
477
|
-
if (a > 0) {
|
|
478
|
-
canvas.blendPixel(px_, py_, [r, g, b], alpha);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
619
|
+
if (target !== canvas)
|
|
620
|
+
compositeLayer(canvas, target, opacity, blend);
|
|
483
621
|
}
|
|
484
622
|
/** Render a complete frame. */
|
|
485
623
|
export function renderFrame(frameIdx, totalFrames, background, elements, assets, size = 64) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-renderer.js","sourceRoot":"","sources":["../../src/renderer/scene-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scene-renderer.js","sourceRoot":"","sources":["../../src/renderer/scene-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,36 @@
|
|
|
2
2
|
* @fileoverview Styled text engine: gradient ramps, shadow, outline, scale, overflow handling.
|
|
3
3
|
* @module renderer/text-engine
|
|
4
4
|
*/
|
|
5
|
-
import { Canvas, type ColorLike } from '@cyanheads/pixoo-toolkit';
|
|
5
|
+
import { type BitmapFont, Canvas, type ColorLike } from '@cyanheads/pixoo-toolkit';
|
|
6
6
|
import { type GradientStop, type PaletteName } from './themes.js';
|
|
7
|
+
/** Font variants a text surface accepts. */
|
|
8
|
+
export declare const FONT_VARIANTS: readonly ['standard', 'compact', 'numerals'];
|
|
9
|
+
/** Font variant. */
|
|
10
|
+
export type FontVariant = (typeof FONT_VARIANTS)[number];
|
|
11
|
+
/**
|
|
12
|
+
* The toolkit face each variant draws with. `standard` (5×7) and `compact` (3×5) hold
|
|
13
|
+
* printable ASCII plus `° ← ↑ → ↓ ▲ ▼ ♥ · …`; `numerals` holds 11×18 digits on one
|
|
14
|
+
* 13-pixel advance plus space and `: . - + / % ° ?`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const FONT_FACES: Record<FontVariant, BitmapFont>;
|
|
17
|
+
/**
|
|
18
|
+
* The characters of `text` that `face` has no glyph for, each once, in order of first
|
|
19
|
+
* appearance. The face draws every one of them as its `?`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function missingGlyphs(text: string, face: BitmapFont): string[];
|
|
22
|
+
/** Names the `missing` characters and the characters the numerals face does draw. */
|
|
23
|
+
export declare function describeMissingNumerals(missing: string[]): string;
|
|
24
|
+
/**
|
|
25
|
+
* The notice naming the characters in `texts` that the standard and compact faces draw
|
|
26
|
+
* as `?`, grouped by element index, each once per element in order of first appearance;
|
|
27
|
+
* undefined when every character has a glyph. The two faces share one glyph set, so one
|
|
28
|
+
* check covers both. Numerals text never reaches here with a character outside its face,
|
|
29
|
+
* and every numerals glyph is also in that set.
|
|
30
|
+
*/
|
|
31
|
+
export declare function fallbackGlyphNotice(texts: ReadonlyArray<{
|
|
32
|
+
element: number;
|
|
33
|
+
text: string;
|
|
34
|
+
}>): string | undefined;
|
|
7
35
|
/** Text style options for the styled text engine. */
|
|
8
36
|
export interface TextStyle {
|
|
9
37
|
/** Explicit color when not using palette. */
|
|
@@ -17,25 +45,23 @@ export interface TextStyle {
|
|
|
17
45
|
/** Drop shadow behind the text. */
|
|
18
46
|
shadow?: boolean;
|
|
19
47
|
}
|
|
20
|
-
/** Font size variant. */
|
|
21
|
-
export type FontVariant = 'standard' | 'compact';
|
|
22
|
-
/** Overflow/fit mode for text rendering. */
|
|
23
|
-
export type OverflowMode = 'auto' | 'shrink' | 'scroll' | 'wrap' | 'truncate';
|
|
24
48
|
/** Layout report entry. */
|
|
25
49
|
export interface LayoutEntry {
|
|
26
|
-
action: 'none' | 'shrunk-to-compact' | 'scrolling'
|
|
50
|
+
action: 'none' | 'shrunk-to-compact' | 'scrolling';
|
|
27
51
|
box: {
|
|
28
52
|
x: number;
|
|
29
53
|
y: number;
|
|
30
54
|
w: number;
|
|
31
55
|
h: number;
|
|
32
56
|
};
|
|
33
|
-
element: number
|
|
57
|
+
element: number;
|
|
34
58
|
fits: boolean;
|
|
35
59
|
font?: FontVariant;
|
|
36
60
|
scale?: number;
|
|
37
61
|
type: string;
|
|
38
62
|
}
|
|
63
|
+
/** Whether `box` lies wholly on a `width` × `height` canvas, clear of all four edges. */
|
|
64
|
+
export declare function boxFits(box: LayoutEntry['box'], width: number, height: number): boolean;
|
|
39
65
|
/** Semantic alignment for x/y positioning. */
|
|
40
66
|
export type SemanticX = number | 'left' | 'center' | 'right';
|
|
41
67
|
export type SemanticY = number | 'top' | 'center' | 'bottom';
|
|
@@ -65,10 +91,13 @@ export declare function drawStyledText(canvas: Canvas, text: string, x: number,
|
|
|
65
91
|
h: number;
|
|
66
92
|
};
|
|
67
93
|
/**
|
|
68
|
-
* Render text with auto-fit logic:
|
|
94
|
+
* Render text with auto-fit logic: text too wide in the standard font falls back to
|
|
95
|
+
* compact when compact fits. Auto-fit never picks `numerals`; only a `fixedFont` does.
|
|
69
96
|
* A `fixedFont` pins the variant: the compact fallback is skipped, so text that
|
|
70
|
-
* overflows in it
|
|
71
|
-
*
|
|
97
|
+
* overflows in it overflows in that font. Scrolling is the caller's decision, so the
|
|
98
|
+
* entry's `action` is `none` or `shrunk-to-compact`.
|
|
99
|
+
* Returns the layout entry describing what was done: `fits` holds when the placed box
|
|
100
|
+
* lies wholly on the canvas.
|
|
72
101
|
*/
|
|
73
|
-
export declare function renderAutoFitText(canvas: Canvas, text: string, px: SemanticX, py: SemanticY, dx: number, dy: number, style: TextStyle,
|
|
102
|
+
export declare function renderAutoFitText(canvas: Canvas, text: string, px: SemanticX, py: SemanticY, dx: number, dy: number, style: TextStyle, elementIdx: number, fixedFont?: FontVariant): LayoutEntry;
|
|
74
103
|
//# sourceMappingURL=text-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-engine.d.ts","sourceRoot":"","sources":["../../src/renderer/text-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"text-engine.d.ts","sourceRoot":"","sources":["../../src/renderer/text-engine.ts"],"names":[],"mappings":"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"}
|