# IndirectPointerInjectionScope

Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+class:androidx.compose.ui.test.IndirectPointerInjectionScope) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0) Common/AllAndroid/JVM
- Cmn

  ```
  interface IndirectPointerInjectionScope : Density
  ```

*** ** * ** ***

The receiver scope of the indirect pointer input injection lambda from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performIndirectPointerInput(androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis,androidx.compose.ui.unit.IntSize,kotlin.Function1)`.

Indirect pointer input events are dispatched through the focused tree, and components will only receive these events if they are focused, or an ancestor of a focused item. Therefore, this API requires an active focus state.

An indirect pointer gesture (just like a regular touch gesture) starts with a `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` event, followed by a sequence of `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)` events and finally an `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)` event, optionally combined with more sets of `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)` events for multitouch gestures.

Most methods accept a pointerId to specify which pointer (finger) the event applies to. Movement can be expressed absolutely with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)`, or relative to the current pointer position with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)`. The `moveTo/By` methods enqueue an event immediately, while the `updatePointerTo/By` methods don't. This allows you to update the position of multiple pointers in a single `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)` event for multitouch gestures. Indirect pointer input gestures can be canceled with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#cancel(kotlin.Long)`. All events, regardless the method used, will always contain the current position of *all* pointers.

The entire event injection state is shared between all `perform.*Input` methods, meaning you can continue an unfinished Indirect pointer input gesture in a subsequent invocation of `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performIndirectPointerInput(androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis,androidx.compose.ui.unit.IntSize,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performMultiModalInput(kotlin.Function1)`.

All events sent by these methods are batched together and sent as a whole after `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performIndirectPointerInput(androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis,androidx.compose.ui.unit.IntSize,kotlin.Function1)` has executed its code block. Because gestures don't have to be defined all in the same `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performIndirectPointerInput(androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis,androidx.compose.ui.unit.IntSize,kotlin.Function1)` block, keep in mind that while the gesture is not complete, all code you execute in between these blocks will be executed while imaginary fingers are actively touching the indirect pointer input device. Remember, indirect pointer events do NOT correlate to the screen, so those finger locations won't map to a screen x and y. The x and y coordinates are instead mapped to the specific input device being used during the interaction.

The events sent as part of the same batch will not be interrupted by recomposition. However, if a gesture spans multiple `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performIndirectPointerInput(androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis,androidx.compose.ui.unit.IntSize,kotlin.Function1)` blocks it is important to remember that recomposition, layout and drawing could take place during the gesture, which may lead to events being injected into a moving target.

This scope also provides general capabilities such as advancing event time and accessing the system `https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewConfiguration`. It also implements `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density` to facilitate conversion between pixels and density-independent pixels.

For injection methods that require specific node information (e.g., `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performTouchInput(kotlin.Function1)`, `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.SemanticsNodeInteraction).performMouseInput(kotlin.Function1)`), use `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/InjectionScope`.

Example of performing an indirect pointer click:

```kotlin
import androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis
import androidx.compose.ui.test.click
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.requestFocus
import androidx.compose.ui.test.sendIndirectPointerInput
import androidx.compose.ui.unit.IntSize

// Ensure the node is within the focus path (otherwise, you won't get the event).
composeTestRule.onNodeWithTag("myComponent").requestFocus()
composeTestRule.sendIndirectPointerInput(
    indirectPointerEventPrimaryDirectionalMotionAxis =
        IndirectPointerEventPrimaryDirectionalMotionAxis.X,
    // Horizontal trackpad
    inputDeviceSize = IntSize(width = 5000, height = 1000),
) {
    click()
}
```

```kotlin
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis
import androidx.compose.ui.test.inputDeviceCenterX
import androidx.compose.ui.test.inputDeviceCenterY
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.requestFocus
import androidx.compose.ui.test.sendIndirectPointerInput
import androidx.compose.ui.unit.IntSize

// Ensure the node is within the focus path (otherwise, you won't get the event).
composeTestRule.onNodeWithTag("myComponent").requestFocus()

composeTestRule.sendIndirectPointerInput(
    indirectPointerEventPrimaryDirectionalMotionAxis =
        IndirectPointerEventPrimaryDirectionalMotionAxis.X,
    // Horizontal trackpad
    inputDeviceSize = IntSize(width = 5000, height = 1000),
) {
    down(position = Offset(x = inputDeviceCenterX, y = inputDeviceCenterY))
}

// Assert some pressed state is visible

composeTestRule.sendIndirectPointerInput(
    indirectPointerEventPrimaryDirectionalMotionAxis =
        IndirectPointerEventPrimaryDirectionalMotionAxis.X,
    // Horizontal trackpad
    inputDeviceSize = IntSize(width = 5000, height = 1000),
) {
    up()
}
```

Example of performing an indirect pointer swipe:

```kotlin
import androidx.compose.ui.input.indirect.IndirectPointerEventPrimaryDirectionalMotionAxis
import androidx.compose.ui.test.inputDeviceLeft
import androidx.compose.ui.test.inputDeviceRight
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.requestFocus
import androidx.compose.ui.test.sendIndirectPointerInput
import androidx.compose.ui.test.swipeRight
import androidx.compose.ui.unit.IntSize

// Ensure your node is within the focus path (otherwise, you won't get the event).
composeTestRule.onNodeWithTag("myComponent").requestFocus()
composeTestRule.sendIndirectPointerInput(
    indirectPointerEventPrimaryDirectionalMotionAxis =
        IndirectPointerEventPrimaryDirectionalMotionAxis.X,
    // Horizontal trackpad
    inputDeviceSize = IntSize(width = 5000, height = 1000),
) {
    swipeRight(startX = inputDeviceLeft, endX = inputDeviceRight)
}
```

## Summary

| ### Public functions |
|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#advanceEventTime(kotlin.Long)(durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Adds the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#advanceEventTime(kotlin.Long)` to the current event time, delaying the next event by that time. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#cancel(kotlin.Long)(delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sends a cancel event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#cancel(kotlin.Long)` after the last sent event to cancel the current gesture. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset?` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#currentPosition(kotlin.Int)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Returns the current position of the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#currentPosition(kotlin.Int)`. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(androidx.compose.ui.geometry.Offset)(position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Sends a down event for the default pointer at `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(androidx.compose.ui.geometry.Offset)` on the indirect pointer input device sending the input. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Sends a down event for the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` at `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` on the external indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)(delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)` after the last sent event without updating any of the pointer positions. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(androidx.compose.ui.geometry.Offset,kotlin.Long)(delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the default pointer moved by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(androidx.compose.ui.geometry.Offset,kotlin.Long)`. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` moved by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)`. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(androidx.compose.ui.geometry.Offset,kotlin.Long)(position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the default pointer updated to `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(androidx.compose.ui.geometry.Offset,kotlin.Long)`. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` updated to `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)`. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)( relativeHistoricalTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html>, historicalCoordinates: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset>, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` after the last sent event without updating any of the pointer positions, while adding the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` at the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` to the move event. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)( relativeHistoricalTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html>, historicalCoordinates: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset>>, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` after the last sent event without updating any of the pointer positions, while adding the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` at the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` to the move event. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Sends an up event for the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)`, or the default pointer if `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)` is omitted, on nodes in the focus path. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(androidx.compose.ui.geometry.Offset)(delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Updates the position of the default pointer by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(androidx.compose.ui.geometry.Offset)`, but does not send a move event. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Updates the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)` by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)`, but does not send a move event. | Cmn |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(androidx.compose.ui.geometry.Offset)(position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Updates the position of the default pointer (`pointerId = 0`) to the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(androidx.compose.ui.geometry.Offset)` within the indirect pointer input device's bounds, but does not send a move event. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)(pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Updates the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)` to the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)` within the indirect pointer input device's bounds, but does not send a move event. | Cmn |

| ### Public properties |
|---|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` The default time between two successive events. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/input/indirect/IndirectPointerEventPrimaryDirectionalMotionAxis` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#indirectPointerEventPrimaryDirectionalMotionAxis()` The primary axis for motion from an `https://developer.android.com/reference/kotlin/androidx/compose/ui/input/indirect/IndirectPointerEvent`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/IntSize` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()` The dimensions of the external indirect pointer input device that provide the boundaries for indirect input. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewConfiguration` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#viewConfiguration()` The `https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewConfiguration` in use by the `https://developer.android.com/reference/kotlin/androidx/compose/ui/semantics/SemanticsNode` from the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/SemanticsNodeInteraction` on which the input injection method is called. | Cmn |

| ### Extension functions |
|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).click(androidx.compose.ui.geometry.Offset)(position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset)` Performs a click gesture (aka a tap) on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).doubleClick(androidx.compose.ui.geometry.Offset,kotlin.Long)( position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a double click gesture (aka a double tap) on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).longClick(androidx.compose.ui.geometry.Offset,kotlin.Long)( position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a long click gesture (aka a long press) on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).multiTouchSwipe(kotlin.collections.List,kotlin.Long,kotlin.collections.List)( curves: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<(timeMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html) -> https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset>, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, keyTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html> )` Performs a multitouch swipe gesture on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).pinch(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Long)( start0: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, end0: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, start1: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, end1: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a pinch gesture on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(kotlin.Function1,kotlin.Long,kotlin.collections.List)( curve: (timeMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html) -> https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, keyTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html> )` Performs a swipe gesture on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Long)( start: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, end: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a swipe gesture on nodes in the focus path. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)( startY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, endY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a swipe down gesture on nodes in the focus path along `x = [IndirectPointerInjectionScope.inputDeviceCenter].x`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)( startX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, endX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a swipe left gesture on nodes in the focus path along `y = [IndirectPointerInjectionScope.inputDeviceCenter].y`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)( startX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, endX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a swipe right gesture on nodes in the focus path along `y = [IndirectPointerInjectionScope.inputDeviceCenter].y`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)( startY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, endY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a swipe up gesture on nodes in the focus path along `x = [IndirectPointerInjectionScope.inputDeviceCenter].x`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)( start: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, end: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset, endVelocity: @https://developer.android.com/reference/kotlin/androidx/annotation/FloatRange(from = 0.0) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Performs a swipe gesture on nodes in the focus path such that it ends with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)`. | Cmn |

| ### Extension properties |
|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottom()` The y-coordinate for the bottom of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottomCenter()` The center of the bottom edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottomLeft()` The bottom left corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottomRight()` The bottom right corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenter()` The center of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenterLeft()` The center of the left edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenterRight()` The center of the right edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenterX()` The x-coordinate for the center of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenterY()` The y-coordinate for the center of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceHeight()` The height of the external indirect pointer input device that provide the height boundary for indirect input. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceLeft()` The x-coordinate for the left edge of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceRight()` The x-coordinate for the right edge of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceTop()` The y-coordinate for the top of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceTopCenter()` The center of the top edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceTopLeft()` The top left corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceTopRight()` The top right corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope.https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceWidth()` The width of the external indirect pointer input device that provide the width boundary for indirect input. | Cmn |

### Inherited functions

From [androidx.compose.ui.unit.Density](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density) `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.Dp).roundToPx()()`

Convert `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp` to `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` by rounding
Cmn `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.TextUnit).roundToPx()()`

Convert Sp to `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` by rounding
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(kotlin.Int).toDp()()`

Convert an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` pixel value to `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp`.
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(kotlin.Float).toDp()()`

Convert a `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` pixel value to a Dp
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/DpSize` `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Size.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.geometry.Size).toDpSize()()`

Convert a `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Size` to a `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/DpSize`.
Cmn `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.Dp).toPx()()`

Convert `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp` to pixels.
Cmn `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.TextUnit).toPx()()`

Convert Sp to pixels.
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Rect` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/DpRect.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.DpRect).toRect()()`

Convert a `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/DpRect` to a `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Rect`.
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Size` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/DpSize.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.DpSize).toSize()()`

Convert a `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/DpSize` to a `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Size`.
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(kotlin.Int).toSp()()`

Convert an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` pixel value to Sp.
Cmn `open https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(kotlin.Float).toSp()()`

Convert a `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` pixel value to a Sp
Cmn From [androidx.compose.ui.unit.FontScaling](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/FontScaling) `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/FontScaling#(androidx.compose.ui.unit.TextUnit).toDp()()`

Convert Sp to `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp`.
Cmn `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/TextUnit` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp.https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/FontScaling#(androidx.compose.ui.unit.Dp).toSp()()`

Convert `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp` to Sp.
Cmn

### Inherited properties

From [androidx.compose.ui.unit.Density](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#density()`

The logical density of the display.
Cmn From [androidx.compose.ui.unit.FontScaling](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/FontScaling) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` `https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/FontScaling#fontScale()`

Current user preference for the scaling factor for fonts.
Cmn

## Public functions

### advanceEventTime

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun advanceEventTime(durationMillis: Long = eventPeriodMillis): Unit
```

Adds the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#advanceEventTime(kotlin.Long)` to the current event time, delaying the next event by that time.

### cancel

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun cancel(delayMillis: Long = eventPeriodMillis): Unit
```

Sends a cancel event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#cancel(kotlin.Long)` after the last sent event to cancel the current gesture. The cancel event contains the current position of all active pointers.

| Parameters |
|---|---|
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

### currentPosition

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun currentPosition(pointerId: Int = 0): Offset?
```

Returns the current position of the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#currentPosition(kotlin.Int)`. The default `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#currentPosition(kotlin.Int)` is 0. The position is returned in the coordinate system of the device sending the input (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). It is NOT related to the screen location.

### down

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun down(position: Offset): Unit
```

Sends a down event for the default pointer at `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(androidx.compose.ui.geometry.Offset)` on the indirect pointer input device sending the input. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(androidx.compose.ui.geometry.Offset)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

If no pointers are down yet, this will start a new Indirect pointer input gesture. If a gesture is already in progress, this event is sent at the same timestamp as the last event.

| Parameters |
|---|---|
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position of the down event, in the input device's coordinate system. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given pointer id is already down. |

### down

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun down(pointerId: Int, position: Offset): Unit
```

Sends a down event for the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` at `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` on the external indirect pointer input device. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

If no pointers are down yet, this will start a new Indirect pointer input gesture. If a gesture is already in progress (that is, there are other pointer ids that are down), this event is sent at the same timestamp as the last event. You cannot call down with a pointer id that is already down.

| Parameters |
|---|---|
| `pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The id of the pointer, can be any number not yet in use by another pointer |
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position of the down event, in the input device's coordinate system. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given pointer id is already down. |

### move

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun move(delayMillis: Long = eventPeriodMillis): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)` after the last sent event without updating any of the pointer positions. This can be useful when batching movement of multiple pointers together, which can be done with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)`.

| Parameters |
|---|---|
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

### moveBy

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun moveBy(delta: Offset, delayMillis: Long = eventPeriodMillis): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the default pointer moved by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(androidx.compose.ui.geometry.Offset,kotlin.Long)`. The default pointer has `pointerId = 0`.

| Parameters |
|---|---|
| `delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position for this move event, relative to the current position of the pointer. For example, \`delta = Offset(10.px, -10.px) will add 10.px to the pointer's x-position, and subtract 10.px from the pointer's y-position. |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### moveBy

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun moveBy(pointerId: Int, delta: Offset, delayMillis: Long = eventPeriodMillis): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` moved by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveBy(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)`.

| Parameters |
|---|---|
| `pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The id of the pointer to move, as supplied in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` |
| `delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position for this move event, relative to the current position of the pointer. For example, \`delta = Offset(10.px, -10.px) will add 10.px to the pointer's x-position, and subtract 10.px from the pointer's y-position. |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### moveTo

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun moveTo(position: Offset, delayMillis: Long = eventPeriodMillis): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the default pointer updated to `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(androidx.compose.ui.geometry.Offset,kotlin.Long)`. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(androidx.compose.ui.geometry.Offset,kotlin.Long)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The new position of the pointer, in the indirect pointer input device's coordinate system |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### moveTo

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun moveTo(
    pointerId: Int,
    position: Offset,
    delayMillis: Long = eventPeriodMillis
): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` after the last sent event on nodes in the focus path, with the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` updated to `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)`. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The id of the pointer to move, as supplied in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` |
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The new position of the pointer, in the indirect pointer input device's coordinate system |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### moveWithHistory

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun moveWithHistory(
    relativeHistoricalTimes: List<Long>,
    historicalCoordinates: List<Offset>,
    delayMillis: Long = eventPeriodMillis
): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` after the last sent event without updating any of the pointer positions, while adding the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` at the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` to the move event. This corresponds to the scenario where the external device generates Indirect pointer input events quicker than can be dispatched and batches them together.

This overload is a convenience method for the common case where the gesture only has one pointer.

| Parameters |
|---|---|
| `relativeHistoricalTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html>` | Time of each historical event, as a millisecond relative to the time the actual event is sent. For example, -10L means 10ms earlier. |
| `historicalCoordinates: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset>` | Coordinates of each historical event, in the same coordinate space as `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)`. The list must have the same size as `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistory(kotlin.collections.List,kotlin.collections.List,kotlin.Long)`. |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

### moveWithHistoryMultiPointer

Cmn

```
fun moveWithHistoryMultiPointer(
    relativeHistoricalTimes: List<Long>,
    historicalCoordinates: List<List<Offset>>,
    delayMillis: Long = eventPeriodMillis
): Unit
```

Sends a move event `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` after the last sent event without updating any of the pointer positions, while adding the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` at the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)` to the move event. This corresponds to the scenario where an external touchpad generates Indirect pointer input events quicker than can be dispatched and batches them together.

| Parameters |
|---|---|
| `relativeHistoricalTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html>` | Time of each historical event, as a millisecond relative to the time the actual event is sent. For example, -10L means 10ms earlier. |
| `historicalCoordinates: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset>>` | Coordinates of each historical event, in the same coordinate space as `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveTo(kotlin.Int,androidx.compose.ui.geometry.Offset,kotlin.Long)`. The outer list must have the same size as the number of pointers in the event, and each inner list must have the same size as `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#moveWithHistoryMultiPointer(kotlin.collections.List,kotlin.collections.List,kotlin.Long)`. The `i`th pointer is assigned the `i`th history, with the pointers sorted on ascending pointerId. |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = eventPeriodMillis` | The time between the last sent event and this event. `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#eventPeriodMillis()` by default. |

### up

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun up(pointerId: Int = 0): Unit
```

Sends an up event for the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)`, or the default pointer if `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#up(kotlin.Int)` is omitted, on nodes in the focus path.

| Parameters |
|---|---|
| `pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html = 0` | The id of the pointer to liftup, as supplied in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` |

### updatePointerBy

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun updatePointerBy(delta: Offset): Unit
```

Updates the position of the default pointer by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(androidx.compose.ui.geometry.Offset)`, but does not send a move event. The move event can be sent with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)`. The default pointer is `pointerId = 0`.

| Parameters |
|---|---|
| `delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position for this move event, relative to the last sent position of the pointer. For example, \`delta = Offset(10.px, -10.px) will add 10.px to the pointer's x-position, and subtract 10.px from the pointer's y-position. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### updatePointerBy

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun updatePointerBy(pointerId: Int, delta: Offset): Unit
```

Updates the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)` by the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerBy(kotlin.Int,androidx.compose.ui.geometry.Offset)`, but does not send a move event. The move event can be sent with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)`.

| Parameters |
|---|---|
| `pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The id of the pointer to move, as supplied in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` |
| `delta: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position for this move event, relative to the last sent position of the pointer. For example, \`delta = Offset(10.px, -10.px) will add 10.px to the pointer's x-position, and subtract 10.px from the pointer's y-position. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### updatePointerTo

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open fun updatePointerTo(position: Offset): Unit
```

Updates the position of the default pointer (`pointerId = 0`) to the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(androidx.compose.ui.geometry.Offset)` within the indirect pointer input device's bounds, but does not send a move event. The move event can be sent with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)`. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(androidx.compose.ui.geometry.Offset)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The new position of the pointer, in the indirect pointer input device's coordinate system |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

### updatePointerTo

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
fun updatePointerTo(pointerId: Int, position: Offset): Unit
```

Updates the position of the pointer with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)` to the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)` within the indirect pointer input device's bounds, but does not send a move event. The move event can be sent with `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#move(kotlin.Long)`. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#updatePointerTo(kotlin.Int,androidx.compose.ui.geometry.Offset)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `pointerId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The id of the pointer to move, as supplied in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#down(kotlin.Int,androidx.compose.ui.geometry.Offset)` |
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The new position of the pointer, in the indirect pointer input device's coordinate system |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the pointer id is not yet down. |

## Public properties

### eventPeriodMillis

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
open val eventPeriodMillis: Long
```

The default time between two successive events.

### indirectPointerEventPrimaryDirectionalMotionAxis

Cmn

```
val indirectPointerEventPrimaryDirectionalMotionAxis: IndirectPointerEventPrimaryDirectionalMotionAxis
```

The primary axis for motion from an `https://developer.android.com/reference/kotlin/androidx/compose/ui/input/indirect/IndirectPointerEvent`. Indirect input devices (such as touchpads) that do not move a cursor on screen may define a primary axis for motion (such as scrolling). This facilitates the translation of a 2D input gesture into a 1D scroll on the screen. For example, an input device might be wide horizontally but narrow vertically. In such a case, it would designate X as its primary axis of motion. This means horizontal scrolling on the input device would cause a horizontal list to scroll horizontally, and a vertical list to scroll vertically - even though the direction of motion on the input device is horizontal in both cases.

### inputDeviceSize

Cmn

```
val inputDeviceSize: IntSize
```

The dimensions of the external indirect pointer input device that provide the boundaries for indirect input. If you go outside these dimensions, the tests will throw an exception. Note: This is not related to the screen coordinates.

### viewConfiguration

Cmn Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val viewConfiguration: ViewConfiguration
```

The `https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewConfiguration` in use by the `https://developer.android.com/reference/kotlin/androidx/compose/ui/semantics/SemanticsNode` from the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/SemanticsNodeInteraction` on which the input injection method is called.

## Extension functions

### IndirectPointerInjectionScope.click

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:click)

```
fun IndirectPointerInjectionScope.click(position: Offset = inputDeviceCenter): Unit
```

Performs a click gesture (aka a tap) on nodes in the focus path.

The click is done at the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).click(androidx.compose.ui.geometry.Offset)` within the indirect pointer input device's bounds, or the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenter()` if the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).click(androidx.compose.ui.geometry.Offset)` is omitted. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).click(androidx.compose.ui.geometry.Offset)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset = inputDeviceCenter` | The position where to click, in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). If omitted, the defaultStartLocation will be used. |

### IndirectPointerInjectionScope.doubleClick

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:doubleClick)

```
fun IndirectPointerInjectionScope.doubleClick(
    position: Offset = inputDeviceCenter,
    delayMillis: Long = viewConfiguration.defaultDoubleTapDelayMillis
): Unit
```

Performs a double click gesture (aka a double tap) on nodes in the focus path.

The double click is done at the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).doubleClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` within the indirect pointer input device's bounds or `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenter()` if the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).doubleClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` is omitted. By default, the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).doubleClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` between the first and the second click is halfway in between the minimum and maximum required delay for a double click. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).doubleClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset = inputDeviceCenter` | The position where to click, in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). If omitted, the defaultStartLocation will be used. |
| `delayMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = viewConfiguration.defaultDoubleTapDelayMillis` | The time between the up event of the first click and the down event of the second click |

### IndirectPointerInjectionScope.longClick

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:longClick)

```
fun IndirectPointerInjectionScope.longClick(
    position: Offset = inputDeviceCenter,
    durationMillis: Long = viewConfiguration.longPressTimeoutMillis + 100
): Unit
```

Performs a long click gesture (aka a long press) on nodes in the focus path.

The long click is done at the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).longClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` within the indirect pointer input device's bounds, or `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceCenter()` if the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).longClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` is omitted. By default, the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).longClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` of the press is 100ms longer than the minimum required duration for a long press. The `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).longClick(androidx.compose.ui.geometry.Offset,kotlin.Long)` is NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

| Parameters |
|---|---|
| `position: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset = inputDeviceCenter` | The position where to click, in the indirect pointer input device's coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). If omitted, the defaultStartLocation will be used. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = viewConfiguration.longPressTimeoutMillis + 100` | The time between the down and the up event. |

### IndirectPointerInjectionScope.multiTouchSwipe

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:multiTouchSwipe)

```
fun IndirectPointerInjectionScope.multiTouchSwipe(
    curves: List<(timeMillis: Long) -> Offset>,
    durationMillis: Long = 200,
    keyTimes: List<Long> = emptyList()
): Unit
```

Performs a multitouch swipe gesture on nodes in the focus path.

Each pointer follows `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).multiTouchSwipe(kotlin.collections.List,kotlin.Long,kotlin.collections.List)` from 0 till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).multiTouchSwipe(kotlin.collections.List,kotlin.Long,kotlin.collections.List)`. Sampling of an event is forced at all times defined in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).multiTouchSwipe(kotlin.collections.List,kotlin.Long,kotlin.collections.List)`. The time between events is kept as close to `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/InjectionScope#eventPeriodMillis()` as possible, given the constraints.

The coordinates are NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`) and is usually used for focused movement (that is, a focused node would move to the next/previous focusable node in the hierarchy with a swipe).

| Parameters |
|---|---|
| `curves: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<(timeMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html) -> https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset>` | The functions that describe the gesture. Function *i* defines the position over time for pointer id *i*. The argument passed to each function is the time in milliseconds since the start of the swipe, and the return value is the location of that pointer at that point in time. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the gesture (default duration is 200 milliseconds) |
| `keyTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html> = emptyList()` | An optional list of timestamps in milliseconds at which a move event must be sampled |

### IndirectPointerInjectionScope.pinch

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:pinch)

```
fun IndirectPointerInjectionScope.pinch(
    start0: Offset,
    end0: Offset,
    start1: Offset,
    end1: Offset,
    durationMillis: Long = 400
): Unit
```

Performs a pinch gesture on nodes in the focus path.

For each pair of start and end `https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset`s, the motion events are linearly interpolated.

The coordinates are NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`).

The default duration is 400 milliseconds.

| Parameters |
|---|---|
| `start0: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The start position of the first pointer in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). |
| `end0: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The end position of the first pointer in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). |
| `start1: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The start position of the second pointer in the indirect pointer input device's coordinate system. |
| `end1: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The end position of the second pointer in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 400` | the duration of the pinch gesture |

### IndirectPointerInjectionScope.swipe

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipe)

```
fun IndirectPointerInjectionScope.swipe(
    curve: (timeMillis: Long) -> Offset,
    durationMillis: Long = 200,
    keyTimes: List<Long> = emptyList()
): Unit
```

Performs a swipe gesture on nodes in the focus path.

The swipe follows the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(kotlin.Function1,kotlin.Long,kotlin.collections.List)` from 0 till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(kotlin.Function1,kotlin.Long,kotlin.collections.List)`. Will force sampling of an event at all times defined in `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(kotlin.Function1,kotlin.Long,kotlin.collections.List)`. The time between events is kept as close to `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/InjectionScope#eventPeriodMillis()` as possible, given the constraints.

The coordinates are NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`) and is usually used for focused movement (that is, a focused node would move to the next/previous focusable node in the hierarchy with a swipe).

| Parameters |
|---|---|
| `curve: (timeMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html) -> https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The function that describes the gesture. The argument passed to the function is the time in milliseconds since the start of the swipe, and the return value is the location of the pointer at that point in time. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the gesture (default duration is 200 milliseconds) |
| `keyTimes: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html> = emptyList()` | An optional list of timestamps in milliseconds at which a move event must be sampled |

### IndirectPointerInjectionScope.swipe

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipe)

```
fun IndirectPointerInjectionScope.swipe(
    start: Offset,
    end: Offset,
    durationMillis: Long = 200
): Unit
```

Performs a swipe gesture on nodes in the focus path.

The motion events are linearly interpolated between `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Long)` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipe(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Long)`.

The coordinates are NOT in the node's local coordinate system (see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`) and is usually used for focused movement (that is, a focused node would move to the next/previous focusable node in the hierarchy with a swipe).

| Parameters |
|---|---|
| `start: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position of the pointer starting the swipe gesture, in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). |
| `end: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position of the pointer ending the swipe gesture, in the indirect pointer input device's coordinate system (`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/IndirectPointerInjectionScope#inputDeviceSize()`). |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the swipe gesture (default duration is 200 milliseconds) |

### IndirectPointerInjectionScope.swipeDown

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipeDown)

```
fun IndirectPointerInjectionScope.swipeDown(
    startY: Float,
    endY: Float,
    durationMillis: Long = 200
): Unit
```

Performs a swipe down gesture on nodes in the focus path along `x = [IndirectPointerInjectionScope.inputDeviceCenter].x`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds.

| Parameters |
|---|---|
| `startY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The y-coordinate of the start of the swipe. Must be less than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `endY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The y-coordinate of the end of the swipe. Must be greater than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeDown(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the swipe. By default, 200 milliseconds. |

### IndirectPointerInjectionScope.swipeLeft

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipeLeft)

```
fun IndirectPointerInjectionScope.swipeLeft(
    startX: Float,
    endX: Float,
    durationMillis: Long = 200
): Unit
```

Performs a swipe left gesture on nodes in the focus path along `y = [IndirectPointerInjectionScope.inputDeviceCenter].y`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds.

| Parameters |
|---|---|
| `startX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The x-coordinate of the start of the swipe. Must be greater than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `endX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The x-coordinate of the end of the swipe. Must be less than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeLeft(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the swipe. By default, 200 milliseconds. |

### IndirectPointerInjectionScope.swipeRight

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipeRight)

```
fun IndirectPointerInjectionScope.swipeRight(
    startX: Float,
    endX: Float,
    durationMillis: Long = 200
): Unit
```

Performs a swipe right gesture on nodes in the focus path along `y = [IndirectPointerInjectionScope.inputDeviceCenter].y`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds.

| Parameters |
|---|---|
| `startX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The x-coordinate of the start of the swipe. Must be less than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `endX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The x-coordinate of the end of the swipe. Must be greater than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeRight(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the swipe. By default, 200 milliseconds. |

### IndirectPointerInjectionScope.swipeUp

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipeUp)

```
fun IndirectPointerInjectionScope.swipeUp(
    startY: Float,
    endY: Float,
    durationMillis: Long = 200
): Unit
```

Performs a swipe up gesture on nodes in the focus path along `x = [IndirectPointerInjectionScope.inputDeviceCenter].x`, from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)` till `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)`, taking `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)` milliseconds.

| Parameters |
|---|---|
| `startY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The y-coordinate of the start of the swipe. Must be greater than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `endY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The y-coordinate of the end of the swipe. Must be less than or equal to the `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeUp(kotlin.Float,kotlin.Float,kotlin.Long)`. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = 200` | The duration of the swipe. By default, 200 milliseconds. |

### IndirectPointerInjectionScope.swipeWithVelocity

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+function:swipeWithVelocity)

```
fun IndirectPointerInjectionScope.swipeWithVelocity(
    start: Offset,
    end: Offset,
    endVelocity: @FloatRange(from = 0.0) Float,
    durationMillis: Long = VelocityPathFinder.calculateDefaultDuration(start, end, endVelocity)
): Unit
```

Performs a swipe gesture on nodes in the focus path such that it ends with the given `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)`.

The swipe will go through `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)` at t=0 and through `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)` at t=`https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)`. In between, the swipe will go monotonically from `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).swipeWithVelocity(androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset,kotlin.Float,kotlin.Long)`, but not strictly. Due to imprecision, no guarantees can be made for the actual velocity at the end of the gesture, but generally it is within 0.1 of the desired velocity.

When a swipe cannot be created that results in the desired velocity (because the input is too restrictive), an exception will be thrown with suggestions to fix the input.

The coordinates are NOT in the node's local coordinate system and is usually used for focused movement (that is, a focused node would move to the next focusable node in the hierarchy with a swipe).

The default duration is calculated such that a feasible swipe can be created that ends in the given velocity.

| Parameters |
|---|---|
| `start: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position of the pointer starting the swipe gesture, in the indirect pointer input device's coordinate system. |
| `end: https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset` | The position of the pointer ending the swipe gesture, in the indirect pointer input device's coordinate system. |
| `endVelocity: @https://developer.android.com/reference/kotlin/androidx/annotation/FloatRange(from = 0.0) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The velocity of the swipe gesture at the moment it ends in px/second. Must be positive. |
| `durationMillis: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html = VelocityPathFinder.calculateDefaultDuration(start, end, endVelocity)` | The duration of the swipe gesture in milliseconds. Must be long enough that at least 3 input events are generated, which happens with a duration of 40ms or more. If omitted, a duration is calculated such that a valid swipe with velocity can be created. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | When no swipe can be generated that will result in the desired velocity. The error message will suggest changes to the input parameters such that a swipe will become feasible. |

## Extension properties

### IndirectPointerInjectionScope.inputDeviceBottom

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceBottom) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceBottom: Float
```

The y-coordinate for the bottom of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that, unless `inputDeviceHeight == 0`, `inputDeviceBottom != inputDeviceHeight`. In particular, `inputDeviceBottom == inputDeviceHeight - 1f`, because pixels are 0-based. If `inputDeviceHeight == 0`, `inputDeviceBottom == 0` too.

### IndirectPointerInjectionScope.inputDeviceBottomCenter

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceBottomCenter) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceBottomCenter: Offset
```

The center of the bottom edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that `inputDeviceBottomCenter.y != inputDeviceHeight`, see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottom()`.

### IndirectPointerInjectionScope.inputDeviceBottomLeft

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceBottomLeft) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceBottomLeft: Offset
```

The bottom left corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that `inputDeviceBottomLeft.y != inputDeviceHeight`, see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottom()`.

### IndirectPointerInjectionScope.inputDeviceBottomRight

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceBottomRight) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceBottomRight: Offset
```

The bottom right corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that `inputDeviceBottomRight.x != inputDeviceWidth` and `inputDeviceBottomRight.y != inputDeviceHeight`, see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceRight()` and `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceBottom()`.

### IndirectPointerInjectionScope.inputDeviceCenter

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceCenter) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceCenter: Offset
```

The center of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceCenterLeft

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceCenterLeft) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceCenterLeft: Offset
```

The center of the left edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceCenterRight

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceCenterRight) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceCenterRight: Offset
```

The center of the right edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that `inputDeviceCenterRight.x != inputDeviceWidth`, see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceRight()`.

### IndirectPointerInjectionScope.inputDeviceCenterX

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceCenterX) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceCenterX: Float
```

The x-coordinate for the center of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceCenterY

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceCenterY) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceCenterY: Float
```

The y-coordinate for the center of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceHeight

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceHeight) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceHeight: Int
```

The height of the external indirect pointer input device that provide the height boundary for indirect input. If you go outside this height, the tests will throw an exception. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceLeft

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceLeft) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceLeft: Float
```

The x-coordinate for the left edge of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceRight

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceRight) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceRight: Float
```

The x-coordinate for the right edge of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that, unless `inputDeviceWidth == 0`, `inputDeviceRight != inputDeviceWidth`. In particular, `inputDeviceRight == inputDeviceWidth - 1f`, because pixels are 0-based. If `inputDeviceWidth == 0`, `inputDeviceRight == 0` too.

### IndirectPointerInjectionScope.inputDeviceTop

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceTop) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceTop: Float
```

The y-coordinate for the top of the indirect pointer input device we're interacting with in px, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceTopCenter

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceTopCenter) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceTopCenter: Offset
```

The center of the top edge of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceTopLeft

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceTopLeft) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceTopLeft: Offset
```

The top left corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

### IndirectPointerInjectionScope.inputDeviceTopRight

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceTopRight) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceTopRight: Offset
```

The top right corner of the indirect pointer input device we're interacting with, where (0, 0) is the top left corner of the indirect pointer input device. Note: This is not related to the screen coordinates.

Note that `inputDeviceTopRight.x != inputDeviceWidth`, see `https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.IndirectPointerInjectionScope).inputDeviceRight()`.

### IndirectPointerInjectionScope.inputDeviceWidth

Cmn Artifact: [androidx.compose.ui:ui-test](https://developer.android.com/jetpack/androidx/releases/compose-ui) [View Source](https://cs.android.com/search?q=file:androidx/compose/ui/test/IndirectPointerInjectionScope.kt+symbol:inputDeviceWidth) Added in [1.12.0](https://developer.android.com/jetpack/androidx/releases/compose-ui#1.12.0)

```
val IndirectPointerInjectionScope.inputDeviceWidth: Int
```

The width of the external indirect pointer input device that provide the width boundary for indirect input. If you go outside this width, the tests will throw an exception. Note: This is not related to the screen coordinates.