diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ImageComposeSceneTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ImageComposeSceneTest.kt index 4f229bbc062dc..4eb85bae8c627 100644 --- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ImageComposeSceneTest.kt +++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ImageComposeSceneTest.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.test.InternalTestApi import androidx.compose.ui.test.junit4.DesktopScreenshotTestRule import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog import kotlin.time.Duration.Companion.seconds import kotlin.time.ExperimentalTime import kotlinx.coroutines.runBlocking @@ -94,6 +95,19 @@ class ImageComposeSceneTest { } } + @Test + fun `run dialog in center`() { + val image = renderComposeScene( + width = 80, + height = 40, + ) { + Dialog(onDismissRequest = {}) { + Box(Modifier.size(20.dp).background(Color.Red)) + } + } + screenshotRule.write(image) + } + @Test fun `run multiple ImageComposeScene`() { for (i in 1..300) { diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ImageComposeScene.skikoMain.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ImageComposeScene.skikoMain.kt index 3c7cfabb1ba27..c13f76f4099aa 100644 --- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ImageComposeScene.skikoMain.kt +++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ImageComposeScene.skikoMain.kt @@ -29,6 +29,10 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.PointerKeyboardModifiers import androidx.compose.ui.input.pointer.PointerType import androidx.compose.ui.node.RootForTest +import androidx.compose.ui.platform.PlatformContext +import androidx.compose.ui.platform.WindowInfo +import androidx.compose.ui.platform.WindowInfoImpl +import androidx.compose.ui.scene.ComposeSceneContext import androidx.compose.ui.scene.ComposeScenePointer import androidx.compose.ui.scene.MultiLayerComposeScene import androidx.compose.ui.unit.Constraints @@ -132,11 +136,29 @@ class ImageComposeScene @ExperimentalComposeUiApi constructor( private val surface = Surface.makeRasterN32Premul(width, height) + private val imageSize = IntSize(width, height) + + private val _windowInfo = WindowInfoImpl().apply { + isWindowFocused = true + containerSize = imageSize + } + + private val _platformContext = object : PlatformContext by PlatformContext.Empty { + override val windowInfo: WindowInfo + get() = _windowInfo + } + + private val _sceneContext = object : ComposeSceneContext { + override val platformContext: PlatformContext + get() = _platformContext + } + private val scene = MultiLayerComposeScene( density = density, layoutDirection = layoutDirection, - size = IntSize(width, height), + size = imageSize, coroutineContext = coroutineContext, + composeSceneContext = _sceneContext ).also { it.setContent(content = content) } diff --git a/golden/compose/ui/ui-desktop/androidx_compose_ui_ImageComposeSceneTest_run_dialog_in_center.png b/golden/compose/ui/ui-desktop/androidx_compose_ui_ImageComposeSceneTest_run_dialog_in_center.png new file mode 100644 index 0000000000000..5eb0b130c9af3 Binary files /dev/null and b/golden/compose/ui/ui-desktop/androidx_compose_ui_ImageComposeSceneTest_run_dialog_in_center.png differ