Remove all use of document indices (#406)

* removed all use of document indicies

* -add u64 support for wasm bridge

* fixed rust formating

* Cleaned up FrontendDocumentState in js-messages

* Tiny tweaks from code review

* - moved more of closeDocumentWithConfirmation to rust
- updated serde_wasm_bindgen to add feature flag

* changed to upsteam version of serde_wasm_bindgen

* cargo fmt

* -fix event propigation on delete
- Js message change class extention to typedef

* changed another typedef

* cargo fmt

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
mfish33
2021-12-24 19:07:19 -05:00
committed by Keavon Chambers
co-authored by Keavon Chambers
parent 1594b9c61d
commit 04c1b2ed03
13 changed files with 213 additions and 184 deletions
+28 -22
View File
@@ -19,19 +19,31 @@ export class JsMessage {
// for details about how to transform the JSON from wasm-bindgen into classes.
// ============================================================================
export class UpdateOpenDocumentsList extends JsMessage {
@Transform(({ value }) => value.map((tuple: [string, boolean]) => ({ name: tuple[0], isSaved: tuple[1] })))
readonly open_documents!: { name: string; isSaved: boolean }[];
export class FrontendDocumentDetails {
readonly name!: string;
readonly is_saved!: boolean;
readonly id!: BigInt;
get displayName() {
return `${this.name}${this.is_saved ? "" : "*"}`;
}
}
export class UpdateOpenDocumentsList extends JsMessage {
@Type(() => FrontendDocumentDetails)
readonly open_documents!: FrontendDocumentDetails[];
}
export type HintData = HintInfo[][];
export class UpdateInputHints extends JsMessage {
@Type(() => HintInfo)
readonly hint_data!: HintData;
}
export class HintGroup extends Array<HintInfo> {}
export class HintData extends Array<HintGroup> {}
export type KeysGroup = string[];
export class HintInfo {
readonly keys!: string[];
@@ -43,8 +55,6 @@ export class HintInfo {
readonly plus!: boolean;
}
export class KeysGroup extends Array<string> {}
const To255Scale = Transform(({ value }) => value * 255);
export class Color {
@To255Scale
@@ -83,7 +93,7 @@ export class SetActiveTool extends JsMessage {
}
export class SetActiveDocument extends JsMessage {
readonly document_index!: number;
readonly document_id!: BigInt;
}
export class DisplayError extends JsMessage {
@@ -101,7 +111,7 @@ export class DisplayPanic extends JsMessage {
}
export class DisplayConfirmationToCloseDocument extends JsMessage {
readonly document_index!: number;
readonly document_id!: BigInt;
}
export class DisplayConfirmationToCloseAllDocuments extends JsMessage {}
@@ -157,23 +167,25 @@ export class DisplayFolderTreeStructure extends JsMessage {
}
interface DataBuffer {
pointer: number;
length: number;
pointer: BigInt;
length: BigInt;
}
export function newDisplayFolderTreeStructure(input: { data_buffer: DataBuffer }, wasm: WasmInstance): DisplayFolderTreeStructure {
const { pointer, length } = input.data_buffer;
const pointerNum = Number(pointer);
const lengthNum = Number(length);
const wasmMemoryBuffer = wasm.wasm_memory().buffer;
// Decode the folder structure encoding
const encoding = new DataView(wasmMemoryBuffer, pointer, length);
const encoding = new DataView(wasmMemoryBuffer, pointerNum, lengthNum);
// The structure section indicates how to read through the upcoming layer list and assign depths to each layer
const structureSectionLength = Number(encoding.getBigUint64(0, true));
const structureSectionMsbSigned = new DataView(wasmMemoryBuffer, pointer + 8, structureSectionLength * 8);
const structureSectionMsbSigned = new DataView(wasmMemoryBuffer, pointerNum + 8, structureSectionLength * 8);
// The layer IDs section lists each layer ID sequentially in the tree, as it will show up in the panel
const layerIdsSection = new DataView(wasmMemoryBuffer, pointer + 8 + structureSectionLength * 8);
const layerIdsSection = new DataView(wasmMemoryBuffer, pointerNum + 8 + structureSectionLength * 8);
let layersEncountered = 0;
let currentFolder = new DisplayFolderTreeStructure(BigInt(-1), []);
@@ -226,12 +238,6 @@ export class SetCanvasRotation extends JsMessage {
readonly new_radians!: number;
}
function newPath(input: number[][]): BigUint64Array {
// eslint-disable-next-line
const u32CombinedPairs = input.map((n: number[]) => BigInt((BigInt(n[0]) << BigInt(32)) | BigInt(n[1])));
return new BigUint64Array(u32CombinedPairs);
}
export type BlendMode =
| "Normal"
| "Multiply"
@@ -263,7 +269,7 @@ export class LayerPanelEntry {
layer_type!: LayerType;
@Transform(({ value }) => newPath(value))
@Transform(({ value }) => new BigUint64Array(value))
path!: BigUint64Array;
@Type(() => LayerData)