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

Cleanup samples (#453)

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