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