From b601f7a7f23f45c2bcf3d8fd6d447b18ff03790a Mon Sep 17 00:00:00 2001 From: Simon Chan Date: Wed, 6 Jan 2021 18:45:57 +0800 Subject: [PATCH] feat(struct): add Uint8ClampedArray type --- packages/adb/src/commands/framebuffer.ts | 8 +++++--- packages/demo/src/routes/framebuffer.tsx | 2 +- packages/struct/package.json | 2 +- packages/struct/src/struct.ts | 15 ++++++++++++++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/adb/src/commands/framebuffer.ts b/packages/adb/src/commands/framebuffer.ts index 697f5518..6f738ad4 100644 --- a/packages/adb/src/commands/framebuffer.ts +++ b/packages/adb/src/commands/framebuffer.ts @@ -2,7 +2,9 @@ import { Struct, StructValueType } from "@yume-chan/struct"; import { Adb } from '../adb'; import { AdbBufferedStream } from '../stream'; -const Version = new Struct({ littleEndian: true }).uint32('version'); +const Version = + new Struct({ littleEndian: true }) + .uint32('version'); /* * ADB uses 8 int32 fields to describe bit depths @@ -31,7 +33,7 @@ export const AdbFrameBufferV1 = .uint32('green_length') .uint32('alpha_offset') .uint32('alpha_length') - .arrayBuffer('data', { lengthField: 'size' }); + .uint8ClampedArray('data', { lengthField: 'size' }); export type AdbFrameBufferV1 = StructValueType; @@ -50,7 +52,7 @@ export const AdbFrameBufferV2 = .uint32('green_length') .uint32('alpha_offset') .uint32('alpha_length') - .arrayBuffer('data', { lengthField: 'size' }); + .uint8ClampedArray('data', { lengthField: 'size' }); export type AdbFrameBufferV2 = StructValueType; diff --git a/packages/demo/src/routes/framebuffer.tsx b/packages/demo/src/routes/framebuffer.tsx index 1088baf6..293a000a 100644 --- a/packages/demo/src/routes/framebuffer.tsx +++ b/packages/demo/src/routes/framebuffer.tsx @@ -43,7 +43,7 @@ export const FrameBuffer = withDisplayName('FrameBuffer')(({ canvas.height = height; const context = canvas.getContext("2d")!; - const image = new ImageData(new Uint8ClampedArray(framebuffer.data!), width, height); + const image = new ImageData(framebuffer.data, width, height); context.putImageData(image, 0, 0); setHasImage(true); } catch (e) { diff --git a/packages/struct/package.json b/packages/struct/package.json index 0079f077..cdaf8ae5 100644 --- a/packages/struct/package.json +++ b/packages/struct/package.json @@ -1,6 +1,6 @@ { "name": "@yume-chan/struct", - "version": "0.0.1", + "version": "0.0.2", "description": "C-style structure serializer and deserializer.", "keywords": [ "structure", diff --git a/packages/struct/src/struct.ts b/packages/struct/src/struct.ts index 29fc602a..d5e333d3 100644 --- a/packages/struct/src/struct.ts +++ b/packages/struct/src/struct.ts @@ -1,5 +1,5 @@ import { createRuntimeObject, FieldDefinition, FieldRuntimeValue, getRuntimeValue, setRuntimeValue, StructDefaultOptions, StructDeserializationContext, StructOptions, StructSerializationContext } from './basic'; -import { ArrayBufferFieldType, ArrayBufferLikeFieldType, Evaluate, FixedLengthArrayBufferLikeFieldDefinition, FixedLengthArrayBufferLikeFieldOptions, Identity, KeysOfType, NumberFieldDefinition, NumberFieldType, Overwrite, StringFieldType, VariableLengthArrayBufferLikeFieldDefinition, VariableLengthArrayBufferLikeFieldOptions } from './types'; +import { ArrayBufferFieldType, ArrayBufferLikeFieldType, Evaluate, FixedLengthArrayBufferLikeFieldDefinition, FixedLengthArrayBufferLikeFieldOptions, Identity, KeysOfType, NumberFieldDefinition, NumberFieldType, Overwrite, StringFieldType, Uint8ClampedArrayFieldType, VariableLengthArrayBufferLikeFieldDefinition, VariableLengthArrayBufferLikeFieldOptions } from './types'; /** * Extract the value type of the specified `Struct` @@ -354,6 +354,19 @@ export default class Struct< return this.arrayBufferLike(name, ArrayBufferFieldType.instance, options); }; + public uint8ClampedArray: ArrayBufferTypeFieldDefinitionCreator< + TValue, + TInit, + TExtra, + TPostDeserialized, + Uint8ClampedArrayFieldType + > = ( + name: PropertyKey, + options: any + ): any => { + return this.arrayBufferLike(name, Uint8ClampedArrayFieldType.instance, options); + }; + public string: ArrayBufferTypeFieldDefinitionCreator< TValue, TInit,