@amigo-labs/pincel-wasm 1.6.0 → 1.7.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/package.json +1 -1
- package/pincel_wasm.d.ts +219 -73
- package/pincel_wasm.js +261 -17
- package/pincel_wasm_bg.wasm +0 -0
package/package.json
CHANGED
package/pincel_wasm.d.ts
CHANGED
|
@@ -222,9 +222,10 @@ export class Document {
|
|
|
222
222
|
* stable across runs and monotonic. Returns the assigned id.
|
|
223
223
|
*
|
|
224
224
|
* Routes through the [`AddTileset`] command so the operation joins
|
|
225
|
-
* the undo / redo bus.
|
|
226
|
-
*
|
|
227
|
-
*
|
|
225
|
+
* the undo / redo bus. The tileset starts with one stored, fully
|
|
226
|
+
* transparent tile `0` (Aseprite's empty tile), so the first
|
|
227
|
+
* [`Document::add_tile`] returns id `1` and no user tile is written
|
|
228
|
+
* as the empty tile (docs/specs/tilemaps.md, Decisions 2026-10-29).
|
|
228
229
|
*
|
|
229
230
|
* Errors when `tile_w` or `tile_h` is zero, when the existing id
|
|
230
231
|
* space is exhausted (an existing tileset already uses `u32::MAX`),
|
|
@@ -291,6 +292,22 @@ export class Document {
|
|
|
291
292
|
* The emitted `dirty-rect` event covers the bbox in sprite space.
|
|
292
293
|
*/
|
|
293
294
|
applyEllipse(x0: number, y0: number, x1: number, y1: number, color: number, fill: boolean): void;
|
|
295
|
+
/**
|
|
296
|
+
* Fill the selection — or, without one, the active layer's cel on the
|
|
297
|
+
* current frame — with a dithered ramp from `foreground` at the drag
|
|
298
|
+
* start to `background` at the drag end, as one undo entry.
|
|
299
|
+
*
|
|
300
|
+
* - `line`: `[x0, y0, x1, y1]`, the drag's start and end sprite pixels.
|
|
301
|
+
* - `kind`: `linear` or `radial`.
|
|
302
|
+
* - `dither`: the Bayer matrix size `2`, `4` or `8`, or `0` for two
|
|
303
|
+
* hard bands split halfway.
|
|
304
|
+
* - `foreground` / `background`: `0xRRGGBBAA`.
|
|
305
|
+
*
|
|
306
|
+
* Returns `false` — and changes nothing — for a zero-length drag.
|
|
307
|
+
* Errors (and changes nothing) on a locked layer, a document without a
|
|
308
|
+
* paintable image layer, and an indexed or grayscale sprite.
|
|
309
|
+
*/
|
|
310
|
+
applyGradient(line: Int32Array, kind: string, dither: number, foreground: number, background: number): boolean;
|
|
294
311
|
/**
|
|
295
312
|
* Rasterize a 1-pixel-wide Bresenham line between sprite-space
|
|
296
313
|
* `(x0, y0)` and `(x1, y1)` with the given non-premultiplied RGBA
|
|
@@ -395,6 +412,23 @@ export class Document {
|
|
|
395
412
|
* lands when more tools ship.
|
|
396
413
|
*/
|
|
397
414
|
applyTool(tool_id: string, x: number, y: number, color: number): void;
|
|
415
|
+
/**
|
|
416
|
+
* Start a Pencil gesture with the Shading ink: every pixel the stroke
|
|
417
|
+
* touches whose color before the stroke is exactly entry `i` of `ramp`
|
|
418
|
+
* becomes entry `i + step`, clamped to the ramp; other colors stay.
|
|
419
|
+
* Each pixel changes at most once per gesture. Continue it with
|
|
420
|
+
* [`Self::stroke_to`] and close it with `endStroke` like any stroke.
|
|
421
|
+
*
|
|
422
|
+
* - `ramp`: the colors in palette order (`0xRRGGBBAA`), at least one.
|
|
423
|
+
* - `step`: `1` (left button, toward the end) or `-1` (right button,
|
|
424
|
+
* toward the start).
|
|
425
|
+
* - `size`, `shape`, `pixel_perfect`: as in [`Self::begin_stroke`].
|
|
426
|
+
*
|
|
427
|
+
* Errors (and starts nothing) for an empty ramp, another step, an
|
|
428
|
+
* unknown shape, a locked target layer, or a document without a
|
|
429
|
+
* paintable image layer.
|
|
430
|
+
*/
|
|
431
|
+
beginShadingStroke(ramp: Uint32Array, step: number, size: number, shape: string, pixel_perfect: boolean): void;
|
|
398
432
|
/**
|
|
399
433
|
* Start a Pencil / Eraser gesture on the active layer / current frame.
|
|
400
434
|
* Nothing is painted until the first [`Self::stroke_to`].
|
|
@@ -446,6 +480,14 @@ export class Document {
|
|
|
446
480
|
* event's `(x, y, width, height)` directly.
|
|
447
481
|
*/
|
|
448
482
|
composeDirty(frame: number, zoom: number, dx: number, dy: number, dw: number, dh: number): ComposeFrame;
|
|
483
|
+
/**
|
|
484
|
+
* [`Document::compose`] with the onion skin chosen per call: `onion =
|
|
485
|
+
* true` applies the configured onion skin (the same bytes as
|
|
486
|
+
* `compose`), `onion = false` leaves it out whatever
|
|
487
|
+
* [`Document::set_onion_skin`] says — for an animation preview that
|
|
488
|
+
* must never show ghosts (docs/specs/animation-preview.md).
|
|
489
|
+
*/
|
|
490
|
+
composeFrame(frame: number, zoom: number, onion: boolean): ComposeFrame;
|
|
449
491
|
/**
|
|
450
492
|
* Shrink the selection by `radius` pixels (may clear it).
|
|
451
493
|
*/
|
|
@@ -529,7 +571,7 @@ export class Document {
|
|
|
529
571
|
* a fresh `Uint8Array` copy. Errors surface the `pincel-core`
|
|
530
572
|
* message: an unknown format or tag, a scale outside 1–10, an output
|
|
531
573
|
* edge above 16384 px, a frameless sequence, or a sprite the renderer
|
|
532
|
-
* refuses (
|
|
574
|
+
* refuses (a corrupt cel or a broken linked cel).
|
|
533
575
|
*/
|
|
534
576
|
exportAnimation(format: string, tag: string | null | undefined, scale: number, loops: number): Uint8Array;
|
|
535
577
|
/**
|
|
@@ -549,12 +591,29 @@ export class Document {
|
|
|
549
591
|
* `meta.image` names `image_name` (default `"sheet.png"`). Errors
|
|
550
592
|
* surface the underlying `pincel-core` message: zero columns, an
|
|
551
593
|
* unknown tag, a frameless sprite, or anything the renderer refuses.
|
|
594
|
+
*
|
|
595
|
+
* `scale` (optional, default 1) upscales the sheet by an integer
|
|
596
|
+
* factor 1–10 with nearest-neighbour; the manifest and the `--data`
|
|
597
|
+
* JSON describe the scaled sheet (`meta.scale` stays `"1"`, as
|
|
598
|
+
* Aseprite's `--scale`). A scale outside 1–10 or a sheet edge above
|
|
599
|
+
* 16384 px is an error naming the limit (docs/specs/scaled-export.md).
|
|
552
600
|
*/
|
|
553
|
-
exportAtlas(columns: number, tag?: string | null, image_name?: string | null): AtlasExport;
|
|
601
|
+
exportAtlas(columns: number, tag?: string | null, image_name?: string | null, scale?: number | null): AtlasExport;
|
|
554
602
|
/**
|
|
555
603
|
* The palette as a GIMP `.gpl` file called `name` (alpha dropped).
|
|
604
|
+
*
|
|
605
|
+
* Deprecated: use [`Document::export_palette`] (`exportPalette`) with
|
|
606
|
+
* format `gpl`. Kept for the public npm API (spec §17.5).
|
|
556
607
|
*/
|
|
557
608
|
exportGpl(name: string): string;
|
|
609
|
+
/**
|
|
610
|
+
* The palette as a file: `format` is `gpl` (a GIMP palette called
|
|
611
|
+
* `name`), `hex` (Lospec), `pal` (JASC) or `png` (a one-row strip of
|
|
612
|
+
* `cell` × `cell` px swatches). `name` is used only by `gpl`, `cell`
|
|
613
|
+
* only by `png`. Errors for an unknown format, or a PNG strip of an
|
|
614
|
+
* empty palette or with `cell` 0.
|
|
615
|
+
*/
|
|
616
|
+
exportPalette(format: string, name: string, cell: number): Uint8Array;
|
|
558
617
|
/**
|
|
559
618
|
* Encode one frame as an RGBA8 PNG.
|
|
560
619
|
*
|
|
@@ -567,8 +626,13 @@ export class Document {
|
|
|
567
626
|
* `pincel-core` message: an out-of-range frame, or a sprite the
|
|
568
627
|
* renderer refuses (non-RGBA color mode, non-`Normal` blend mode,
|
|
569
628
|
* group layer, linked cel).
|
|
629
|
+
*
|
|
630
|
+
* `scale` (optional, default 1) upscales the PNG by an integer factor
|
|
631
|
+
* 1–10 with nearest-neighbour (docs/specs/scaled-export.md); scale 1
|
|
632
|
+
* and no scale give the same bytes. A scale outside 1–10 or an output
|
|
633
|
+
* edge above 16384 px is an error naming the limit.
|
|
570
634
|
*/
|
|
571
|
-
exportPng(frame: number): Uint8Array;
|
|
635
|
+
exportPng(frame: number, scale?: number | null): Uint8Array;
|
|
572
636
|
/**
|
|
573
637
|
* Flatten every visible layer into one image layer (hidden layers are
|
|
574
638
|
* dropped) and return the new layer's id, which also becomes the
|
|
@@ -589,8 +653,21 @@ export class Document {
|
|
|
589
653
|
/**
|
|
590
654
|
* Replace the palette with a GIMP `.gpl` file's colours and return
|
|
591
655
|
* how many it holds. One undo entry. Refused for indexed documents.
|
|
656
|
+
*
|
|
657
|
+
* Deprecated: use [`Document::import_palette`] (`importPalette`),
|
|
658
|
+
* which reads `.gpl` and the other palette formats. Kept for the
|
|
659
|
+
* public npm API (spec §17.5).
|
|
592
660
|
*/
|
|
593
661
|
importGpl(text: string): number;
|
|
662
|
+
/**
|
|
663
|
+
* Replace the palette with a palette file's colours and return how
|
|
664
|
+
* many it holds. The format — GIMP `.gpl`, Lospec `.hex`, JASC `.pal`
|
|
665
|
+
* or a PNG palette image — is detected from the content, not the file
|
|
666
|
+
* name (spec §3.7). One undo entry. Refused for indexed documents, for
|
|
667
|
+
* files without colours and above 256 colours; the palette is then
|
|
668
|
+
* unchanged.
|
|
669
|
+
*/
|
|
670
|
+
importPalette(bytes: Uint8Array): number;
|
|
594
671
|
/**
|
|
595
672
|
* Decode PNG bytes and add them as a new image layer named `name` on
|
|
596
673
|
* top of the stack, at the current frame, anchored at the canvas
|
|
@@ -938,6 +1015,13 @@ export class Document {
|
|
|
938
1015
|
* merge into one undo entry until [`Document::end_stroke`] seals it.
|
|
939
1016
|
*/
|
|
940
1017
|
setFrameDuration(frame: number, duration_ms: number): void;
|
|
1018
|
+
/**
|
|
1019
|
+
* Set the grid's offset (`x`, `y`) and cell size (`width` ×
|
|
1020
|
+
* `height`) as one undo entry; saved in the `.aseprite` header.
|
|
1021
|
+
* Errors, leaving the grid unchanged, for a cell size outside
|
|
1022
|
+
* 1–65535 or an offset outside −32768–32767.
|
|
1023
|
+
*/
|
|
1024
|
+
setGrid(x: number, y: number, width: number, height: number): void;
|
|
941
1025
|
/**
|
|
942
1026
|
* Set the named layer's blend mode by name (see [`blend_mode_names`]),
|
|
943
1027
|
* routed through the undo bus. Emits `dirty-canvas`. Errors on an
|
|
@@ -1014,6 +1098,28 @@ export class Document {
|
|
|
1014
1098
|
* rejects the write.
|
|
1015
1099
|
*/
|
|
1016
1100
|
setSliceKey(slice_id: number, frame: number, x: number, y: number, width: number, height: number, center_x?: number | null, center_y?: number | null, center_width?: number | null, center_height?: number | null, pivot_x?: number | null, pivot_y?: number | null): void;
|
|
1101
|
+
/**
|
|
1102
|
+
* Mirror the gesture in progress (symmetry): every pixel it paints is
|
|
1103
|
+
* also painted at its mirror images. `axis_x2` / `axis_y2` are the
|
|
1104
|
+
* vertical / horizontal axis in half pixels from the left / top canvas
|
|
1105
|
+
* edge (column `x` mirrors to `axis_x2 − 1 − x`); absent turns that
|
|
1106
|
+
* axis off. Mirror images off the canvas are skipped unless the
|
|
1107
|
+
* gesture wraps. Call it after `beginStroke` / `beginShadingStroke`
|
|
1108
|
+
* and before the first [`Self::stroke_to`].
|
|
1109
|
+
*
|
|
1110
|
+
* Errors when no gesture is armed or it has already painted.
|
|
1111
|
+
*/
|
|
1112
|
+
setStrokeMirror(axis_x2?: number | null, axis_y2?: number | null): void;
|
|
1113
|
+
/**
|
|
1114
|
+
* Let the gesture in progress wrap across the canvas edges (tiled
|
|
1115
|
+
* mode): along a wrapped axis, points beyond the canvas are taken
|
|
1116
|
+
* modulo the canvas size instead of skipped, and the line between two
|
|
1117
|
+
* points continues at the opposite edge. Call it after `beginStroke` /
|
|
1118
|
+
* `beginShadingStroke` and before the first [`Self::stroke_to`].
|
|
1119
|
+
*
|
|
1120
|
+
* Errors when no gesture is armed or it has already painted.
|
|
1121
|
+
*/
|
|
1122
|
+
setStrokeWrap(x: boolean, y: boolean): void;
|
|
1017
1123
|
/**
|
|
1018
1124
|
* Set the playback direction of the tag at `index` by snake_case
|
|
1019
1125
|
* name. One undo entry.
|
|
@@ -1067,14 +1173,14 @@ export class Document {
|
|
|
1067
1173
|
*/
|
|
1068
1174
|
sliceKeyCenterWidth(slice_id: number, key_index: number): number;
|
|
1069
1175
|
/**
|
|
1070
|
-
*
|
|
1071
|
-
* key has no center. Errors when
|
|
1072
|
-
* out of range.
|
|
1176
|
+
* `x` of the key's 9-patch center, relative to the key's bounds
|
|
1177
|
+
* origin, or `0` when the key has no center. Errors when
|
|
1178
|
+
* `slice_id` or `key_index` is out of range.
|
|
1073
1179
|
*/
|
|
1074
1180
|
sliceKeyCenterX(slice_id: number, key_index: number): number;
|
|
1075
1181
|
/**
|
|
1076
|
-
*
|
|
1077
|
-
* key has no center.
|
|
1182
|
+
* `y` of the key's 9-patch center, relative to the key's bounds
|
|
1183
|
+
* origin, or `0` when the key has no center.
|
|
1078
1184
|
*/
|
|
1079
1185
|
sliceKeyCenterY(slice_id: number, key_index: number): number;
|
|
1080
1186
|
/**
|
|
@@ -1103,13 +1209,13 @@ export class Document {
|
|
|
1103
1209
|
*/
|
|
1104
1210
|
sliceKeyHeight(slice_id: number, key_index: number): number;
|
|
1105
1211
|
/**
|
|
1106
|
-
*
|
|
1107
|
-
* no pivot.
|
|
1212
|
+
* `x` of the key's pivot, relative to the key's bounds origin
|
|
1213
|
+
* (may be negative), or `0` when the key has no pivot.
|
|
1108
1214
|
*/
|
|
1109
1215
|
sliceKeyPivotX(slice_id: number, key_index: number): number;
|
|
1110
1216
|
/**
|
|
1111
|
-
*
|
|
1112
|
-
* no pivot.
|
|
1217
|
+
* `y` of the key's pivot, relative to the key's bounds origin
|
|
1218
|
+
* (may be negative), or `0` when the key has no pivot.
|
|
1113
1219
|
*/
|
|
1114
1220
|
sliceKeyPivotY(slice_id: number, key_index: number): number;
|
|
1115
1221
|
/**
|
|
@@ -1258,6 +1364,26 @@ export class Document {
|
|
|
1258
1364
|
* Number of frames in the document.
|
|
1259
1365
|
*/
|
|
1260
1366
|
readonly frameCount: number;
|
|
1367
|
+
/**
|
|
1368
|
+
* Grid cell height in sprite pixels (16 for a sprite without a
|
|
1369
|
+
* stored grid; 0 when a file stored a zero-sized grid).
|
|
1370
|
+
*/
|
|
1371
|
+
readonly gridHeight: number;
|
|
1372
|
+
/**
|
|
1373
|
+
* Grid cell width in sprite pixels (16 for a sprite without a stored
|
|
1374
|
+
* grid; 0 when a file stored a zero-sized grid).
|
|
1375
|
+
*/
|
|
1376
|
+
readonly gridWidth: number;
|
|
1377
|
+
/**
|
|
1378
|
+
* Grid x offset in sprite pixels (0 for a sprite without a stored
|
|
1379
|
+
* grid).
|
|
1380
|
+
*/
|
|
1381
|
+
readonly gridX: number;
|
|
1382
|
+
/**
|
|
1383
|
+
* Grid y offset in sprite pixels (0 for a sprite without a stored
|
|
1384
|
+
* grid).
|
|
1385
|
+
*/
|
|
1386
|
+
readonly gridY: number;
|
|
1261
1387
|
/**
|
|
1262
1388
|
* `true` when a non-empty marquee selection is active. See
|
|
1263
1389
|
* [`pincel_core::Sprite::has_selection`].
|
|
@@ -1437,6 +1563,13 @@ export function blendModeNames(): string[];
|
|
|
1437
1563
|
*/
|
|
1438
1564
|
export function effectNames(): string[];
|
|
1439
1565
|
|
|
1566
|
+
/**
|
|
1567
|
+
* Number of [`Document`]s alive in this module (created and not yet
|
|
1568
|
+
* freed). A diagnostic: tests check that closing a tab frees its document
|
|
1569
|
+
* (docs/specs/document-tabs.md AC-16).
|
|
1570
|
+
*/
|
|
1571
|
+
export function openDocumentCount(): number;
|
|
1572
|
+
|
|
1440
1573
|
/**
|
|
1441
1574
|
* A single composited frame returned to JS.
|
|
1442
1575
|
*
|
|
@@ -1488,17 +1621,20 @@ export interface InitOutput {
|
|
|
1488
1621
|
readonly document_clearSelection: (a: number) => void;
|
|
1489
1622
|
readonly document_compose: (a: number, b: number, c: number) => [number, number, number];
|
|
1490
1623
|
readonly document_composeDirty: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number];
|
|
1624
|
+
readonly document_composeFrame: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
1491
1625
|
readonly document_currentFrame: (a: number) => number;
|
|
1492
1626
|
readonly document_deleteSelection: (a: number) => [number, number, number];
|
|
1493
1627
|
readonly document_drainEvents: (a: number) => [number, number];
|
|
1494
1628
|
readonly document_endStroke: (a: number) => void;
|
|
1495
|
-
readonly document_exportAtlas: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
|
|
1629
|
+
readonly document_exportAtlas: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number];
|
|
1496
1630
|
readonly document_exportGpl: (a: number, b: number, c: number) => [number, number];
|
|
1497
|
-
readonly
|
|
1631
|
+
readonly document_exportPalette: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
|
|
1632
|
+
readonly document_exportPng: (a: number, b: number, c: number) => [number, number, number, number];
|
|
1498
1633
|
readonly document_frameCount: (a: number) => number;
|
|
1499
1634
|
readonly document_hasSelection: (a: number) => number;
|
|
1500
1635
|
readonly document_height: (a: number) => number;
|
|
1501
1636
|
readonly document_importGpl: (a: number, b: number, c: number) => [number, number, number];
|
|
1637
|
+
readonly document_importPalette: (a: number, b: number, c: number) => [number, number, number];
|
|
1502
1638
|
readonly document_layerCount: (a: number) => number;
|
|
1503
1639
|
readonly document_layerIdAt: (a: number, b: number) => [number, number, number];
|
|
1504
1640
|
readonly document_layerKind: (a: number, b: number) => [number, number];
|
|
@@ -1565,35 +1701,12 @@ export interface InitOutput {
|
|
|
1565
1701
|
readonly document_undoDepth: (a: number) => number;
|
|
1566
1702
|
readonly document_width: (a: number) => number;
|
|
1567
1703
|
readonly palettePresetNames: () => [number, number];
|
|
1568
|
-
readonly
|
|
1569
|
-
readonly document_resizeCanvas: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1570
|
-
readonly document_scaleImage: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1571
|
-
readonly document_transformCanvas: (a: number, b: number, c: number) => [number, number];
|
|
1572
|
-
readonly document_transformLayer: (a: number, b: number, c: number) => [number, number];
|
|
1573
|
-
readonly blendModeNames: () => [number, number];
|
|
1574
|
-
readonly document_addGroup: (a: number, b: number, c: number) => [number, number, number];
|
|
1575
|
-
readonly document_applyEffect: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
|
|
1576
|
-
readonly document_duplicateLayer: (a: number, b: number) => [number, number, number];
|
|
1577
|
-
readonly document_flattenImage: (a: number) => [number, number, number];
|
|
1578
|
-
readonly document_layerBlendMode: (a: number, b: number) => [number, number];
|
|
1579
|
-
readonly document_layerDepth: (a: number, b: number) => number;
|
|
1580
|
-
readonly document_layerEditable: (a: number, b: number) => number;
|
|
1581
|
-
readonly document_layerLocked: (a: number, b: number) => number;
|
|
1582
|
-
readonly document_layerParent: (a: number, b: number) => number;
|
|
1583
|
-
readonly document_layerThumbnail: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
1584
|
-
readonly document_mergeDown: (a: number, b: number) => [number, number];
|
|
1585
|
-
readonly document_moveLayerTo: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1586
|
-
readonly document_previewEffect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
|
|
1587
|
-
readonly document_reorderLayer: (a: number, b: number, c: number) => [number, number];
|
|
1588
|
-
readonly document_setLayerBlendMode: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1589
|
-
readonly document_setLayerEditable: (a: number, b: number, c: number) => [number, number];
|
|
1590
|
-
readonly document_setLayerOpacity: (a: number, b: number, c: number) => [number, number];
|
|
1591
|
-
readonly effectNames: () => [number, number];
|
|
1704
|
+
readonly openDocumentCount: () => number;
|
|
1592
1705
|
readonly document_contractSelection: (a: number, b: number) => void;
|
|
1593
|
-
readonly document_drawText: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => [number, number, number];
|
|
1594
1706
|
readonly document_expandSelection: (a: number, b: number) => void;
|
|
1707
|
+
readonly document_importPngAsLayer: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
|
|
1595
1708
|
readonly document_invertSelection: (a: number) => void;
|
|
1596
|
-
readonly
|
|
1709
|
+
readonly document_openPng: (a: number, b: number) => [number, number, number];
|
|
1597
1710
|
readonly document_selectAll: (a: number) => void;
|
|
1598
1711
|
readonly document_selectEllipse: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1599
1712
|
readonly document_selectPolygon: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
@@ -1601,61 +1714,94 @@ export interface InitOutput {
|
|
|
1601
1714
|
readonly document_selectWand: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
1602
1715
|
readonly document_selectionIsRect: (a: number) => number;
|
|
1603
1716
|
readonly document_selectionMask: (a: number) => [number, number];
|
|
1604
|
-
readonly registerFont: (a: number, b: number) => number;
|
|
1605
1717
|
readonly __wbg_vectorizer_free: (a: number, b: number) => void;
|
|
1606
1718
|
readonly __wbg_vectorizeresult_free: (a: number, b: number) => void;
|
|
1607
|
-
readonly document_vectorizer: (a: number, b: number) => [number, number, number];
|
|
1608
|
-
readonly vectorizer_trace: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
1609
|
-
readonly vectorizeresult_layers: (a: number) => number;
|
|
1610
|
-
readonly vectorizeresult_outlines: (a: number) => number;
|
|
1611
|
-
readonly vectorizeresult_svg: (a: number) => [number, number];
|
|
1612
|
-
readonly vectorizeresult_threshold: (a: number) => number;
|
|
1613
|
-
readonly __wbg_copiedimage_free: (a: number, b: number) => void;
|
|
1614
|
-
readonly copiedimage_height: (a: number) => number;
|
|
1615
|
-
readonly copiedimage_png: (a: number) => [number, number];
|
|
1616
|
-
readonly copiedimage_width: (a: number) => number;
|
|
1617
|
-
readonly copiedimage_x: (a: number) => number;
|
|
1618
|
-
readonly copiedimage_y: (a: number) => number;
|
|
1619
|
-
readonly document_copySelection: (a: number, b: number) => [number, number, number];
|
|
1620
|
-
readonly document_cutSelection: (a: number) => [number, number, number];
|
|
1621
|
-
readonly document_imageKey: (a: number, b: number) => [number, number, number, number];
|
|
1622
|
-
readonly document_importPngAsLayer: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
|
|
1623
|
-
readonly document_openPng: (a: number, b: number) => [number, number, number];
|
|
1624
|
-
readonly document_pasteLayer: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
|
|
1625
|
-
readonly __wbg_animationinfo_free: (a: number, b: number) => void;
|
|
1626
|
-
readonly __wbg_event_free: (a: number, b: number) => void;
|
|
1627
|
-
readonly animationinfo_defaultLoops: (a: number) => number;
|
|
1628
|
-
readonly animationinfo_frameCount: (a: number) => number;
|
|
1629
|
-
readonly animationinfo_gifApproximated: (a: number) => number;
|
|
1630
|
-
readonly animationinfo_semiTransparent: (a: number) => number;
|
|
1631
1719
|
readonly document_addTag: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
|
|
1632
|
-
readonly
|
|
1720
|
+
readonly document_applyEffect: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
|
|
1721
|
+
readonly document_applyGradient: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number];
|
|
1633
1722
|
readonly document_applyShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => [number, number];
|
|
1634
|
-
readonly document_beginStroke: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1635
|
-
readonly document_exportAnimation: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
|
|
1636
1723
|
readonly document_frameDuration: (a: number, b: number) => [number, number, number];
|
|
1724
|
+
readonly document_gridHeight: (a: number) => number;
|
|
1725
|
+
readonly document_gridWidth: (a: number) => number;
|
|
1726
|
+
readonly document_gridX: (a: number) => number;
|
|
1727
|
+
readonly document_gridY: (a: number) => number;
|
|
1637
1728
|
readonly document_onionSkinEnabled: (a: number) => number;
|
|
1729
|
+
readonly document_previewEffect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
|
|
1638
1730
|
readonly document_removeFrame: (a: number, b: number) => [number, number];
|
|
1639
1731
|
readonly document_removeTag: (a: number, b: number) => [number, number];
|
|
1640
1732
|
readonly document_setFrameDuration: (a: number, b: number, c: number) => [number, number];
|
|
1733
|
+
readonly document_setGrid: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1641
1734
|
readonly document_setOnionSkin: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
1642
1735
|
readonly document_setTagDirection: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1643
1736
|
readonly document_setTagName: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1644
1737
|
readonly document_setTagRange: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1645
|
-
readonly document_strokeTo: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1646
1738
|
readonly document_tagColor: (a: number, b: number) => [number, number, number];
|
|
1647
1739
|
readonly document_tagCount: (a: number) => number;
|
|
1648
1740
|
readonly document_tagDirection: (a: number, b: number) => [number, number, number, number];
|
|
1649
1741
|
readonly document_tagFrom: (a: number, b: number) => [number, number, number];
|
|
1650
1742
|
readonly document_tagName: (a: number, b: number) => [number, number, number, number];
|
|
1651
1743
|
readonly document_tagTo: (a: number, b: number) => [number, number, number];
|
|
1744
|
+
readonly document_vectorizer: (a: number, b: number) => [number, number, number];
|
|
1745
|
+
readonly effectNames: () => [number, number];
|
|
1746
|
+
readonly vectorizer_trace: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
1747
|
+
readonly vectorizeresult_layers: (a: number) => number;
|
|
1748
|
+
readonly vectorizeresult_outlines: (a: number) => number;
|
|
1749
|
+
readonly vectorizeresult_svg: (a: number) => [number, number];
|
|
1750
|
+
readonly vectorizeresult_threshold: (a: number) => number;
|
|
1751
|
+
readonly __wbg_animationinfo_free: (a: number, b: number) => void;
|
|
1752
|
+
readonly animationinfo_defaultLoops: (a: number) => number;
|
|
1753
|
+
readonly animationinfo_frameCount: (a: number) => number;
|
|
1754
|
+
readonly animationinfo_gifApproximated: (a: number) => number;
|
|
1755
|
+
readonly animationinfo_semiTransparent: (a: number) => number;
|
|
1756
|
+
readonly document_animationInfo: (a: number, b: number, c: number) => [number, number, number];
|
|
1757
|
+
readonly document_exportAnimation: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
|
|
1758
|
+
readonly __wbg_event_free: (a: number, b: number) => void;
|
|
1652
1759
|
readonly event_frame: (a: number) => number;
|
|
1653
1760
|
readonly event_height: (a: number) => number;
|
|
1654
1761
|
readonly event_kind: (a: number) => [number, number];
|
|
1762
|
+
readonly event_layer: (a: number) => number;
|
|
1655
1763
|
readonly event_width: (a: number) => number;
|
|
1656
1764
|
readonly event_x: (a: number) => number;
|
|
1657
1765
|
readonly event_y: (a: number) => number;
|
|
1658
|
-
readonly
|
|
1766
|
+
readonly blendModeNames: () => [number, number];
|
|
1767
|
+
readonly document_addGroup: (a: number, b: number, c: number) => [number, number, number];
|
|
1768
|
+
readonly document_drawText: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => [number, number, number];
|
|
1769
|
+
readonly document_duplicateLayer: (a: number, b: number) => [number, number, number];
|
|
1770
|
+
readonly document_flattenImage: (a: number) => [number, number, number];
|
|
1771
|
+
readonly document_layerBlendMode: (a: number, b: number) => [number, number];
|
|
1772
|
+
readonly document_layerDepth: (a: number, b: number) => number;
|
|
1773
|
+
readonly document_layerEditable: (a: number, b: number) => number;
|
|
1774
|
+
readonly document_layerLocked: (a: number, b: number) => number;
|
|
1775
|
+
readonly document_layerParent: (a: number, b: number) => number;
|
|
1776
|
+
readonly document_layerThumbnail: (a: number, b: number, c: number, d: number) => [number, number, number];
|
|
1777
|
+
readonly document_mergeDown: (a: number, b: number) => [number, number];
|
|
1778
|
+
readonly document_moveLayerTo: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1779
|
+
readonly document_previewText: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number) => [number, number, number];
|
|
1780
|
+
readonly document_reorderLayer: (a: number, b: number, c: number) => [number, number];
|
|
1781
|
+
readonly document_setLayerBlendMode: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1782
|
+
readonly document_setLayerEditable: (a: number, b: number, c: number) => [number, number];
|
|
1783
|
+
readonly document_setLayerOpacity: (a: number, b: number, c: number) => [number, number];
|
|
1784
|
+
readonly registerFont: (a: number, b: number) => number;
|
|
1785
|
+
readonly document_beginShadingStroke: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1786
|
+
readonly document_beginStroke: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1787
|
+
readonly document_setStrokeMirror: (a: number, b: number, c: number) => [number, number];
|
|
1788
|
+
readonly document_setStrokeWrap: (a: number, b: number, c: number) => [number, number];
|
|
1789
|
+
readonly document_strokeTo: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1790
|
+
readonly __wbg_copiedimage_free: (a: number, b: number) => void;
|
|
1791
|
+
readonly copiedimage_height: (a: number) => number;
|
|
1792
|
+
readonly copiedimage_png: (a: number) => [number, number];
|
|
1793
|
+
readonly copiedimage_width: (a: number) => number;
|
|
1794
|
+
readonly copiedimage_x: (a: number) => number;
|
|
1795
|
+
readonly copiedimage_y: (a: number) => number;
|
|
1796
|
+
readonly document_copySelection: (a: number, b: number) => [number, number, number];
|
|
1797
|
+
readonly document_cropToSelection: (a: number) => [number, number, number];
|
|
1798
|
+
readonly document_cutSelection: (a: number) => [number, number, number];
|
|
1799
|
+
readonly document_imageKey: (a: number, b: number) => [number, number, number, number];
|
|
1800
|
+
readonly document_pasteLayer: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
|
|
1801
|
+
readonly document_resizeCanvas: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1802
|
+
readonly document_scaleImage: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1803
|
+
readonly document_transformCanvas: (a: number, b: number, c: number) => [number, number];
|
|
1804
|
+
readonly document_transformLayer: (a: number, b: number, c: number) => [number, number];
|
|
1659
1805
|
readonly __wbindgen_externrefs: WebAssembly.Table;
|
|
1660
1806
|
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
|
1661
1807
|
readonly __externref_drop_slice: (a: number, b: number) => void;
|
package/pincel_wasm.js
CHANGED
|
@@ -464,9 +464,10 @@ export class Document {
|
|
|
464
464
|
* stable across runs and monotonic. Returns the assigned id.
|
|
465
465
|
*
|
|
466
466
|
* Routes through the [`AddTileset`] command so the operation joins
|
|
467
|
-
* the undo / redo bus.
|
|
468
|
-
*
|
|
469
|
-
*
|
|
467
|
+
* the undo / redo bus. The tileset starts with one stored, fully
|
|
468
|
+
* transparent tile `0` (Aseprite's empty tile), so the first
|
|
469
|
+
* [`Document::add_tile`] returns id `1` and no user tile is written
|
|
470
|
+
* as the empty tile (docs/specs/tilemaps.md, Decisions 2026-10-29).
|
|
470
471
|
*
|
|
471
472
|
* Errors when `tile_w` or `tile_h` is zero, when the existing id
|
|
472
473
|
* space is exhausted (an existing tileset already uses `u32::MAX`),
|
|
@@ -587,6 +588,38 @@ export class Document {
|
|
|
587
588
|
throw takeFromExternrefTable0(ret[0]);
|
|
588
589
|
}
|
|
589
590
|
}
|
|
591
|
+
/**
|
|
592
|
+
* Fill the selection — or, without one, the active layer's cel on the
|
|
593
|
+
* current frame — with a dithered ramp from `foreground` at the drag
|
|
594
|
+
* start to `background` at the drag end, as one undo entry.
|
|
595
|
+
*
|
|
596
|
+
* - `line`: `[x0, y0, x1, y1]`, the drag's start and end sprite pixels.
|
|
597
|
+
* - `kind`: `linear` or `radial`.
|
|
598
|
+
* - `dither`: the Bayer matrix size `2`, `4` or `8`, or `0` for two
|
|
599
|
+
* hard bands split halfway.
|
|
600
|
+
* - `foreground` / `background`: `0xRRGGBBAA`.
|
|
601
|
+
*
|
|
602
|
+
* Returns `false` — and changes nothing — for a zero-length drag.
|
|
603
|
+
* Errors (and changes nothing) on a locked layer, a document without a
|
|
604
|
+
* paintable image layer, and an indexed or grayscale sprite.
|
|
605
|
+
* @param {Int32Array} line
|
|
606
|
+
* @param {string} kind
|
|
607
|
+
* @param {number} dither
|
|
608
|
+
* @param {number} foreground
|
|
609
|
+
* @param {number} background
|
|
610
|
+
* @returns {boolean}
|
|
611
|
+
*/
|
|
612
|
+
applyGradient(line, kind, dither, foreground, background) {
|
|
613
|
+
const ptr0 = passArray32ToWasm0(line, wasm.__wbindgen_malloc);
|
|
614
|
+
const len0 = WASM_VECTOR_LEN;
|
|
615
|
+
const ptr1 = passStringToWasm0(kind, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
616
|
+
const len1 = WASM_VECTOR_LEN;
|
|
617
|
+
const ret = wasm.document_applyGradient(this.__wbg_ptr, ptr0, len0, ptr1, len1, dither, foreground, background);
|
|
618
|
+
if (ret[2]) {
|
|
619
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
620
|
+
}
|
|
621
|
+
return ret[0] !== 0;
|
|
622
|
+
}
|
|
590
623
|
/**
|
|
591
624
|
* Rasterize a 1-pixel-wide Bresenham line between sprite-space
|
|
592
625
|
* `(x0, y0)` and `(x1, y1)` with the given non-premultiplied RGBA
|
|
@@ -749,6 +782,37 @@ export class Document {
|
|
|
749
782
|
throw takeFromExternrefTable0(ret[0]);
|
|
750
783
|
}
|
|
751
784
|
}
|
|
785
|
+
/**
|
|
786
|
+
* Start a Pencil gesture with the Shading ink: every pixel the stroke
|
|
787
|
+
* touches whose color before the stroke is exactly entry `i` of `ramp`
|
|
788
|
+
* becomes entry `i + step`, clamped to the ramp; other colors stay.
|
|
789
|
+
* Each pixel changes at most once per gesture. Continue it with
|
|
790
|
+
* [`Self::stroke_to`] and close it with `endStroke` like any stroke.
|
|
791
|
+
*
|
|
792
|
+
* - `ramp`: the colors in palette order (`0xRRGGBBAA`), at least one.
|
|
793
|
+
* - `step`: `1` (left button, toward the end) or `-1` (right button,
|
|
794
|
+
* toward the start).
|
|
795
|
+
* - `size`, `shape`, `pixel_perfect`: as in [`Self::begin_stroke`].
|
|
796
|
+
*
|
|
797
|
+
* Errors (and starts nothing) for an empty ramp, another step, an
|
|
798
|
+
* unknown shape, a locked target layer, or a document without a
|
|
799
|
+
* paintable image layer.
|
|
800
|
+
* @param {Uint32Array} ramp
|
|
801
|
+
* @param {number} step
|
|
802
|
+
* @param {number} size
|
|
803
|
+
* @param {string} shape
|
|
804
|
+
* @param {boolean} pixel_perfect
|
|
805
|
+
*/
|
|
806
|
+
beginShadingStroke(ramp, step, size, shape, pixel_perfect) {
|
|
807
|
+
const ptr0 = passArray32ToWasm0(ramp, wasm.__wbindgen_malloc);
|
|
808
|
+
const len0 = WASM_VECTOR_LEN;
|
|
809
|
+
const ptr1 = passStringToWasm0(shape, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
810
|
+
const len1 = WASM_VECTOR_LEN;
|
|
811
|
+
const ret = wasm.document_beginShadingStroke(this.__wbg_ptr, ptr0, len0, step, size, ptr1, len1, pixel_perfect);
|
|
812
|
+
if (ret[1]) {
|
|
813
|
+
throw takeFromExternrefTable0(ret[0]);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
752
816
|
/**
|
|
753
817
|
* Start a Pencil / Eraser gesture on the active layer / current frame.
|
|
754
818
|
* Nothing is painted until the first [`Self::stroke_to`].
|
|
@@ -838,6 +902,24 @@ export class Document {
|
|
|
838
902
|
}
|
|
839
903
|
return ComposeFrame.__wrap(ret[0]);
|
|
840
904
|
}
|
|
905
|
+
/**
|
|
906
|
+
* [`Document::compose`] with the onion skin chosen per call: `onion =
|
|
907
|
+
* true` applies the configured onion skin (the same bytes as
|
|
908
|
+
* `compose`), `onion = false` leaves it out whatever
|
|
909
|
+
* [`Document::set_onion_skin`] says — for an animation preview that
|
|
910
|
+
* must never show ghosts (docs/specs/animation-preview.md).
|
|
911
|
+
* @param {number} frame
|
|
912
|
+
* @param {number} zoom
|
|
913
|
+
* @param {boolean} onion
|
|
914
|
+
* @returns {ComposeFrame}
|
|
915
|
+
*/
|
|
916
|
+
composeFrame(frame, zoom, onion) {
|
|
917
|
+
const ret = wasm.document_composeFrame(this.__wbg_ptr, frame, zoom, onion);
|
|
918
|
+
if (ret[2]) {
|
|
919
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
920
|
+
}
|
|
921
|
+
return ComposeFrame.__wrap(ret[0]);
|
|
922
|
+
}
|
|
841
923
|
/**
|
|
842
924
|
* Shrink the selection by `radius` pixels (may clear it).
|
|
843
925
|
* @param {number} radius
|
|
@@ -1002,7 +1084,7 @@ export class Document {
|
|
|
1002
1084
|
* a fresh `Uint8Array` copy. Errors surface the `pincel-core`
|
|
1003
1085
|
* message: an unknown format or tag, a scale outside 1–10, an output
|
|
1004
1086
|
* edge above 16384 px, a frameless sequence, or a sprite the renderer
|
|
1005
|
-
* refuses (
|
|
1087
|
+
* refuses (a corrupt cel or a broken linked cel).
|
|
1006
1088
|
* @param {string} format
|
|
1007
1089
|
* @param {string | null | undefined} tag
|
|
1008
1090
|
* @param {number} scale
|
|
@@ -1039,17 +1121,24 @@ export class Document {
|
|
|
1039
1121
|
* `meta.image` names `image_name` (default `"sheet.png"`). Errors
|
|
1040
1122
|
* surface the underlying `pincel-core` message: zero columns, an
|
|
1041
1123
|
* unknown tag, a frameless sprite, or anything the renderer refuses.
|
|
1124
|
+
*
|
|
1125
|
+
* `scale` (optional, default 1) upscales the sheet by an integer
|
|
1126
|
+
* factor 1–10 with nearest-neighbour; the manifest and the `--data`
|
|
1127
|
+
* JSON describe the scaled sheet (`meta.scale` stays `"1"`, as
|
|
1128
|
+
* Aseprite's `--scale`). A scale outside 1–10 or a sheet edge above
|
|
1129
|
+
* 16384 px is an error naming the limit (docs/specs/scaled-export.md).
|
|
1042
1130
|
* @param {number} columns
|
|
1043
1131
|
* @param {string | null} [tag]
|
|
1044
1132
|
* @param {string | null} [image_name]
|
|
1133
|
+
* @param {number | null} [scale]
|
|
1045
1134
|
* @returns {AtlasExport}
|
|
1046
1135
|
*/
|
|
1047
|
-
exportAtlas(columns, tag, image_name) {
|
|
1136
|
+
exportAtlas(columns, tag, image_name, scale) {
|
|
1048
1137
|
var ptr0 = isLikeNone(tag) ? 0 : passStringToWasm0(tag, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
1049
1138
|
var len0 = WASM_VECTOR_LEN;
|
|
1050
1139
|
var ptr1 = isLikeNone(image_name) ? 0 : passStringToWasm0(image_name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
1051
1140
|
var len1 = WASM_VECTOR_LEN;
|
|
1052
|
-
const ret = wasm.document_exportAtlas(this.__wbg_ptr, columns, ptr0, len0, ptr1, len1);
|
|
1141
|
+
const ret = wasm.document_exportAtlas(this.__wbg_ptr, columns, ptr0, len0, ptr1, len1, isLikeNone(scale) ? Number.MAX_SAFE_INTEGER : (scale) >>> 0);
|
|
1053
1142
|
if (ret[2]) {
|
|
1054
1143
|
throw takeFromExternrefTable0(ret[1]);
|
|
1055
1144
|
}
|
|
@@ -1057,6 +1146,9 @@ export class Document {
|
|
|
1057
1146
|
}
|
|
1058
1147
|
/**
|
|
1059
1148
|
* The palette as a GIMP `.gpl` file called `name` (alpha dropped).
|
|
1149
|
+
*
|
|
1150
|
+
* Deprecated: use [`Document::export_palette`] (`exportPalette`) with
|
|
1151
|
+
* format `gpl`. Kept for the public npm API (spec §17.5).
|
|
1060
1152
|
* @param {string} name
|
|
1061
1153
|
* @returns {string}
|
|
1062
1154
|
*/
|
|
@@ -1074,6 +1166,30 @@ export class Document {
|
|
|
1074
1166
|
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
|
|
1075
1167
|
}
|
|
1076
1168
|
}
|
|
1169
|
+
/**
|
|
1170
|
+
* The palette as a file: `format` is `gpl` (a GIMP palette called
|
|
1171
|
+
* `name`), `hex` (Lospec), `pal` (JASC) or `png` (a one-row strip of
|
|
1172
|
+
* `cell` × `cell` px swatches). `name` is used only by `gpl`, `cell`
|
|
1173
|
+
* only by `png`. Errors for an unknown format, or a PNG strip of an
|
|
1174
|
+
* empty palette or with `cell` 0.
|
|
1175
|
+
* @param {string} format
|
|
1176
|
+
* @param {string} name
|
|
1177
|
+
* @param {number} cell
|
|
1178
|
+
* @returns {Uint8Array}
|
|
1179
|
+
*/
|
|
1180
|
+
exportPalette(format, name, cell) {
|
|
1181
|
+
const ptr0 = passStringToWasm0(format, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
1182
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1183
|
+
const ptr1 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
1184
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1185
|
+
const ret = wasm.document_exportPalette(this.__wbg_ptr, ptr0, len0, ptr1, len1, cell);
|
|
1186
|
+
if (ret[3]) {
|
|
1187
|
+
throw takeFromExternrefTable0(ret[2]);
|
|
1188
|
+
}
|
|
1189
|
+
var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
1190
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
|
|
1191
|
+
return v3;
|
|
1192
|
+
}
|
|
1077
1193
|
/**
|
|
1078
1194
|
* Encode one frame as an RGBA8 PNG.
|
|
1079
1195
|
*
|
|
@@ -1086,11 +1202,17 @@ export class Document {
|
|
|
1086
1202
|
* `pincel-core` message: an out-of-range frame, or a sprite the
|
|
1087
1203
|
* renderer refuses (non-RGBA color mode, non-`Normal` blend mode,
|
|
1088
1204
|
* group layer, linked cel).
|
|
1205
|
+
*
|
|
1206
|
+
* `scale` (optional, default 1) upscales the PNG by an integer factor
|
|
1207
|
+
* 1–10 with nearest-neighbour (docs/specs/scaled-export.md); scale 1
|
|
1208
|
+
* and no scale give the same bytes. A scale outside 1–10 or an output
|
|
1209
|
+
* edge above 16384 px is an error naming the limit.
|
|
1089
1210
|
* @param {number} frame
|
|
1211
|
+
* @param {number | null} [scale]
|
|
1090
1212
|
* @returns {Uint8Array}
|
|
1091
1213
|
*/
|
|
1092
|
-
exportPng(frame) {
|
|
1093
|
-
const ret = wasm.document_exportPng(this.__wbg_ptr, frame);
|
|
1214
|
+
exportPng(frame, scale) {
|
|
1215
|
+
const ret = wasm.document_exportPng(this.__wbg_ptr, frame, isLikeNone(scale) ? Number.MAX_SAFE_INTEGER : (scale) >>> 0);
|
|
1094
1216
|
if (ret[3]) {
|
|
1095
1217
|
throw takeFromExternrefTable0(ret[2]);
|
|
1096
1218
|
}
|
|
@@ -1132,6 +1254,42 @@ export class Document {
|
|
|
1132
1254
|
}
|
|
1133
1255
|
return ret[0];
|
|
1134
1256
|
}
|
|
1257
|
+
/**
|
|
1258
|
+
* Grid cell height in sprite pixels (16 for a sprite without a
|
|
1259
|
+
* stored grid; 0 when a file stored a zero-sized grid).
|
|
1260
|
+
* @returns {number}
|
|
1261
|
+
*/
|
|
1262
|
+
get gridHeight() {
|
|
1263
|
+
const ret = wasm.document_gridHeight(this.__wbg_ptr);
|
|
1264
|
+
return ret >>> 0;
|
|
1265
|
+
}
|
|
1266
|
+
/**
|
|
1267
|
+
* Grid cell width in sprite pixels (16 for a sprite without a stored
|
|
1268
|
+
* grid; 0 when a file stored a zero-sized grid).
|
|
1269
|
+
* @returns {number}
|
|
1270
|
+
*/
|
|
1271
|
+
get gridWidth() {
|
|
1272
|
+
const ret = wasm.document_gridWidth(this.__wbg_ptr);
|
|
1273
|
+
return ret >>> 0;
|
|
1274
|
+
}
|
|
1275
|
+
/**
|
|
1276
|
+
* Grid x offset in sprite pixels (0 for a sprite without a stored
|
|
1277
|
+
* grid).
|
|
1278
|
+
* @returns {number}
|
|
1279
|
+
*/
|
|
1280
|
+
get gridX() {
|
|
1281
|
+
const ret = wasm.document_gridX(this.__wbg_ptr);
|
|
1282
|
+
return ret;
|
|
1283
|
+
}
|
|
1284
|
+
/**
|
|
1285
|
+
* Grid y offset in sprite pixels (0 for a sprite without a stored
|
|
1286
|
+
* grid).
|
|
1287
|
+
* @returns {number}
|
|
1288
|
+
*/
|
|
1289
|
+
get gridY() {
|
|
1290
|
+
const ret = wasm.document_gridY(this.__wbg_ptr);
|
|
1291
|
+
return ret;
|
|
1292
|
+
}
|
|
1135
1293
|
/**
|
|
1136
1294
|
* `true` when a non-empty marquee selection is active. See
|
|
1137
1295
|
* [`pincel_core::Sprite::has_selection`].
|
|
@@ -1179,6 +1337,10 @@ export class Document {
|
|
|
1179
1337
|
/**
|
|
1180
1338
|
* Replace the palette with a GIMP `.gpl` file's colours and return
|
|
1181
1339
|
* how many it holds. One undo entry. Refused for indexed documents.
|
|
1340
|
+
*
|
|
1341
|
+
* Deprecated: use [`Document::import_palette`] (`importPalette`),
|
|
1342
|
+
* which reads `.gpl` and the other palette formats. Kept for the
|
|
1343
|
+
* public npm API (spec §17.5).
|
|
1182
1344
|
* @param {string} text
|
|
1183
1345
|
* @returns {number}
|
|
1184
1346
|
*/
|
|
@@ -1191,6 +1353,25 @@ export class Document {
|
|
|
1191
1353
|
}
|
|
1192
1354
|
return ret[0] >>> 0;
|
|
1193
1355
|
}
|
|
1356
|
+
/**
|
|
1357
|
+
* Replace the palette with a palette file's colours and return how
|
|
1358
|
+
* many it holds. The format — GIMP `.gpl`, Lospec `.hex`, JASC `.pal`
|
|
1359
|
+
* or a PNG palette image — is detected from the content, not the file
|
|
1360
|
+
* name (spec §3.7). One undo entry. Refused for indexed documents, for
|
|
1361
|
+
* files without colours and above 256 colours; the palette is then
|
|
1362
|
+
* unchanged.
|
|
1363
|
+
* @param {Uint8Array} bytes
|
|
1364
|
+
* @returns {number}
|
|
1365
|
+
*/
|
|
1366
|
+
importPalette(bytes) {
|
|
1367
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
|
|
1368
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1369
|
+
const ret = wasm.document_importPalette(this.__wbg_ptr, ptr0, len0);
|
|
1370
|
+
if (ret[2]) {
|
|
1371
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
1372
|
+
}
|
|
1373
|
+
return ret[0] >>> 0;
|
|
1374
|
+
}
|
|
1194
1375
|
/**
|
|
1195
1376
|
* Decode PNG bytes and add them as a new image layer named `name` on
|
|
1196
1377
|
* top of the stack, at the current frame, anchored at the canvas
|
|
@@ -2046,6 +2227,22 @@ export class Document {
|
|
|
2046
2227
|
throw takeFromExternrefTable0(ret[0]);
|
|
2047
2228
|
}
|
|
2048
2229
|
}
|
|
2230
|
+
/**
|
|
2231
|
+
* Set the grid's offset (`x`, `y`) and cell size (`width` ×
|
|
2232
|
+
* `height`) as one undo entry; saved in the `.aseprite` header.
|
|
2233
|
+
* Errors, leaving the grid unchanged, for a cell size outside
|
|
2234
|
+
* 1–65535 or an offset outside −32768–32767.
|
|
2235
|
+
* @param {number} x
|
|
2236
|
+
* @param {number} y
|
|
2237
|
+
* @param {number} width
|
|
2238
|
+
* @param {number} height
|
|
2239
|
+
*/
|
|
2240
|
+
setGrid(x, y, width, height) {
|
|
2241
|
+
const ret = wasm.document_setGrid(this.__wbg_ptr, x, y, width, height);
|
|
2242
|
+
if (ret[1]) {
|
|
2243
|
+
throw takeFromExternrefTable0(ret[0]);
|
|
2244
|
+
}
|
|
2245
|
+
}
|
|
2049
2246
|
/**
|
|
2050
2247
|
* Set the named layer's blend mode by name (see [`blend_mode_names`]),
|
|
2051
2248
|
* routed through the undo bus. Emits `dirty-canvas`. Errors on an
|
|
@@ -2197,6 +2394,42 @@ export class Document {
|
|
|
2197
2394
|
throw takeFromExternrefTable0(ret[0]);
|
|
2198
2395
|
}
|
|
2199
2396
|
}
|
|
2397
|
+
/**
|
|
2398
|
+
* Mirror the gesture in progress (symmetry): every pixel it paints is
|
|
2399
|
+
* also painted at its mirror images. `axis_x2` / `axis_y2` are the
|
|
2400
|
+
* vertical / horizontal axis in half pixels from the left / top canvas
|
|
2401
|
+
* edge (column `x` mirrors to `axis_x2 − 1 − x`); absent turns that
|
|
2402
|
+
* axis off. Mirror images off the canvas are skipped unless the
|
|
2403
|
+
* gesture wraps. Call it after `beginStroke` / `beginShadingStroke`
|
|
2404
|
+
* and before the first [`Self::stroke_to`].
|
|
2405
|
+
*
|
|
2406
|
+
* Errors when no gesture is armed or it has already painted.
|
|
2407
|
+
* @param {number | null} [axis_x2]
|
|
2408
|
+
* @param {number | null} [axis_y2]
|
|
2409
|
+
*/
|
|
2410
|
+
setStrokeMirror(axis_x2, axis_y2) {
|
|
2411
|
+
const ret = wasm.document_setStrokeMirror(this.__wbg_ptr, isLikeNone(axis_x2) ? Number.MAX_SAFE_INTEGER : (axis_x2) >> 0, isLikeNone(axis_y2) ? Number.MAX_SAFE_INTEGER : (axis_y2) >> 0);
|
|
2412
|
+
if (ret[1]) {
|
|
2413
|
+
throw takeFromExternrefTable0(ret[0]);
|
|
2414
|
+
}
|
|
2415
|
+
}
|
|
2416
|
+
/**
|
|
2417
|
+
* Let the gesture in progress wrap across the canvas edges (tiled
|
|
2418
|
+
* mode): along a wrapped axis, points beyond the canvas are taken
|
|
2419
|
+
* modulo the canvas size instead of skipped, and the line between two
|
|
2420
|
+
* points continues at the opposite edge. Call it after `beginStroke` /
|
|
2421
|
+
* `beginShadingStroke` and before the first [`Self::stroke_to`].
|
|
2422
|
+
*
|
|
2423
|
+
* Errors when no gesture is armed or it has already painted.
|
|
2424
|
+
* @param {boolean} x
|
|
2425
|
+
* @param {boolean} y
|
|
2426
|
+
*/
|
|
2427
|
+
setStrokeWrap(x, y) {
|
|
2428
|
+
const ret = wasm.document_setStrokeWrap(this.__wbg_ptr, x, y);
|
|
2429
|
+
if (ret[1]) {
|
|
2430
|
+
throw takeFromExternrefTable0(ret[0]);
|
|
2431
|
+
}
|
|
2432
|
+
}
|
|
2200
2433
|
/**
|
|
2201
2434
|
* Set the playback direction of the tag at `index` by snake_case
|
|
2202
2435
|
* name. One undo entry.
|
|
@@ -2325,9 +2558,9 @@ export class Document {
|
|
|
2325
2558
|
return ret[0] >>> 0;
|
|
2326
2559
|
}
|
|
2327
2560
|
/**
|
|
2328
|
-
*
|
|
2329
|
-
* key has no center. Errors when
|
|
2330
|
-
* out of range.
|
|
2561
|
+
* `x` of the key's 9-patch center, relative to the key's bounds
|
|
2562
|
+
* origin, or `0` when the key has no center. Errors when
|
|
2563
|
+
* `slice_id` or `key_index` is out of range.
|
|
2331
2564
|
* @param {number} slice_id
|
|
2332
2565
|
* @param {number} key_index
|
|
2333
2566
|
* @returns {number}
|
|
@@ -2340,8 +2573,8 @@ export class Document {
|
|
|
2340
2573
|
return ret[0];
|
|
2341
2574
|
}
|
|
2342
2575
|
/**
|
|
2343
|
-
*
|
|
2344
|
-
* key has no center.
|
|
2576
|
+
* `y` of the key's 9-patch center, relative to the key's bounds
|
|
2577
|
+
* origin, or `0` when the key has no center.
|
|
2345
2578
|
* @param {number} slice_id
|
|
2346
2579
|
* @param {number} key_index
|
|
2347
2580
|
* @returns {number}
|
|
@@ -2420,8 +2653,8 @@ export class Document {
|
|
|
2420
2653
|
return ret[0] >>> 0;
|
|
2421
2654
|
}
|
|
2422
2655
|
/**
|
|
2423
|
-
*
|
|
2424
|
-
* no pivot.
|
|
2656
|
+
* `x` of the key's pivot, relative to the key's bounds origin
|
|
2657
|
+
* (may be negative), or `0` when the key has no pivot.
|
|
2425
2658
|
* @param {number} slice_id
|
|
2426
2659
|
* @param {number} key_index
|
|
2427
2660
|
* @returns {number}
|
|
@@ -2434,8 +2667,8 @@ export class Document {
|
|
|
2434
2667
|
return ret[0];
|
|
2435
2668
|
}
|
|
2436
2669
|
/**
|
|
2437
|
-
*
|
|
2438
|
-
* no pivot.
|
|
2670
|
+
* `y` of the key's pivot, relative to the key's bounds origin
|
|
2671
|
+
* (may be negative), or `0` when the key has no pivot.
|
|
2439
2672
|
* @param {number} slice_id
|
|
2440
2673
|
* @param {number} key_index
|
|
2441
2674
|
* @returns {number}
|
|
@@ -3033,6 +3266,17 @@ export function effectNames() {
|
|
|
3033
3266
|
return v1;
|
|
3034
3267
|
}
|
|
3035
3268
|
|
|
3269
|
+
/**
|
|
3270
|
+
* Number of [`Document`]s alive in this module (created and not yet
|
|
3271
|
+
* freed). A diagnostic: tests check that closing a tab frees its document
|
|
3272
|
+
* (docs/specs/document-tabs.md AC-16).
|
|
3273
|
+
* @returns {number}
|
|
3274
|
+
*/
|
|
3275
|
+
export function openDocumentCount() {
|
|
3276
|
+
const ret = wasm.openDocumentCount();
|
|
3277
|
+
return ret >>> 0;
|
|
3278
|
+
}
|
|
3279
|
+
|
|
3036
3280
|
/**
|
|
3037
3281
|
* A single composited frame returned to JS.
|
|
3038
3282
|
*
|
package/pincel_wasm_bg.wasm
CHANGED
|
Binary file
|