You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

115 lines
3.5 KiB

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<String>) {
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<String>) {
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()
}
}
}
}
}