xiaoshen 2 weeks ago committed by GitHub
parent
commit
9f3ce80ab4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 51
      experimental/lwjgl-integration/README.md

51
experimental/lwjgl-integration/README.md

@ -5,4 +5,53 @@ Note that:
- not all features are implemented
- not all features are currently supported (Accessibility, Input Methods)
- to pass some event information it is needed to pass it via AWT events (java.awt.KeyEvent and java.awt.MouseEvent). In the future versions of Compose we plan to get rid of the need of AWT events.
- it has bugs (it doesn't show cursor in TextField)
## Problems
### Cursor In TextField
This is easy, you need to provide `androidx.compose.ui.platform.WindowInfo` in CompositionLocal
For example:
```kotlin
CompositionLocalProvider(
LocalWindowInfo provides object : WindowInfo { override val isWindowFocused: Boolean = true }
) {
// Your App
}
```
### Popup
Since Compose still use some AWT events (https://github.com/JetBrains/compose-jb/issues/1736), you can provide a fake contaniner.
```kotlin
val awtContainer = object : Container() {}
// call it when your custom compose app changes window position
fun onWindowUpdate(x: Int, y: Int, width: Int, height: Int) {
awtContainer.setBounds(x, y, width, height)
}
CompositionLocalProvider(
LocalLayerContainer provides awtContainer
) {
// Your App
}
```
`LocalLayerContainer` is internal, so you need to use a trick.
Create a package `androidx.compose.ui.awt` and create a file `LocalLayerContainer.desktop.kt`
Put following code inside
```kotlin
import androidx.compose.runtime.staticCompositionLocalOf
import your.package.yourFakeAwtContainer
val LocalLayerContainer: androidx.compose.runtime.ProvidableCompositionLocal<java.awt.Container> =
staticCompositionLocalOf { yourFakeAwtContainer }
```
Then you would be able to access the internal `LocalLayerContainer`

Loading…
Cancel
Save