/*
* Copyright (c) 2025 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@!namespace("@ohos.multimodalInput.inputMonitor", "inputMonitor")
from ohos.multimodalInput.touchEvent use TouchEvent;
from ohos.multimodalInput.mouseEvent use MouseEvent;
from ohos.multimodalInput.gestureEvent use Rotate, Pinch, ThreeFingersSwipe, FourFingersSwipe, SwipeInward;
from ohos.multimodalInput.gestureEvent use ThreeFingersTap, TouchGestureEvent;
from ohos.multimodalInput.shortKey use FingerprintEvent;
from ohos.multimodalInput.keyEvent use KeyEvent;
from ohos.multimodalInput.keyCode use KeyCode;
@!sts_inject_into_module("
import { TouchEvent } from './@ohos.multimodalInput.touchEvent';
import { MouseEvent } from './@ohos.multimodalInput.mouseEvent';
import { Rotate } from './@ohos.multimodalInput.gestureEvent';
import { Pinch } from './@ohos.multimodalInput.gestureEvent';
import { ThreeFingersSwipe } from './@ohos.multimodalInput.gestureEvent';
import { FourFingersSwipe } from './@ohos.multimodalInput.gestureEvent';
import { SwipeInward } from './@ohos.multimodalInput.gestureEvent';
import { ThreeFingersTap } from './@ohos.multimodalInput.gestureEvent';
import { TouchGestureEvent } from './@ohos.multimodalInput.gestureEvent';
import { ThreeFingersTap } from './@ohos.multimodalInput.gestureEvent';
import { KeyEvent } from './@ohos.multimodalInput.keyEvent';
import { KeyCode } from './@ohos.multimodalInput.keyCode';
import { FingerprintEvent } from './@ohos.multimodalInput.shortKey';
import display from '@ohos.display';
")
@!sts_inject("""
static { loadLibraryWithPermissionCheck("InputMonitor.z", "@ohos.multimodalInput.inputMonitor") }
""")
@gen_promise("queryTouchEvents")
function QueryTouchEventsSync(count: i32) : Array<TouchEvent>;
@!sts_inject("""
function onTouch(receiver: (touchEvent: TouchEvent) => boolean): void {
return onTouchImpl(receiver, receiver);
}
function onMouse(receiver: (info: MouseEvent) => void): void {
return onMouseImpl(receiver, receiver);
}
function onMouse(rect: Array<display.Rect>, receiver: (arg_0: MouseEvent) => void): void {
return onMouseForDisplayRect(rect, receiver, receiver);
}
function onPinch(receiver: (info: Pinch) => void): void {
return onPinchImpl(receiver, receiver);
}
function onPinch(fingers: int, receiver: (info: Pinch) => void): void {
return onPinchByNumber(fingers, receiver, receiver);
}
function onRotate(fingers: int, receiver: (info: Rotate) => void): void {
return onRotateByNumber(fingers, receiver, receiver);
}
function onThreeFingersSwipe(receiver: (info: ThreeFingersSwipe) => void): void {
return onThreeFingersSwipeImpl(receiver, receiver);
}
function onFourFingersSwipe(receiver: (info: FourFingersSwipe) => void): void {
return onFourFingersSwipeImpl(receiver, receiver);
}
function onThreeFingersTap(receiver: (info: ThreeFingersTap) => void): void {
return onThreeFingersTapImpl(receiver, receiver);
}
function onFingerprint(receiver: (info: FingerprintEvent) => void): void {
return onFingerprintImpl(receiver, receiver);
}
function onSwipeInward(receiver: (info: SwipeInward) => void): void {
return onSwipeInwardImpl(receiver, receiver);
}
function onTouchscreenSwipe(fingers: int, receiver: (info: TouchGestureEvent) => void): void {
return onTouchscreenSwipeByNumber(fingers, receiver, receiver);
}
function onTouchscreenPinch(fingers: int, receiver: (info: TouchGestureEvent) => void): void {
return onTouchscreenPinchImpl(fingers, receiver, receiver);
}
function onKeyPressed(keys: Array<KeyCode>, receiver: (arg_0: KeyEvent) => void): void {
return onKeyPressedImpl(keys, receiver, receiver);
}
function offTouch(receiver?: (info: TouchEvent) => boolean): void {
return offTouchImpl(receiver);
}
function offMouse(receiver?: (info: MouseEvent) => void): void {
return offMouseImpl(receiver);
}
function offPinch(receiver?: (info: Pinch) => void): void {
return offPinchImpl(receiver);
}
function offPinch(fingers: int, receiver?: (info: Pinch) => void): void {
return offPinchByNumber(fingers, receiver);
}
function offRotate(fingers: int, receiver?: (info: Rotate) => void): void {
return offRotateByNumber(fingers, receiver);
}
function offThreeFingersSwipe(receiver?: (info: ThreeFingersSwipe) => void): void {
return offThreeFingersSwipeImpl(receiver);
}
function offFourFingersSwipe(receiver?: (info: FourFingersSwipe) => void): void {
return offFourFingersSwipeImpl(receiver);
}
function offThreeFingersTap(receiver?: (info: ThreeFingersTap) => void): void {
return offThreeFingersTapImpl(receiver);
}
function offFingerprint(receiver?: (info: FingerprintEvent) => void): void {
return offFingerprintImpl(receiver);
}
function offSwipeInward(receiver?:(info: SwipeInward) => void): void {
return offSwipeInwardImpl(receiver);
}
function offTouchscreenSwipe(fingers: int, receiver?: (info: TouchGestureEvent) => void): void {
return offTouchscreenSwipeImpl(fingers, receiver);
}
function offTouchscreenPinch(fingers: int, receiver?: (info: TouchGestureEvent) => void): void {
return offTouchscreenPinchImpl(fingers, receiver);
}
function offKeyPressed(receiver?:(info: KeyEvent) => void): void {
return offKeyPressedImpl(receiver);
}
""")
function onTouchImpl(receiver: (touchEvent: TouchEvent) => bool, opq: Opaque): void;
function onMouseImpl(receiver: (info: MouseEvent) => void, opq: Opaque): void;
function onMouseForDisplayRect(rect: @sts_type("Array<display.Rect>") Opaque, receiver: (info: MouseEvent) => void, opq: Opaque): void;
function onPinchImpl(receiver: (info: Pinch) => void, opq: Opaque): void;
function onPinchByNumber(fingers: i32, receiver: (info: Pinch) => void, opq: Opaque): void;
function onRotateByNumber(fingers: i32, receiver: (info: Rotate) => void, opq: Opaque): void;
function onThreeFingersSwipeImpl(receiver: (info: ThreeFingersSwipe) => void, opq: Opaque): void;
function onFourFingersSwipeImpl(receiver: (info: FourFingersSwipe) => void, opq: Opaque): void;
function onThreeFingersTapImpl(receiver: (info: ThreeFingersTap) => void, opq: Opaque): void;
function onFingerprintImpl(receiver: (info: FingerprintEvent) => void, opq: Opaque): void;
function onSwipeInwardImpl(receiver: (info: SwipeInward) => void, opq: Opaque): void;
function onTouchscreenSwipeByNumber(fingers: i32, receiver: (info: TouchGestureEvent) => void, opq: Opaque): void;
function onTouchscreenPinchImpl(fingers: i32, receiver: (info: TouchGestureEvent) => void, opq: Opaque): void;
function onKeyPressedImpl(keys: Array<KeyCode>, receiver: (info: KeyEvent) => void, opq: Opaque): void;
function offTouchImpl(receiver: Optional<Opaque>): void;
function offMouseImpl(receiver: Optional<Opaque>): void;
function offPinchImpl(receiver: Optional<Opaque>): void;
function offPinchByNumber(fingers: i32, receiver: Optional<Opaque>): void;
function offRotateByNumber(fingers: i32, receiver: Optional<Opaque>): void;
function offThreeFingersSwipeImpl(receiver: Optional<Opaque>): void;
function offFourFingersSwipeImpl(receiver: Optional<Opaque>): void;
function offThreeFingersTapImpl(receiver: Optional<Opaque>): void;
function offFingerprintImpl(receiver: Optional<Opaque>): void;
function offSwipeInwardImpl(receiver: Optional<Opaque>): void;
function offTouchscreenSwipeImpl(fingers: i32, receiver: Optional<Opaque>): void;
function offTouchscreenPinchImpl(fingers: i32, receiver: Optional<Opaque>): void;
function offKeyPressedImpl(receiver: Optional<Opaque>): void;