Unverified Commit 084c17ad authored by Nikolay Igotti's avatar Nikolay Igotti Committed by GitHub

Cleanup samples (#453)

parent 3facce45
......@@ -31,7 +31,7 @@ jobs:
./gradlew --stacktrace --info -Pskiko.native.enabled=true :skiko:awtTest
./gradlew --stacktrace --info -Pskiko.native.enabled=true :skiko:macosX64Test
./gradlew --stacktrace --info -Pskiko.native.enabled=true :skiko:publishToMavenLocal
./gradlew --stacktrace --info :SkiaJvmSample:installDist # check jvm sample works
./gradlew --stacktrace --info :SkiaAwtSample:installDist # check AWT sample works
- uses: actions/upload-artifact@v2
with:
name: test-reports-macos
......@@ -88,7 +88,7 @@ jobs:
export DISPLAY=:0
./gradlew --stacktrace --info -Pskiko.native.enabled=true :skiko:linuxX64Test :skiko:awtTest
./gradlew --stacktrace --info :skiko:publishToMavenLocal
./gradlew --stacktrace --info :SkiaJvmSample:installDist # check jvm sample works
./gradlew --stacktrace --info :SkiaAwtSample:installDist # check jvm sample works
- uses: actions/upload-artifact@v2
with:
name: test-reports-linux
......@@ -146,7 +146,7 @@ jobs:
run: |
./gradlew --stacktrace --info :skiko:awtTest
./gradlew --stacktrace --info :skiko:publishToMavenLocal
./gradlew --stacktrace --info :SkiaJvmSample:installDist # check jvm sample works
./gradlew --stacktrace --info :SkiaAwtSample:installDist # check jvm sample works
- uses: actions/upload-artifact@v2
with:
name: test-reports-windows
......
......@@ -116,4 +116,4 @@ Don't run any background tasks, click mouse, or press keys during the tests. Oth
#### Run samples
- First follow the instruction here: [Building JVM bindings](#building-jvm-bindings)
- `./gradlew :SkiaJvmSample:run`
- `./gradlew :SkiaAwtSample:run`
......@@ -44,7 +44,7 @@ dependencies {
}
application {
mainClass.set("SkiaJvmSample.AppKt")
mainClass.set("SkiaAwtSample.AppKt")
}
val additionalArguments = mutableMapOf<String, String>()
......
......@@ -2,11 +2,8 @@ pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
maven {
url = uri("https://dl.bintray.com/kotlin/kotlin-eap")
}
}
}
rootProject.name = "SkiaJvmSample"
rootProject.name = "SkiaAwtSample"
package SkiaJvmSample
package SkiaAwtSample
import kotlinx.coroutines.*
import org.jetbrains.skiko.*
......@@ -14,8 +14,8 @@ import javax.imageio.ImageIO
fun main(args: Array<String>) {
val windows = parseArgs(args)
repeat(windows) {
when (System.getProperty("skiko.interop")) {
"true" -> SwingSkia()
when (System.getProperty("skiko.swing.interop")) {
"true" -> swingSkia()
else -> createWindow("window $it", windows == 1)
}
}
......@@ -23,7 +23,7 @@ fun main(args: Array<String>) {
fun createWindow(title: String, exitOnClose: Boolean) = SwingUtilities.invokeLater {
val skiaLayer = SkiaLayer()
val clocks = ClocksJvm(skiaLayer)
val clocks = ClocksAwt(skiaLayer)
val window = JFrame(title)
window.defaultCloseOperation =
......@@ -63,6 +63,7 @@ fun createWindow(title: String, exitOnClose: Boolean) = SwingUtilities.invokeLat
miTakeScreenshot.addActionListener(object : ActionListener {
override fun actionPerformed(actionEvent: ActionEvent?) {
val screenshot = skiaLayer.screenshot()!!
@OptIn(DelicateCoroutinesApi::class)
GlobalScope.launch(Dispatchers.IO) {
val image = screenshot.toBufferedImage()
ImageIO.write(image, "png", File(defaultScreenshotPath))
......@@ -129,4 +130,4 @@ private fun parseArgs(args: Array<String>): Int {
}
}
return windows
}
\ No newline at end of file
}
package SkiaJvmSample
package SkiaAwtSample
import org.jetbrains.skiko.*
import org.jetbrains.skia.*
......@@ -10,22 +10,22 @@ import kotlin.math.cos
import kotlin.math.sin
import kotlin.math.PI
class ClocksJvm(private val layer: SkiaLayer): SkikoView {
val typeface = Typeface.makeFromFile("fonts/JetBrainsMono-Regular.ttf")
val font = Font(typeface, 40f)
val paint = Paint().apply {
class ClocksAwt(private val layer: SkiaLayer): SkikoView {
private val typeface = Typeface.makeFromFile("fonts/JetBrainsMono-Regular.ttf")
private val font = Font(typeface, 40f)
private val paint = Paint().apply {
color = 0xff9BC730L.toInt()
mode = PaintMode.FILL
strokeWidth = 1f
}
private var frame = 0
var xpos = 0.0
var ypos = 0.0
private var xpos = 0.0
private var ypos = 0.0
private val fontCollection = FontCollection()
.setDefaultFontManager(FontMgr.default)
override fun onRender(canvas: Canvas, width: Int, height: Int, currentTimestamp: Long) {
override fun onRender(canvas: Canvas, width: Int, height: Int, nanoTime: Long) {
val watchFill = Paint().apply { color = 0xFFFFFFFF.toInt() }
val watchStroke = Paint().apply {
color = 0xFF000000.toInt()
......@@ -56,7 +56,7 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
)
angle += (2.0 * PI / 12.0).toFloat()
}
val time = (currentTimestamp / 1E6) % 60000 +
val time = (nanoTime / 1E6) % 60000 +
(x.toFloat() / width * 5000).toLong() +
(y.toFloat() / width * 5000).toLong()
......@@ -80,7 +80,7 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
val style = ParagraphStyle()
val renderInfo = ParagraphBuilder(style, fontCollection)
.pushStyle(TextStyle().setColor(0xFF000000.toInt()))
.addText("Graphics API: ${layer.renderApi} ✿゚ ${currentSystemTheme}")
.addText("Graphics API: ${layer.renderApi} ✿゚ $currentSystemTheme")
.popStyle()
.build()
renderInfo.layout(Float.POSITIVE_INFINITY)
......@@ -108,6 +108,7 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
xpos = event.x
ypos = event.y
}
else -> {}
}
// TODO: provide example that covers all features of pointer event
}
......
package SkiaJvmSample
package SkiaAwtSample
import java.awt.BorderLayout
import javax.swing.JFrame
......@@ -9,20 +9,20 @@ fun pureSwing() {
window.defaultCloseOperation = WindowConstants.DISPOSE_ON_CLOSE
window.setSize(800, 600)
window.contentPane.add(Button("Skiko").apply {
window.contentPane.add(makeButton("Skiko").apply {
addActionListener {
createWindow("Skiko", false)
}
}, BorderLayout.NORTH)
window.contentPane.add(Button("Swing").apply {
window.contentPane.add(makeButton("Swing").apply {
addActionListener {
pureSwing()
}
}, BorderLayout.WEST)
window.contentPane.add(Button("Swing+Skiko").apply {
window.contentPane.add(makeButton("Swing+Skiko").apply {
addActionListener {
SwingSkia()
swingSkia()
}
}, BorderLayout.EAST)
window.setVisible(true)
window.isVisible = true
}
\ No newline at end of file
package SkiaJvmSample
package SkiaAwtSample
import org.jetbrains.skiko.ClipComponent
import org.jetbrains.skiko.SkiaLayer
......
package SkiaJvmSample
package SkiaAwtSample
import java.awt.BorderLayout
import java.awt.Color
import java.awt.Dimension
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent
import java.awt.event.MouseEvent
import java.awt.event.MouseMotionAdapter
import javax.swing.*
import org.jetbrains.skiko.GenericSkikoView
fun Button(
fun makeButton(
text: String,
action: (() -> Unit)? = null
): JButton {
val button = JButton(text)
button.setToolTipText("Tooltip for $text button.")
button.setPreferredSize(Dimension(100, 100))
button.addActionListener(object : ActionListener {
public override fun actionPerformed(e: ActionEvent) {
action?.invoke()
}
})
button.toolTipText = "Tooltip for $text button."
button.preferredSize = Dimension(100, 100)
button.addActionListener { action?.invoke() }
return button
}
fun SwingSkia() = SwingUtilities.invokeLater {
fun swingSkia() = SwingUtilities.invokeLater {
val window = JFrame()
window.defaultCloseOperation = WindowConstants.DISPOSE_ON_CLOSE
window.title = "SwingSkiaWindow"
......@@ -36,7 +28,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
var panel = getSkiaPanel()
window.contentPane.add(
Button(
makeButton(
text = "Fullscreen",
action = {
panel.layer.fullscreen = !panel.layer.fullscreen
......@@ -45,7 +37,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
BorderLayout.NORTH
)
window.contentPane.add(
Button(
makeButton(
text = "Add SP",
action = {
window.contentPane.remove(panel)
......@@ -57,7 +49,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
BorderLayout.WEST
)
window.contentPane.add(
Button(
makeButton(
text = "Remove SP",
action = {
window.contentPane.remove(panel)
......@@ -66,7 +58,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
BorderLayout.EAST
)
window.contentPane.add(
Button(
makeButton(
text = "New Window",
action = {
createWindow("ComposeWindow", false)
......@@ -77,15 +69,15 @@ fun SwingSkia() = SwingUtilities.invokeLater {
window.contentPane.add(panel, BorderLayout.CENTER)
window.setSize(800, 600)
window.setVisible(true)
window.isVisible = true
}
private fun getSkiaPanel(): SkiaPanel {
return SkiaPanel().apply {
layer.addView(GenericSkikoView(layer, ClocksJvm(layer)))
layer.addView(GenericSkikoView(layer, ClocksAwt(layer)))
val btnPanelOK = JPanel()
btnPanelOK.setLayout(BorderLayout(0, 0))
btnPanelOK.setBackground(Color.white)
btnPanelOK.layout = BorderLayout(0, 0)
btnPanelOK.background = Color.white
btnPanelOK.add(JButton("OK"))
val btnCancel = JButton("Cancel")
add(btnPanelOK)
......
......@@ -74,7 +74,7 @@ kotlin {
targets.add(iosArm64())
}
jvm {
jvm("awt") {
compilations.all {
kotlinOptions.jvmTarget = "11"
}
......@@ -112,7 +112,7 @@ kotlin {
dependsOn(commonMain)
}
val jvmMain by getting {
val awtMain by getting {
dependsOn(commonMain)
dependencies {
implementation("org.jetbrains.skiko:skiko-awt-runtime-$hostOs-$hostArch:$version")
......@@ -193,8 +193,8 @@ project.tasks.register<Exec>("runNative") {
}
}
project.tasks.register<JavaExec>("runJvm") {
val kotlinTask = project.tasks.named("compileKotlinJvm")
project.tasks.register<JavaExec>("runAwt") {
val kotlinTask = project.tasks.named("compileKotlinAwt")
dependsOn(kotlinTask)
systemProperty("skiko.fps.enabled", "true")
systemProperty("skiko.linux.autodpi", "true")
......@@ -208,9 +208,9 @@ project.tasks.register<JavaExec>("runJvm") {
}
.filterKeys { it.startsWith("skiko.") }
.forEach { systemProperty(it.key, it.value) }
mainClass.set("org.jetbrains.skiko.sample.App_jvmKt")
mainClass.set("org.jetbrains.skiko.sample.App_awtKt")
classpath(kotlinTask.get().outputs)
classpath(kotlin.jvm().compilations["main"].runtimeDependencyFiles)
classpath(kotlin.jvm("awt").compilations["main"].runtimeDependencyFiles)
}
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile>().configureEach {
......
rootProject.name = "skiko-all"
includeBuild("samples/SkiaJvmSample")
includeBuild("samples/SkiaAwtSample")
includeBuild("skiko")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment