@yume-chan/scrcpy
Version:
TypeScript implementation of Scrcpy.
35 lines • 1.6 kB
JavaScript
import { getInt16 } from "@yume-chan/no-data-view";
import Struct, { NumberFieldDefinition } from "@yume-chan/struct";
import { ScrcpyControlMessageType } from "../../control/index.js";
import { clamp } from "../1_16/index.js";
export const ScrcpySignedFloatNumberVariant = {
size: 2,
signed: true,
deserialize(array, littleEndian) {
const value = getInt16(array, 0, littleEndian);
// https://github.com/Genymobile/scrcpy/blob/1f138aef41de651668043b32c4effc2d4adbfc44/server/src/main/java/com/genymobile/scrcpy/Binary.java#L34
return value === 0x7fff ? 1 : value / 0x8000;
},
serialize(dataView, offset, value, littleEndian) {
// https://github.com/Genymobile/scrcpy/blob/1f138aef41de651668043b32c4effc2d4adbfc44/app/src/util/binary.h#L65
value = clamp(value, -1, 1);
value = value === 1 ? 0x7fff : value * 0x8000;
dataView.setInt16(offset, value, littleEndian);
},
};
const ScrcpySignedFloatFieldDefinition = new NumberFieldDefinition(ScrcpySignedFloatNumberVariant);
export const ScrcpyInjectScrollControlMessage1_25 = new Struct()
.uint8("type", ScrcpyControlMessageType.InjectScroll)
.uint32("pointerX")
.uint32("pointerY")
.uint16("screenWidth")
.uint16("screenHeight")
.field("scrollX", ScrcpySignedFloatFieldDefinition)
.field("scrollY", ScrcpySignedFloatFieldDefinition)
.int32("buttons");
export class ScrcpyScrollController1_25 {
serializeScrollMessage(message) {
return ScrcpyInjectScrollControlMessage1_25.serialize(message);
}
}
//# sourceMappingURL=scroll.js.map