package org.jetbrains.compose.desktop import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.MutableState import androidx.compose.desktop.Window import androidx.compose.desktop.WindowEvents import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.preferredHeight import androidx.compose.foundation.layout.padding import androidx.compose.material.Surface import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.IntSize import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.TextField import androidx.compose.material.Button import androidx.compose.foundation.Text import org.jetbrains.compose.desktop.browser.Browser import org.jetbrains.compose.desktop.browser.BrowserView import org.jetbrains.compose.desktop.browser.BrowserSlicer fun main(args: Array) { val browser = when { args.isEmpty() -> BrowserView() args[0] == "slices" -> BrowserSlicer(IntSize(800, 700)) else -> { BrowserView() } } val url = mutableStateOf("https://www.google.com") Window( title = "CEF-compose", size = IntSize(900, 900), events = WindowEvents( onFocusGet = { browser.load(url.value) } ) ) { Surface( modifier = Modifier.fillMaxSize(), color = Color.DarkGray ) { Column { AddressBar(browser, url) Spacer(Modifier.height(10.dp)) WebView(browser) } } } } @Composable private fun AddressBar(browser: Browser, url: MutableState) { Surface( color = Color.Transparent, modifier = Modifier .preferredHeight(58.dp) .padding(start = 10.dp, end = 10.dp, top = 10.dp, bottom = 0.dp) ) { Row { TextField( backgroundColor = Color.White, activeColor = Color.DarkGray, inactiveColor = Color.DarkGray, value = url.value, onValueChange = { url.value = it }, modifier = Modifier.weight(1f), shape = CircleShape, label = { } ) Spacer(Modifier.width(10.dp)) Button( modifier = Modifier.preferredHeight(48.dp), shape = CircleShape, onClick = { browser.load(url.value) } ) { Text(text = "Go!") } } } } @Composable private fun WebView(browser: Browser) { Surface( color = Color.Gray, modifier = Modifier.fillMaxSize().padding(10.dp) ) { when (browser) { is BrowserView -> { browser.view() } is BrowserSlicer -> { Column { browser.slice(0, 200) Spacer(Modifier.height(30.dp)) browser.slice(200, 200) Spacer(Modifier.height(30.dp)) browser.tail() } } } } }