| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package org.mjdev.desktop.windows
- import android.annotation.SuppressLint
- import androidx.compose.foundation.layout.Box
- import androidx.compose.runtime.Composable
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.draw.alpha
- import androidx.compose.ui.layout.LayoutCoordinates
- import androidx.compose.ui.layout.onPlaced
- import androidx.compose.ui.layout.positionOnScreen
- import androidx.compose.ui.unit.DpOffset
- import androidx.compose.ui.unit.DpSize
- import androidx.compose.ui.unit.dp
- import org.mjdev.desktop.context.DesktopContextScope.Companion.withDesktopContext
- import org.mjdev.desktop.context.IDesktopContext
- @SuppressLint("UnusedBoxWithConstraintsScope")
- @Composable
- fun ChromeWindow(
- modifier: Modifier = Modifier,
- content: @Composable ChromeWindowState.() -> Unit,
- ) = withDesktopContext {
- val windowState = ChromeWindowState(context)
- Box(
- modifier =
- modifier
- .alpha(0f)
- .onPlaced { coords ->
- windowState.onPlaced(coords)
- },
- content = { content(windowState) },
- )
- ChromeWindowInternal(
- state = windowState,
- ) {
- content(windowState)
- }
- }
- @Composable
- fun ChromeWindowInternal(
- state: ChromeWindowState,
- content: @Composable () -> Unit,
- ) {
- // todo
- content()
- }
- class ChromeWindowState(
- val context: IDesktopContext,
- ) {
- var size: DpSize = DpSize.Zero
- var position: DpOffset = DpOffset.Zero
- fun onPlaced(coords: LayoutCoordinates) {
- position = coords.positionOnScreen().let { pos -> DpOffset(pos.x.dp, pos.y.dp) }
- size = coords.size.let { size -> DpSize(size.width.dp, size.height.dp) }
- }
- }
|