import typing

import android.view
import java
import java.chaquopy
import java.lang

_MultiTouchController__T = typing.TypeVar('_MultiTouchController__T')  # <T>

_MultiTouchController__MultiTouchObjectCanvas__T = typing.TypeVar('_MultiTouchController__MultiTouchObjectCanvas__T')  # <T>
class MultiTouchController(java.lang.Object, typing.Generic[_MultiTouchController__T]):
    DEBUG: typing.ClassVar[bool] = ...
    MAX_TOUCH_POINTS: typing.ClassVar[int] = ...
    multiTouchSupported: typing.ClassVar[bool] = ...
    @typing.overload
    def __init__(self, objectCanvas: MultiTouchController.MultiTouchObjectCanvas[_MultiTouchController__T], /) -> None: ...
    @typing.overload
    def __init__(self, objectCanvas: MultiTouchController.MultiTouchObjectCanvas[_MultiTouchController__T], handleSingleTouchEvents: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def getHandleSingleTouchEvents(self) -> bool: ...
    def isPinching(self) -> bool: ...
    def onTouchEvent(self, event: android.view.MotionEvent, /) -> bool: ...
    def setHandleSingleTouchEvents(self, handleSingleTouchEvents: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    class MultiTouchObjectCanvas(java.lang.Object, typing.Generic[_MultiTouchController__MultiTouchObjectCanvas__T]):
        def getDraggableObjectAtPoint(self, arg1: MultiTouchController.PointInfo, /) -> _MultiTouchController__MultiTouchObjectCanvas__T: ...
        def getPositionAndScale(self, arg1: _MultiTouchController__MultiTouchObjectCanvas__T, arg2: MultiTouchController.PositionAndScale, /) -> None: ...
        def selectObject(self, arg1: _MultiTouchController__MultiTouchObjectCanvas__T, arg2: MultiTouchController.PointInfo, /) -> None: ...
        def setPositionAndScale(self, arg1: _MultiTouchController__MultiTouchObjectCanvas__T, arg2: MultiTouchController.PositionAndScale, arg3: MultiTouchController.PointInfo, /) -> bool: ...

    class PositionAndScale(java.lang.Object):
        def __init__(self) -> None: ...
        def getAngle(self) -> float: ...
        def getScale(self) -> float: ...
        def getScaleX(self) -> float: ...
        def getScaleY(self) -> float: ...
        def getXOff(self) -> float: ...
        def getYOff(self) -> float: ...
        @typing.overload
        def set(self, xOff: float | java.jfloat | java.lang.Float, yOff: float | java.jfloat | java.lang.Float, scale: float | java.jfloat | java.lang.Float, scaleX: float | java.jfloat | java.lang.Float, scaleY: float | java.jfloat | java.lang.Float, angle: float | java.jfloat | java.lang.Float, /) -> None: ...
        @typing.overload
        def set(self, xOff: float | java.jfloat | java.lang.Float, yOff: float | java.jfloat | java.lang.Float, updateScale: bool | java.jboolean | java.lang.Boolean, scale: float | java.jfloat | java.lang.Float, updateScaleXY: bool | java.jboolean | java.lang.Boolean, scaleX: float | java.jfloat | java.lang.Float, scaleY: float | java.jfloat | java.lang.Float, updateAngle: bool | java.jboolean | java.lang.Boolean, angle: float | java.jfloat | java.lang.Float, /) -> None: ...

    class PointInfo(java.lang.Object):
        def __init__(self) -> None: ...
        def getAction(self) -> int: ...
        def getEventTime(self) -> int: ...
        def getMultiTouchAngle(self) -> float: ...
        def getMultiTouchDiameter(self) -> float: ...
        def getMultiTouchDiameterSq(self) -> float: ...
        def getMultiTouchHeight(self) -> float: ...
        def getMultiTouchWidth(self) -> float: ...
        def getNumTouchPoints(self) -> int: ...
        def getPointerIds(self) -> java.chaquopy.JavaArrayJInt: ...
        def getPressure(self) -> float: ...
        def getPressures(self) -> java.chaquopy.JavaArrayJFloat: ...
        def getX(self) -> float: ...
        def getXs(self) -> java.chaquopy.JavaArrayJFloat: ...
        def getY(self) -> float: ...
        def getYs(self) -> java.chaquopy.JavaArrayJFloat: ...
        def isDown(self) -> bool: ...
        def isMultiTouch(self) -> bool: ...
        def set(self, other: MultiTouchController.PointInfo, /) -> None: ...
