Skip to content
This repository was archived by the owner on Mar 26, 2024. It is now read-only.

Commit

Permalink
Move to-AWT key conversions to projector-server-core
Browse files Browse the repository at this point in the history
  • Loading branch information
SerVB committed Sep 3, 2020
1 parent cf5a585 commit 46977d5
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 339 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import org.jetbrains.projector.common.protocol.handshake.commonVersionList
import org.jetbrains.projector.common.protocol.toClient.*
import org.jetbrains.projector.common.protocol.toServer.*
import org.jetbrains.projector.server.ReadyClientSettings.TouchState
import org.jetbrains.projector.server.core.convert.toAwt.toAwtKeyEvent
import org.jetbrains.projector.server.core.protocol.HandshakeTypesSelector
import org.jetbrains.projector.server.core.protocol.KotlinxJsonToClientHandshakeEncoder
import org.jetbrains.projector.server.core.protocol.KotlinxJsonToServerHandshakeDecoder
Expand All @@ -63,7 +64,6 @@ import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.Transferable
import java.awt.datatransfer.UnsupportedFlavorException
import java.awt.event.InputEvent
import java.awt.event.KeyEvent
import java.awt.event.MouseEvent
import java.awt.event.MouseWheelEvent
import java.awt.peer.ComponentPeer
Expand Down Expand Up @@ -311,57 +311,27 @@ class ProjectorServer private constructor(
laterInvokator(mouseWheelEvent)
}

is ClientKeyEvent -> {
val keyEventType = message.keyEventType.toAwtKeyEventId()

val code = message.code.toJavaCodeOrNull() ?: run {
logger.error { "$message: unknown code, skipping" }
return
}

val isKeystroke = KeyModifier.CTRL_KEY in message.modifiers
val key = if (isKeystroke) {
code.toJavaControlCharOrNull()
}
else {
message.key.singleOrNull()
} ?: KeyEvent.CHAR_UNDEFINED

val keyEvent = createKeyEvent(
message.timeStamp + clientSettings.connectionMillis,
keyEventType,
PWindow.windows.last().target,
location = message.location.toJavaLocation(),
key = key,
code = code,
modifiers = message.modifiers
)

SwingUtilities.invokeLater {
laterInvokator(keyEvent)
}
}

is ClientKeyPressEvent -> {
val key = message.key.toJavaCharOrNull() ?: run {
logger.error { "$message: unknown key, skipping" }
return
is ClientKeyEvent -> message.toAwtKeyEvent(
connectionMillis = clientSettings.connectionMillis,
target = focusOwnerOrTarget(PWindow.windows.last().target),
errorLogger = { logger.error(lazyMessage = it) }
)
?.let {
SwingUtilities.invokeLater {
laterInvokator(it)
}
}

val keyEvent = createKeyEvent(
message.timeStamp + clientSettings.connectionMillis,
KeyEvent.KEY_TYPED,
PWindow.windows.last().target,
key = key,
code = KeyEvent.VK_UNDEFINED,
location = KeyEvent.KEY_LOCATION_UNKNOWN,
modifiers = message.modifiers
)

SwingUtilities.invokeLater {
laterInvokator(keyEvent)
is ClientKeyPressEvent -> message.toAwtKeyEvent(
connectionMillis = clientSettings.connectionMillis,
target = focusOwnerOrTarget(PWindow.windows.last().target),
errorLogger = { logger.error(lazyMessage = it) }
)
?.let {
SwingUtilities.invokeLater {
laterInvokator(it)
}
}
}

is ClientRequestImageDataEvent -> {
val imageData = ProjectorImageCacher.getImage(message.imageId) ?: ImageData.Empty
Expand Down Expand Up @@ -664,27 +634,9 @@ class ProjectorServer private constructor(
caretInfoUpdater.stop()
}

private fun createKeyEvent(
timeStamp: Long,
id: Int,
source: Component,
key: Char,
code: Int,
location: Int,
modifiers: Set<KeyModifier>,
): KeyEvent {
private fun focusOwnerOrTarget(target: Component): Component {
val manager = KeyboardFocusManager.getCurrentKeyboardFocusManager()
val focusedComponent = manager.focusOwner ?: source

return KeyEvent(
focusedComponent,
id,
timeStamp,
modifiers.toKeyInt(),
code,
key,
location
)
return manager.focusOwner ?: target
}

private fun createMouseEvent(
Expand Down Expand Up @@ -813,18 +765,6 @@ class ProjectorServer private constructor(
val isEnabled: Boolean
get() = System.getProperty(ENABLE_PROPERTY_NAME)?.toBoolean() ?: false

private val keyModifierMask = mapOf(
KeyModifier.ALT_KEY to InputEvent.ALT_DOWN_MASK,
KeyModifier.CTRL_KEY to InputEvent.CTRL_DOWN_MASK,
KeyModifier.SHIFT_KEY to InputEvent.SHIFT_DOWN_MASK,
KeyModifier.META_KEY to InputEvent.META_DOWN_MASK,
KeyModifier.REPEAT to 0 // todo: find a way to use this key
)

private fun Set<KeyModifier>.toKeyInt(): Int {
return map(keyModifierMask::getValue).fold(0, Int::or)
}

private val mouseModifierMask = mapOf(
MouseModifier.ALT_KEY to InputEvent.ALT_DOWN_MASK,
MouseModifier.CTRL_KEY to InputEvent.CTRL_DOWN_MASK,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,10 @@ import org.jetbrains.projector.awt.data.Direction
import org.jetbrains.projector.common.protocol.data.*
import org.jetbrains.projector.common.protocol.data.Point
import org.jetbrains.projector.common.protocol.toClient.*
import org.jetbrains.projector.common.protocol.toServer.ClientKeyEvent
import org.jetbrains.projector.common.protocol.toServer.ResizeDirection
import org.jetbrains.projector.server.log.Logger
import java.awt.*
import java.awt.Cursor.*
import java.awt.event.KeyEvent
import java.awt.geom.PathIterator
import java.awt.geom.Point2D
import java.awt.geom.Rectangle2D
Expand Down Expand Up @@ -230,18 +228,6 @@ fun Composite.toCommonComposite(): CommonComposite = when (this) {
else -> UnknownComposite("Unknown composite class: ${this::class.java.canonicalName}")
}

fun ClientKeyEvent.KeyEventType.toAwtKeyEventId() = when (this) {
ClientKeyEvent.KeyEventType.DOWN -> KeyEvent.KEY_PRESSED
ClientKeyEvent.KeyEventType.UP -> KeyEvent.KEY_RELEASED
}

fun ClientKeyEvent.KeyLocation.toJavaLocation() = when (this) {
ClientKeyEvent.KeyLocation.STANDARD -> KeyEvent.KEY_LOCATION_STANDARD
ClientKeyEvent.KeyLocation.LEFT -> KeyEvent.KEY_LOCATION_LEFT
ClientKeyEvent.KeyLocation.RIGHT -> KeyEvent.KEY_LOCATION_RIGHT
ClientKeyEvent.KeyLocation.NUMPAD -> KeyEvent.KEY_LOCATION_NUMPAD
}

fun roundToInfinity(x: Double): Double = when {
x.isNaN() || x.isInfinite() -> x
x > 0 -> ceil(x)
Expand Down
Loading

0 comments on commit 46977d5

Please sign in to comment.