@amigo-labs/pincel-wasm 1.7.0 → 1.9.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 CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@amigo-labs/pincel-wasm",
3
3
  "type": "module",
4
4
  "description": "WebAssembly bindings for the Pincel core (wasm-bindgen / wasm-pack target)",
5
- "version": "1.7.0",
5
+ "version": "1.9.0",
6
6
  "license": "MIT OR Apache-2.0",
7
7
  "repository": {
8
8
  "type": "git",
package/pincel_wasm.d.ts CHANGED
@@ -681,6 +681,15 @@ export class Document {
681
681
  * selected).
682
682
  */
683
683
  invertSelection(): void;
684
+ /**
685
+ * Undo (`delta < 0`) or redo (`delta > 0`) `|delta|` steps in one
686
+ * call, as that many `undo` / `redo` calls would, and queue one dirty
687
+ * event for the result. Returns the steps moved. When a redo fails the
688
+ * document stays at the last state reached, the failed step stays
689
+ * redoable, and the error is returned (`docs/specs/history-panel.md`
690
+ * AC-05, AC-12, AC-13).
691
+ */
692
+ jumpHistory(delta: number): number;
684
693
  /**
685
694
  * Blend mode name of the named layer (`"normal"`, `"multiply"`, …),
686
695
  * or `"normal"` when the layer is unknown.
@@ -877,6 +886,12 @@ export class Document {
877
886
  * [`Document::compose`].
878
887
  */
879
888
  previewEffect(name: string, params: Float64Array, zoom: number): ComposeFrame;
889
+ /**
890
+ * The composite as `rotateLayer(angle, method)` would leave it,
891
+ * without touching the document or the undo stack. With nothing to
892
+ * rotate it shows the document unchanged.
893
+ */
894
+ previewRotate(angle: number, method: string, zoom: number): ComposeFrame;
880
895
  /**
881
896
  * Composite the current frame at `zoom` as it would look after
882
897
  * [`Document::draw_text`] with the same arguments, without touching
@@ -893,6 +908,10 @@ export class Document {
893
908
  * [`Document::undo`].
894
909
  */
895
910
  redo(): boolean;
911
+ /**
912
+ * The kind ids of the redo steps, in the order Redo restores them.
913
+ */
914
+ redoKinds(): string[];
896
915
  /**
897
916
  * Remove `frame`, shifting later cels, tags and slice keys down (see
898
917
  * `pincel_core::RemoveFrame`). The current frame is clamped into the
@@ -948,6 +967,25 @@ export class Document {
948
967
  * the new frame is dropped (undo restores it). Clears the selection.
949
968
  */
950
969
  resizeCanvas(width: number, height: number, anchor: string): void;
970
+ /**
971
+ * `[width, height]` of what `rotateLayer` would turn — the selection
972
+ * box, or the bounding box of the cel's visible pixels — or an empty
973
+ * array when there is nothing to rotate.
974
+ */
975
+ rotateInputSize(): Uint32Array;
976
+ /**
977
+ * Rotate the active layer's cel at the current frame clockwise by
978
+ * `angle` degrees with `method` (`nearest` or `rotsprite`); with a
979
+ * selection only its content turns. The cel grows to hold the
980
+ * result. One undo entry. `Ok(false)` when there is nothing visible
981
+ * to rotate (nothing changes); errors on a locked layer, an unknown
982
+ * method or a RotSprite input over [`Document::rotsprite_max_side`].
983
+ */
984
+ rotateLayer(angle: number, method: string): boolean;
985
+ /**
986
+ * Largest input width or height RotSprite accepts (512).
987
+ */
988
+ rotspriteMaxSide(): number;
951
989
  /**
952
990
  * Serialize this document to an Aseprite v1.3 byte vector.
953
991
  *
@@ -1080,6 +1118,14 @@ export class Document {
1080
1118
  * the undo stack in the M7.8 slice (see spec §5.2).
1081
1119
  */
1082
1120
  setSelection(x: number, y: number, width: number, height: number): void;
1121
+ /**
1122
+ * Replace the selection with canvas-sized coverage bytes, as
1123
+ * `selectionMask` returns them (non-zero = selected). An empty array or
1124
+ * an all-zero mask clears the selection. Restores a selection the UI
1125
+ * saved earlier, e.g. for the Magic Wand link (pixel-selection-move
1126
+ * AC-25). Errors when the length isn't `width × height`.
1127
+ */
1128
+ setSelectionMask(mask: Uint8Array): void;
1083
1129
  /**
1084
1130
  * Upsert a per-frame [`SliceKey`] on the named slice. If the
1085
1131
  * slice already carries a key for `frame`, the existing key is
@@ -1253,6 +1299,21 @@ export class Document {
1253
1299
  * interpolated linearly between consecutive points.
1254
1300
  */
1255
1301
  strokeTo(x: number, y: number, pressure?: number | null): void;
1302
+ /**
1303
+ * [`Self::stroke_to`] for several pointer samples at once — all
1304
+ * samples of one animation frame (`docs/specs/performance-input-path.md`).
1305
+ * Paints exactly what calling `strokeTo` once per point would, but
1306
+ * emits one `dirty-rect` covering the whole batch.
1307
+ *
1308
+ * - `xy`: the sprite-space points as `x0, y0, x1, y1, …`.
1309
+ * - `pressure`: empty for full pressure at every point, otherwise one
1310
+ * value per point (as `strokeTo`'s `pressure`).
1311
+ *
1312
+ * Errors for an odd `xy` length, a `pressure` length that is neither
1313
+ * zero nor the point count, or no stroke in progress; points before a
1314
+ * failing one stay painted.
1315
+ */
1316
+ strokeToBatch(xy: Int32Array, pressure: Float32Array): void;
1256
1317
  /**
1257
1318
  * Display color of the tag at `index`, packed `0xRRGGBBAA`.
1258
1319
  */
@@ -1349,6 +1410,10 @@ export class Document {
1349
1410
  * follow-up).
1350
1411
  */
1351
1412
  undo(): boolean;
1413
+ /**
1414
+ * The kind ids of the undo steps, oldest first.
1415
+ */
1416
+ undoKinds(): string[];
1352
1417
  /**
1353
1418
  * A [`Vectorizer`] over `frame` composed like
1354
1419
  * [`exportPng`](Document::export_png): zoom 1, visible layers, no onion
@@ -1393,6 +1458,15 @@ export class Document {
1393
1458
  * Canvas height in pixels.
1394
1459
  */
1395
1460
  readonly height: number;
1461
+ /**
1462
+ * `true` once the 100-step cap has dropped a step from the history.
1463
+ */
1464
+ readonly historyDropped: boolean;
1465
+ /**
1466
+ * Changes whenever the list of steps changes, so the UI re-reads
1467
+ * [`Document::undo_kinds`] / [`Document::redo_kinds`] only then.
1468
+ */
1469
+ readonly historyRevision: number;
1396
1470
  /**
1397
1471
  * Number of layers in the document, including invisible ones.
1398
1472
  */
@@ -1563,6 +1637,12 @@ export function blendModeNames(): string[];
1563
1637
  */
1564
1638
  export function effectNames(): string[];
1565
1639
 
1640
+ /**
1641
+ * Every history kind id the Pixel core reports, fixed kinds first, then
1642
+ * `effect.<name>` per effect (`docs/specs/history-panel.md` AC-15).
1643
+ */
1644
+ export function historyKindIds(): string[];
1645
+
1566
1646
  /**
1567
1647
  * Number of [`Document`]s alive in this module (created and not yet
1568
1648
  * freed). A diagnostic: tests check that closing a tab frees its document
@@ -1594,83 +1674,162 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
1594
1674
 
1595
1675
  export interface InitOutput {
1596
1676
  readonly memory: WebAssembly.Memory;
1677
+ readonly __wbg_animationinfo_free: (a: number, b: number) => void;
1597
1678
  readonly __wbg_atlasexport_free: (a: number, b: number) => void;
1598
1679
  readonly __wbg_composeframe_free: (a: number, b: number) => void;
1599
1680
  readonly __wbg_document_free: (a: number, b: number) => void;
1681
+ readonly __wbg_event_free: (a: number, b: number) => void;
1682
+ readonly __wbg_vectorizer_free: (a: number, b: number) => void;
1683
+ readonly __wbg_vectorizeresult_free: (a: number, b: number) => void;
1684
+ readonly animationinfo_defaultLoops: (a: number) => number;
1685
+ readonly animationinfo_frameCount: (a: number) => number;
1686
+ readonly animationinfo_gifApproximated: (a: number) => number;
1687
+ readonly animationinfo_semiTransparent: (a: number) => number;
1600
1688
  readonly atlasexport_data: (a: number) => [number, number];
1601
1689
  readonly atlasexport_manifest: (a: number) => [number, number];
1602
1690
  readonly atlasexport_png: (a: number) => [number, number];
1691
+ readonly blendModeNames: () => [number, number];
1603
1692
  readonly composeframe_dirtyX: (a: number) => number;
1604
1693
  readonly composeframe_dirtyY: (a: number) => number;
1605
1694
  readonly composeframe_height: (a: number) => number;
1606
1695
  readonly composeframe_pixels: (a: number) => [number, number];
1607
1696
  readonly composeframe_width: (a: number) => number;
1608
1697
  readonly document_addFrame: (a: number, b: number) => [number, number, number];
1698
+ readonly document_addGroup: (a: number, b: number, c: number) => [number, number, number];
1609
1699
  readonly document_addLayer: (a: number, b: number, c: number) => [number, number, number];
1610
1700
  readonly document_addPaletteEntry: (a: number, b: number) => [number, number, number];
1611
1701
  readonly document_addSlice: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number];
1702
+ readonly document_addTag: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
1612
1703
  readonly document_addTile: (a: number, b: number) => [number, number, number];
1613
1704
  readonly document_addTilemapLayer: (a: number, b: number, c: number, d: number) => [number, number, number];
1614
1705
  readonly document_addTileset: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
1706
+ readonly document_animationInfo: (a: number, b: number, c: number) => [number, number, number];
1615
1707
  readonly document_applyBucket: (a: number, b: number, c: number, d: number) => [number, number];
1708
+ readonly document_applyEffect: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
1616
1709
  readonly document_applyEllipse: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1710
+ readonly document_applyGradient: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number];
1617
1711
  readonly document_applyLine: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1618
1712
  readonly document_applyMoveSelection: (a: number, b: number, c: number) => [number, number];
1619
1713
  readonly document_applyRectangle: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1714
+ 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];
1620
1715
  readonly document_applyTool: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1716
+ readonly document_beginShadingStroke: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
1717
+ readonly document_beginStroke: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
1621
1718
  readonly document_clearSelection: (a: number) => void;
1622
1719
  readonly document_compose: (a: number, b: number, c: number) => [number, number, number];
1623
1720
  readonly document_composeDirty: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number];
1624
1721
  readonly document_composeFrame: (a: number, b: number, c: number, d: number) => [number, number, number];
1722
+ readonly document_contractSelection: (a: number, b: number) => void;
1723
+ readonly document_copySelection: (a: number, b: number) => [number, number, number];
1724
+ readonly document_cropToSelection: (a: number) => [number, number, number];
1625
1725
  readonly document_currentFrame: (a: number) => number;
1726
+ readonly document_cutSelection: (a: number) => [number, number, number];
1626
1727
  readonly document_deleteSelection: (a: number) => [number, number, number];
1627
1728
  readonly document_drainEvents: (a: number) => [number, number];
1729
+ 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];
1730
+ readonly document_duplicateLayer: (a: number, b: number) => [number, number, number];
1628
1731
  readonly document_endStroke: (a: number) => void;
1732
+ readonly document_expandSelection: (a: number, b: number) => void;
1733
+ readonly document_exportAnimation: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
1629
1734
  readonly document_exportAtlas: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number];
1630
1735
  readonly document_exportGpl: (a: number, b: number, c: number) => [number, number];
1631
1736
  readonly document_exportPalette: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
1632
1737
  readonly document_exportPng: (a: number, b: number, c: number) => [number, number, number, number];
1738
+ readonly document_flattenImage: (a: number) => [number, number, number];
1633
1739
  readonly document_frameCount: (a: number) => number;
1740
+ readonly document_frameDuration: (a: number, b: number) => [number, number, number];
1741
+ readonly document_gridHeight: (a: number) => number;
1742
+ readonly document_gridWidth: (a: number) => number;
1743
+ readonly document_gridX: (a: number) => number;
1744
+ readonly document_gridY: (a: number) => number;
1634
1745
  readonly document_hasSelection: (a: number) => number;
1635
1746
  readonly document_height: (a: number) => number;
1747
+ readonly document_historyDropped: (a: number) => number;
1748
+ readonly document_historyRevision: (a: number) => number;
1749
+ readonly document_imageKey: (a: number, b: number) => [number, number, number, number];
1636
1750
  readonly document_importGpl: (a: number, b: number, c: number) => [number, number, number];
1637
1751
  readonly document_importPalette: (a: number, b: number, c: number) => [number, number, number];
1752
+ readonly document_importPngAsLayer: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
1753
+ readonly document_invertSelection: (a: number) => void;
1754
+ readonly document_jumpHistory: (a: number, b: number) => [number, number, number];
1755
+ readonly document_layerBlendMode: (a: number, b: number) => [number, number];
1638
1756
  readonly document_layerCount: (a: number) => number;
1757
+ readonly document_layerDepth: (a: number, b: number) => number;
1758
+ readonly document_layerEditable: (a: number, b: number) => number;
1639
1759
  readonly document_layerIdAt: (a: number, b: number) => [number, number, number];
1640
1760
  readonly document_layerKind: (a: number, b: number) => [number, number];
1761
+ readonly document_layerLocked: (a: number, b: number) => number;
1641
1762
  readonly document_layerName: (a: number, b: number) => [number, number];
1642
1763
  readonly document_layerOpacity: (a: number, b: number) => number;
1764
+ readonly document_layerParent: (a: number, b: number) => number;
1765
+ readonly document_layerThumbnail: (a: number, b: number, c: number, d: number) => [number, number, number];
1643
1766
  readonly document_layerTilesetId: (a: number, b: number) => number;
1644
1767
  readonly document_layerVisible: (a: number, b: number) => number;
1768
+ readonly document_mergeDown: (a: number, b: number) => [number, number];
1645
1769
  readonly document_moveLayerDown: (a: number, b: number) => [number, number];
1770
+ readonly document_moveLayerTo: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1646
1771
  readonly document_moveLayerUp: (a: number, b: number) => [number, number];
1647
1772
  readonly document_movePaletteEntry: (a: number, b: number, c: number) => [number, number];
1648
1773
  readonly document_new: (a: number, b: number) => [number, number, number];
1774
+ readonly document_onionSkinEnabled: (a: number) => number;
1649
1775
  readonly document_openAseprite: (a: number, b: number) => [number, number, number];
1776
+ readonly document_openPng: (a: number, b: number) => [number, number, number];
1650
1777
  readonly document_paintTargetLayer: (a: number) => number;
1651
1778
  readonly document_paletteColor: (a: number, b: number) => [number, number, number];
1652
1779
  readonly document_paletteCount: (a: number) => number;
1653
1780
  readonly document_paletteName: (a: number, b: number) => [number, number, number, number];
1781
+ readonly document_pasteLayer: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
1654
1782
  readonly document_pickColor: (a: number, b: number, c: number, d: number) => [number, number, number];
1655
1783
  readonly document_placeTile: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1784
+ readonly document_previewEffect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
1785
+ readonly document_previewRotate: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
1786
+ 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];
1656
1787
  readonly document_redo: (a: number) => [number, number, number];
1657
1788
  readonly document_redoDepth: (a: number) => number;
1789
+ readonly document_redoKinds: (a: number) => [number, number];
1790
+ readonly document_removeFrame: (a: number, b: number) => [number, number];
1658
1791
  readonly document_removeLayer: (a: number, b: number) => [number, number];
1659
1792
  readonly document_removePaletteEntry: (a: number, b: number) => [number, number];
1660
1793
  readonly document_removeSlice: (a: number, b: number) => [number, number];
1794
+ readonly document_removeTag: (a: number, b: number) => [number, number];
1661
1795
  readonly document_renameLayer: (a: number, b: number, c: number, d: number) => [number, number];
1796
+ readonly document_reorderLayer: (a: number, b: number, c: number) => [number, number];
1797
+ readonly document_resizeCanvas: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1798
+ readonly document_rotateInputSize: (a: number) => [number, number];
1799
+ readonly document_rotateLayer: (a: number, b: number, c: number, d: number) => [number, number, number];
1800
+ readonly document_rotspriteMaxSide: (a: number) => number;
1662
1801
  readonly document_saveAseprite: (a: number) => [number, number, number, number];
1802
+ readonly document_scaleImage: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1803
+ readonly document_selectAll: (a: number) => void;
1804
+ readonly document_selectEllipse: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1805
+ readonly document_selectPolygon: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1806
+ readonly document_selectRect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1807
+ readonly document_selectWand: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
1663
1808
  readonly document_selectionHeight: (a: number) => number;
1809
+ readonly document_selectionIsRect: (a: number) => number;
1810
+ readonly document_selectionMask: (a: number) => [number, number];
1664
1811
  readonly document_selectionWidth: (a: number) => number;
1665
1812
  readonly document_selectionX: (a: number) => number;
1666
1813
  readonly document_selectionY: (a: number) => number;
1667
1814
  readonly document_setActiveLayer: (a: number, b: number) => void;
1668
1815
  readonly document_setCurrentFrame: (a: number, b: number) => [number, number];
1816
+ readonly document_setFrameDuration: (a: number, b: number, c: number) => [number, number];
1817
+ readonly document_setGrid: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1818
+ readonly document_setLayerBlendMode: (a: number, b: number, c: number, d: number) => [number, number];
1819
+ readonly document_setLayerEditable: (a: number, b: number, c: number) => [number, number];
1820
+ readonly document_setLayerOpacity: (a: number, b: number, c: number) => [number, number];
1669
1821
  readonly document_setLayerVisible: (a: number, b: number, c: number) => [number, number];
1822
+ readonly document_setOnionSkin: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
1670
1823
  readonly document_setPaletteColor: (a: number, b: number, c: number) => [number, number];
1671
1824
  readonly document_setPalettePreset: (a: number, b: number, c: number) => [number, number];
1672
1825
  readonly document_setSelection: (a: number, b: number, c: number, d: number, e: number) => void;
1826
+ readonly document_setSelectionMask: (a: number, b: number, c: number) => [number, number];
1673
1827
  readonly document_setSliceKey: (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];
1828
+ readonly document_setStrokeMirror: (a: number, b: number, c: number) => [number, number];
1829
+ readonly document_setStrokeWrap: (a: number, b: number, c: number) => [number, number];
1830
+ readonly document_setTagDirection: (a: number, b: number, c: number, d: number) => [number, number];
1831
+ readonly document_setTagName: (a: number, b: number, c: number, d: number) => [number, number];
1832
+ readonly document_setTagRange: (a: number, b: number, c: number, d: number) => [number, number];
1674
1833
  readonly document_setTilePixel: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1675
1834
  readonly document_sliceColor: (a: number, b: number) => number;
1676
1835
  readonly document_sliceCount: (a: number) => number;
@@ -1690,6 +1849,14 @@ export interface InitOutput {
1690
1849
  readonly document_sliceKeyX: (a: number, b: number, c: number) => [number, number, number];
1691
1850
  readonly document_sliceKeyY: (a: number, b: number, c: number) => [number, number, number];
1692
1851
  readonly document_sliceName: (a: number, b: number) => [number, number];
1852
+ readonly document_strokeTo: (a: number, b: number, c: number, d: number) => [number, number];
1853
+ readonly document_strokeToBatch: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1854
+ readonly document_tagColor: (a: number, b: number) => [number, number, number];
1855
+ readonly document_tagCount: (a: number) => number;
1856
+ readonly document_tagDirection: (a: number, b: number) => [number, number, number, number];
1857
+ readonly document_tagFrom: (a: number, b: number) => [number, number, number];
1858
+ readonly document_tagName: (a: number, b: number) => [number, number, number, number];
1859
+ readonly document_tagTo: (a: number, b: number) => [number, number, number];
1693
1860
  readonly document_tilePixels: (a: number, b: number, c: number) => [number, number, number, number];
1694
1861
  readonly document_tilesetCount: (a: number) => number;
1695
1862
  readonly document_tilesetIdAt: (a: number, b: number) => [number, number, number];
@@ -1697,111 +1864,36 @@ export interface InitOutput {
1697
1864
  readonly document_tilesetTileCount: (a: number, b: number) => number;
1698
1865
  readonly document_tilesetTileHeight: (a: number, b: number) => number;
1699
1866
  readonly document_tilesetTileWidth: (a: number, b: number) => number;
1867
+ readonly document_transformCanvas: (a: number, b: number, c: number) => [number, number];
1868
+ readonly document_transformLayer: (a: number, b: number, c: number) => [number, number];
1700
1869
  readonly document_undo: (a: number) => number;
1701
1870
  readonly document_undoDepth: (a: number) => number;
1702
- readonly document_width: (a: number) => number;
1703
- readonly palettePresetNames: () => [number, number];
1704
- readonly openDocumentCount: () => number;
1705
- readonly document_contractSelection: (a: number, b: number) => void;
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];
1708
- readonly document_invertSelection: (a: number) => void;
1709
- readonly document_openPng: (a: number, b: number) => [number, number, number];
1710
- readonly document_selectAll: (a: number) => void;
1711
- readonly document_selectEllipse: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1712
- readonly document_selectPolygon: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1713
- readonly document_selectRect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1714
- readonly document_selectWand: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
1715
- readonly document_selectionIsRect: (a: number) => number;
1716
- readonly document_selectionMask: (a: number) => [number, number];
1717
- readonly __wbg_vectorizer_free: (a: number, b: number) => void;
1718
- readonly __wbg_vectorizeresult_free: (a: number, b: number) => void;
1719
- readonly document_addTag: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
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];
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];
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;
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];
1730
- readonly document_removeFrame: (a: number, b: number) => [number, number];
1731
- readonly document_removeTag: (a: number, b: number) => [number, number];
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];
1734
- readonly document_setOnionSkin: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
1735
- readonly document_setTagDirection: (a: number, b: number, c: number, d: number) => [number, number];
1736
- readonly document_setTagName: (a: number, b: number, c: number, d: number) => [number, number];
1737
- readonly document_setTagRange: (a: number, b: number, c: number, d: number) => [number, number];
1738
- readonly document_tagColor: (a: number, b: number) => [number, number, number];
1739
- readonly document_tagCount: (a: number) => number;
1740
- readonly document_tagDirection: (a: number, b: number) => [number, number, number, number];
1741
- readonly document_tagFrom: (a: number, b: number) => [number, number, number];
1742
- readonly document_tagName: (a: number, b: number) => [number, number, number, number];
1743
- readonly document_tagTo: (a: number, b: number) => [number, number, number];
1871
+ readonly document_undoKinds: (a: number) => [number, number];
1744
1872
  readonly document_vectorizer: (a: number, b: number) => [number, number, number];
1873
+ readonly document_width: (a: number) => number;
1745
1874
  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;
1759
1875
  readonly event_frame: (a: number) => number;
1760
- readonly event_height: (a: number) => number;
1761
1876
  readonly event_kind: (a: number) => [number, number];
1762
- readonly event_layer: (a: number) => number;
1763
- readonly event_width: (a: number) => number;
1764
1877
  readonly event_x: (a: number) => number;
1765
- readonly event_y: (a: number) => number;
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];
1878
+ readonly historyKindIds: () => [number, number];
1879
+ readonly palettePresetNames: () => [number, number];
1784
1880
  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;
1881
+ readonly vectorizer_trace: (a: number, b: number, c: number, d: number) => [number, number, number];
1882
+ readonly vectorizeresult_svg: (a: number) => [number, number];
1791
1883
  readonly copiedimage_height: (a: number) => number;
1792
- readonly copiedimage_png: (a: number) => [number, number];
1793
1884
  readonly copiedimage_width: (a: number) => number;
1794
1885
  readonly copiedimage_x: (a: number) => number;
1795
1886
  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];
1887
+ readonly event_height: (a: number) => number;
1888
+ readonly event_layer: (a: number) => number;
1889
+ readonly event_width: (a: number) => number;
1890
+ readonly event_y: (a: number) => number;
1891
+ readonly vectorizeresult_layers: (a: number) => number;
1892
+ readonly vectorizeresult_outlines: (a: number) => number;
1893
+ readonly vectorizeresult_threshold: (a: number) => number;
1894
+ readonly copiedimage_png: (a: number) => [number, number];
1895
+ readonly openDocumentCount: () => number;
1896
+ readonly __wbg_copiedimage_free: (a: number, b: number) => void;
1805
1897
  readonly __wbindgen_externrefs: WebAssembly.Table;
1806
1898
  readonly __wbindgen_free: (a: number, b: number, c: number) => void;
1807
1899
  readonly __externref_drop_slice: (a: number, b: number) => void;
package/pincel_wasm.js CHANGED
@@ -1307,6 +1307,23 @@ export class Document {
1307
1307
  const ret = wasm.document_height(this.__wbg_ptr);
1308
1308
  return ret >>> 0;
1309
1309
  }
1310
+ /**
1311
+ * `true` once the 100-step cap has dropped a step from the history.
1312
+ * @returns {boolean}
1313
+ */
1314
+ get historyDropped() {
1315
+ const ret = wasm.document_historyDropped(this.__wbg_ptr);
1316
+ return ret !== 0;
1317
+ }
1318
+ /**
1319
+ * Changes whenever the list of steps changes, so the UI re-reads
1320
+ * [`Document::undo_kinds`] / [`Document::redo_kinds`] only then.
1321
+ * @returns {number}
1322
+ */
1323
+ get historyRevision() {
1324
+ const ret = wasm.document_historyRevision(this.__wbg_ptr);
1325
+ return ret >>> 0;
1326
+ }
1310
1327
  /**
1311
1328
  * Clipboard identity of encoded PNG `bytes`: size plus a hash of the
1312
1329
  * decoded pixels, equal for two encodings of the same image. Tells
@@ -1400,6 +1417,23 @@ export class Document {
1400
1417
  invertSelection() {
1401
1418
  wasm.document_invertSelection(this.__wbg_ptr);
1402
1419
  }
1420
+ /**
1421
+ * Undo (`delta < 0`) or redo (`delta > 0`) `|delta|` steps in one
1422
+ * call, as that many `undo` / `redo` calls would, and queue one dirty
1423
+ * event for the result. Returns the steps moved. When a redo fails the
1424
+ * document stays at the last state reached, the failed step stays
1425
+ * redoable, and the error is returned (`docs/specs/history-panel.md`
1426
+ * AC-05, AC-12, AC-13).
1427
+ * @param {number} delta
1428
+ * @returns {number}
1429
+ */
1430
+ jumpHistory(delta) {
1431
+ const ret = wasm.document_jumpHistory(this.__wbg_ptr, delta);
1432
+ if (ret[2]) {
1433
+ throw takeFromExternrefTable0(ret[1]);
1434
+ }
1435
+ return ret[0] >>> 0;
1436
+ }
1403
1437
  /**
1404
1438
  * Blend mode name of the named layer (`"normal"`, `"multiply"`, …),
1405
1439
  * or `"normal"` when the layer is unknown.
@@ -1857,6 +1891,24 @@ export class Document {
1857
1891
  }
1858
1892
  return ComposeFrame.__wrap(ret[0]);
1859
1893
  }
1894
+ /**
1895
+ * The composite as `rotateLayer(angle, method)` would leave it,
1896
+ * without touching the document or the undo stack. With nothing to
1897
+ * rotate it shows the document unchanged.
1898
+ * @param {number} angle
1899
+ * @param {string} method
1900
+ * @param {number} zoom
1901
+ * @returns {ComposeFrame}
1902
+ */
1903
+ previewRotate(angle, method, zoom) {
1904
+ const ptr0 = passStringToWasm0(method, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1905
+ const len0 = WASM_VECTOR_LEN;
1906
+ const ret = wasm.document_previewRotate(this.__wbg_ptr, angle, ptr0, len0, zoom);
1907
+ if (ret[2]) {
1908
+ throw takeFromExternrefTable0(ret[1]);
1909
+ }
1910
+ return ComposeFrame.__wrap(ret[0]);
1911
+ }
1860
1912
  /**
1861
1913
  * Composite the current frame at `zoom` as it would look after
1862
1914
  * [`Document::draw_text`] with the same arguments, without touching
@@ -1910,6 +1962,16 @@ export class Document {
1910
1962
  const ret = wasm.document_redoDepth(this.__wbg_ptr);
1911
1963
  return ret >>> 0;
1912
1964
  }
1965
+ /**
1966
+ * The kind ids of the redo steps, in the order Redo restores them.
1967
+ * @returns {string[]}
1968
+ */
1969
+ redoKinds() {
1970
+ const ret = wasm.document_redoKinds(this.__wbg_ptr);
1971
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
1972
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
1973
+ return v1;
1974
+ }
1913
1975
  /**
1914
1976
  * Remove `frame`, shifting later cels, tags and slice keys down (see
1915
1977
  * `pincel_core::RemoveFrame`). The current frame is clamped into the
@@ -2021,6 +2083,46 @@ export class Document {
2021
2083
  throw takeFromExternrefTable0(ret[0]);
2022
2084
  }
2023
2085
  }
2086
+ /**
2087
+ * `[width, height]` of what `rotateLayer` would turn — the selection
2088
+ * box, or the bounding box of the cel's visible pixels — or an empty
2089
+ * array when there is nothing to rotate.
2090
+ * @returns {Uint32Array}
2091
+ */
2092
+ rotateInputSize() {
2093
+ const ret = wasm.document_rotateInputSize(this.__wbg_ptr);
2094
+ var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();
2095
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
2096
+ return v1;
2097
+ }
2098
+ /**
2099
+ * Rotate the active layer's cel at the current frame clockwise by
2100
+ * `angle` degrees with `method` (`nearest` or `rotsprite`); with a
2101
+ * selection only its content turns. The cel grows to hold the
2102
+ * result. One undo entry. `Ok(false)` when there is nothing visible
2103
+ * to rotate (nothing changes); errors on a locked layer, an unknown
2104
+ * method or a RotSprite input over [`Document::rotsprite_max_side`].
2105
+ * @param {number} angle
2106
+ * @param {string} method
2107
+ * @returns {boolean}
2108
+ */
2109
+ rotateLayer(angle, method) {
2110
+ const ptr0 = passStringToWasm0(method, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
2111
+ const len0 = WASM_VECTOR_LEN;
2112
+ const ret = wasm.document_rotateLayer(this.__wbg_ptr, angle, ptr0, len0);
2113
+ if (ret[2]) {
2114
+ throw takeFromExternrefTable0(ret[1]);
2115
+ }
2116
+ return ret[0] !== 0;
2117
+ }
2118
+ /**
2119
+ * Largest input width or height RotSprite accepts (512).
2120
+ * @returns {number}
2121
+ */
2122
+ rotspriteMaxSide() {
2123
+ const ret = wasm.document_rotspriteMaxSide(this.__wbg_ptr);
2124
+ return ret >>> 0;
2125
+ }
2024
2126
  /**
2025
2127
  * Serialize this document to an Aseprite v1.3 byte vector.
2026
2128
  *
@@ -2359,6 +2461,22 @@ export class Document {
2359
2461
  setSelection(x, y, width, height) {
2360
2462
  wasm.document_setSelection(this.__wbg_ptr, x, y, width, height);
2361
2463
  }
2464
+ /**
2465
+ * Replace the selection with canvas-sized coverage bytes, as
2466
+ * `selectionMask` returns them (non-zero = selected). An empty array or
2467
+ * an all-zero mask clears the selection. Restores a selection the UI
2468
+ * saved earlier, e.g. for the Magic Wand link (pixel-selection-move
2469
+ * AC-25). Errors when the length isn't `width × height`.
2470
+ * @param {Uint8Array} mask
2471
+ */
2472
+ setSelectionMask(mask) {
2473
+ const ptr0 = passArray8ToWasm0(mask, wasm.__wbindgen_malloc);
2474
+ const len0 = WASM_VECTOR_LEN;
2475
+ const ret = wasm.document_setSelectionMask(this.__wbg_ptr, ptr0, len0);
2476
+ if (ret[1]) {
2477
+ throw takeFromExternrefTable0(ret[0]);
2478
+ }
2479
+ }
2362
2480
  /**
2363
2481
  * Upsert a per-frame [`SliceKey`] on the named slice. If the
2364
2482
  * slice already carries a key for `frame`, the existing key is
@@ -2763,6 +2881,32 @@ export class Document {
2763
2881
  throw takeFromExternrefTable0(ret[0]);
2764
2882
  }
2765
2883
  }
2884
+ /**
2885
+ * [`Self::stroke_to`] for several pointer samples at once — all
2886
+ * samples of one animation frame (`docs/specs/performance-input-path.md`).
2887
+ * Paints exactly what calling `strokeTo` once per point would, but
2888
+ * emits one `dirty-rect` covering the whole batch.
2889
+ *
2890
+ * - `xy`: the sprite-space points as `x0, y0, x1, y1, …`.
2891
+ * - `pressure`: empty for full pressure at every point, otherwise one
2892
+ * value per point (as `strokeTo`'s `pressure`).
2893
+ *
2894
+ * Errors for an odd `xy` length, a `pressure` length that is neither
2895
+ * zero nor the point count, or no stroke in progress; points before a
2896
+ * failing one stay painted.
2897
+ * @param {Int32Array} xy
2898
+ * @param {Float32Array} pressure
2899
+ */
2900
+ strokeToBatch(xy, pressure) {
2901
+ const ptr0 = passArray32ToWasm0(xy, wasm.__wbindgen_malloc);
2902
+ const len0 = WASM_VECTOR_LEN;
2903
+ const ptr1 = passArrayF32ToWasm0(pressure, wasm.__wbindgen_malloc);
2904
+ const len1 = WASM_VECTOR_LEN;
2905
+ const ret = wasm.document_strokeToBatch(this.__wbg_ptr, ptr0, len0, ptr1, len1);
2906
+ if (ret[1]) {
2907
+ throw takeFromExternrefTable0(ret[0]);
2908
+ }
2909
+ }
2766
2910
  /**
2767
2911
  * Display color of the tag at `index`, packed `0xRRGGBBAA`.
2768
2912
  * @param {number} index
@@ -3012,6 +3156,16 @@ export class Document {
3012
3156
  const ret = wasm.document_undoDepth(this.__wbg_ptr);
3013
3157
  return ret >>> 0;
3014
3158
  }
3159
+ /**
3160
+ * The kind ids of the undo steps, oldest first.
3161
+ * @returns {string[]}
3162
+ */
3163
+ undoKinds() {
3164
+ const ret = wasm.document_undoKinds(this.__wbg_ptr);
3165
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
3166
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
3167
+ return v1;
3168
+ }
3015
3169
  /**
3016
3170
  * A [`Vectorizer`] over `frame` composed like
3017
3171
  * [`exportPng`](Document::export_png): zoom 1, visible layers, no onion
@@ -3266,6 +3420,18 @@ export function effectNames() {
3266
3420
  return v1;
3267
3421
  }
3268
3422
 
3423
+ /**
3424
+ * Every history kind id the Pixel core reports, fixed kinds first, then
3425
+ * `effect.<name>` per effect (`docs/specs/history-panel.md` AC-15).
3426
+ * @returns {string[]}
3427
+ */
3428
+ export function historyKindIds() {
3429
+ const ret = wasm.historyKindIds();
3430
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
3431
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
3432
+ return v1;
3433
+ }
3434
+
3269
3435
  /**
3270
3436
  * Number of [`Document`]s alive in this module (created and not yet
3271
3437
  * freed). A diagnostic: tests check that closing a tab frees its document
@@ -3376,6 +3542,11 @@ function getArrayJsValueFromWasm0(ptr, len) {
3376
3542
  return result;
3377
3543
  }
3378
3544
 
3545
+ function getArrayU32FromWasm0(ptr, len) {
3546
+ ptr = ptr >>> 0;
3547
+ return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
3548
+ }
3549
+
3379
3550
  function getArrayU8FromWasm0(ptr, len) {
3380
3551
  ptr = ptr >>> 0;
3381
3552
  return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
@@ -3389,6 +3560,14 @@ function getDataViewMemory0() {
3389
3560
  return cachedDataViewMemory0;
3390
3561
  }
3391
3562
 
3563
+ let cachedFloat32ArrayMemory0 = null;
3564
+ function getFloat32ArrayMemory0() {
3565
+ if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {
3566
+ cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);
3567
+ }
3568
+ return cachedFloat32ArrayMemory0;
3569
+ }
3570
+
3392
3571
  let cachedFloat64ArrayMemory0 = null;
3393
3572
  function getFloat64ArrayMemory0() {
3394
3573
  if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {
@@ -3435,6 +3614,13 @@ function passArray8ToWasm0(arg, malloc) {
3435
3614
  return ptr;
3436
3615
  }
3437
3616
 
3617
+ function passArrayF32ToWasm0(arg, malloc) {
3618
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
3619
+ getFloat32ArrayMemory0().set(arg, ptr / 4);
3620
+ WASM_VECTOR_LEN = arg.length;
3621
+ return ptr;
3622
+ }
3623
+
3438
3624
  function passArrayF64ToWasm0(arg, malloc) {
3439
3625
  const ptr = malloc(arg.length * 8, 8) >>> 0;
3440
3626
  getFloat64ArrayMemory0().set(arg, ptr / 8);
@@ -3520,6 +3706,7 @@ function __wbg_finalize_init(instance, module) {
3520
3706
  wasm = instance.exports;
3521
3707
  wasmModule = module;
3522
3708
  cachedDataViewMemory0 = null;
3709
+ cachedFloat32ArrayMemory0 = null;
3523
3710
  cachedFloat64ArrayMemory0 = null;
3524
3711
  cachedUint32ArrayMemory0 = null;
3525
3712
  cachedUint8ArrayMemory0 = null;
Binary file