@@ -31,11 +31,14 @@ import androidx.compose.ui.input.key.Key
3131import androidx.compose.ui.input.key.key
3232import androidx.compose.ui.input.key.onKeyEvent
3333import androidx.compose.ui.input.key.onPreviewKeyEvent
34- import androidx.compose.ui.input.pointer.AwaitPointerEventScope
3534import androidx.compose.ui.input.pointer.PointerButtons
3635import androidx.compose.ui.input.pointer.PointerEvent
3736import androidx.compose.ui.input.pointer.PointerEventType
3837import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
38+ import androidx.compose.ui.input.pointer.isCtrlPressed
39+ import androidx.compose.ui.input.pointer.isPrimaryPressed
40+ import androidx.compose.ui.input.pointer.isSecondaryPressed
41+ import androidx.compose.ui.input.pointer.isShiftPressed
3942import androidx.compose.ui.input.pointer.onPointerEvent
4043import androidx.compose.ui.input.pointer.pointerInput
4144import androidx.compose.ui.unit.dp
@@ -45,7 +48,6 @@ import androidx.compose.ui.window.rememberWindowState
4548import androidx.compose.ui.window.runApplicationTest
4649import com.google.common.truth.Truth.assertThat
4750import java.awt.Dimension
48- import java.awt.Toolkit
4951import java.awt.event.KeyEvent
5052import java.awt.event.MouseEvent
5153import java.awt.event.MouseEvent.BUTTON1
@@ -54,9 +56,9 @@ import java.awt.event.MouseEvent.BUTTON3_DOWN_MASK
5456import java.awt.event.MouseEvent.CTRL_DOWN_MASK
5557import java.awt.event.MouseEvent.MOUSE_DRAGGED
5658import java.awt.event.MouseEvent.MOUSE_PRESSED
57- import java.awt.event.MouseEvent.MOUSE_RELEASED
5859import java.awt.event.MouseEvent.SHIFT_DOWN_MASK
5960import java.awt.event.MouseWheelEvent.WHEEL_UNIT_SCROLL
61+ import kotlin.test.assertTrue
6062import org.jetbrains.skiko.hostOs
6163import org.junit.Test
6264
@@ -532,23 +534,16 @@ class WindowInputEventTest {
532534
533535 awaitIdle()
534536 assertThat(receivedButtons.size).isEqualTo(1 )
535- assertThat(receivedButtons.last()).isEqualTo(
536- PointerButtons (
537- // on macOS ctrl + primary click is treated as secondary click
538- isPrimaryPressed = ! hostOs.isMacOS,
539- isSecondaryPressed = true ,
540- )
541- )
537+ receivedButtons.last().let { buttons ->
538+ // on macOS ctrl + primary click is treated as secondary
539+ assertThat(buttons.isPrimaryPressed).isEqualTo(! hostOs.isMacOS)
540+ assertTrue(buttons.isSecondaryPressed)
541+ }
542542 assertThat(receivedKeyboardModifiers.size).isEqualTo(1 )
543- assertThat(receivedKeyboardModifiers.last()).isEqualTo(
544- PointerKeyboardModifiers (
545- isCtrlPressed = true ,
546- isShiftPressed = true ,
547- isCapsLockOn = getLockingKeyStateSafe(KeyEvent .VK_CAPS_LOCK ),
548- isScrollLockOn = getLockingKeyStateSafe(KeyEvent .VK_SCROLL_LOCK ),
549- isNumLockOn = getLockingKeyStateSafe(KeyEvent .VK_NUM_LOCK ),
550- )
551- )
543+ receivedKeyboardModifiers.last().let { modifiers ->
544+ assertTrue(modifiers.isCtrlPressed)
545+ assertTrue(modifiers.isShiftPressed)
546+ }
552547
553548 window.sendMouseWheelEvent(
554549 100 , 50 , WHEEL_UNIT_SCROLL ,
@@ -559,23 +554,16 @@ class WindowInputEventTest {
559554
560555 awaitIdle()
561556 assertThat(receivedButtons.size).isEqualTo(2 )
562- assertThat(receivedButtons.last()).isEqualTo(
563- PointerButtons (
564- // on macOS ctrl + primary click is treated as secondary click
565- isPrimaryPressed = ! hostOs.isMacOS,
566- isSecondaryPressed = true ,
567- )
568- )
557+ receivedButtons.last().let { buttons ->
558+ // on macOS ctrl + primary click is treated as secondary
559+ assertThat(buttons.isPrimaryPressed).isEqualTo(! hostOs.isMacOS)
560+ assertTrue(buttons.isSecondaryPressed)
561+ }
569562 assertThat(receivedKeyboardModifiers.size).isEqualTo(2 )
570- assertThat(receivedKeyboardModifiers.last()).isEqualTo(
571- PointerKeyboardModifiers (
572- isCtrlPressed = true ,
573- isShiftPressed = true ,
574- isCapsLockOn = getLockingKeyStateSafe(KeyEvent .VK_CAPS_LOCK ),
575- isScrollLockOn = getLockingKeyStateSafe(KeyEvent .VK_SCROLL_LOCK ),
576- isNumLockOn = getLockingKeyStateSafe(KeyEvent .VK_NUM_LOCK ),
577- )
578- )
563+ receivedKeyboardModifiers.last().let { modifiers ->
564+ assertTrue(modifiers.isCtrlPressed)
565+ assertTrue(modifiers.isShiftPressed)
566+ }
579567 }
580568
581569 @Test
@@ -656,42 +644,6 @@ class WindowInputEventTest {
656644 window.dispose()
657645 }
658646
659- private fun getLockingKeyStateSafe (
660- mask : Int
661- ): Boolean = try {
662- Toolkit .getDefaultToolkit().getLockingKeyState(mask)
663- } catch (_: Exception ) {
664- false
665- }
666-
667- /* *
668- * Handle only the first received event and drop all the others that are received
669- * in a single frame
670- */
671- private fun Modifier.onFirstPointerEvent (
672- eventType : PointerEventType ,
673- onEvent : AwaitPointerEventScope .(event: PointerEvent ) -> Unit
674- ) = pointerInput(eventType, onEvent) {
675- while (true ) {
676- awaitPointerEventScope {
677- val event = awaitEvent(eventType)
678- onEvent(event)
679- }
680- }
681- }
682-
683- private suspend fun AwaitPointerEventScope.awaitEvent (
684- eventType : PointerEventType
685- ): PointerEvent {
686- var event: PointerEvent
687- do {
688- event = awaitPointerEvent()
689- } while (
690- event.type != eventType
691- )
692- return event
693- }
694-
695647 private val PointerEvent .pressed get() = changes.first().pressed
696648 private val PointerEvent .position get() = changes.first().position
697649}
0 commit comments