Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
084c17ad
Unverified
Commit
084c17ad
authored
Jan 18, 2022
by
Nikolay Igotti
Committed by
GitHub
Jan 18, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup samples (#453)
parent
3facce45
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
59 additions
and
56 deletions
+59
-56
blank.yml
.github/workflows/blank.yml
+3
-3
README.md
README.md
+1
-1
.project
samples/SkiaAwtSample/.project
+0
-0
build.gradle.kts
samples/SkiaAwtSample/build.gradle.kts
+1
-1
JetBrainsMono-Regular.ttf
samples/SkiaAwtSample/fonts/JetBrainsMono-Regular.ttf
+0
-0
gradle-wrapper.jar
samples/SkiaAwtSample/gradle/wrapper/gradle-wrapper.jar
+0
-0
gradle-wrapper.properties
...es/SkiaAwtSample/gradle/wrapper/gradle-wrapper.properties
+0
-0
gradlew
samples/SkiaAwtSample/gradlew
+0
-0
gradlew.bat
samples/SkiaAwtSample/gradlew.bat
+0
-0
settings.gradle.kts
samples/SkiaAwtSample/settings.gradle.kts
+9
-0
App.kt
samples/SkiaAwtSample/src/main/kotlin/SkiaAwtSample/App.kt
+6
-5
ClocksAwt.kt
.../SkiaAwtSample/src/main/kotlin/SkiaAwtSample/ClocksAwt.kt
+11
-10
PureSwing.kt
.../SkiaAwtSample/src/main/kotlin/SkiaAwtSample/PureSwing.kt
+6
-6
SkiaPanel.kt
.../SkiaAwtSample/src/main/kotlin/SkiaAwtSample/SkiaPanel.kt
+1
-1
SwingSkia.kt
.../SkiaAwtSample/src/main/kotlin/SkiaAwtSample/SwingSkia.kt
+14
-22
build.gradle.kts
samples/SkiaMultiplatformSample/build.gradle.kts
+6
-6
App.awt.kt
.../src/awtMain/kotlin/org/jetbrains/skiko/sample/App.awt.kt
+0
-0
settings.gradle
settings.gradle
+1
-1
No files found.
.github/workflows/blank.yml
View file @
084c17ad
...
...
@@ -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 :Skia
JvmSample:installDist # check jvm
sample works
./gradlew --stacktrace --info :Skia
AwtSample: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 :Skia
Jvm
Sample:installDist # check jvm sample works
./gradlew --stacktrace --info :Skia
Awt
Sample: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 :Skia
Jvm
Sample:installDist # check jvm sample works
./gradlew --stacktrace --info :Skia
Awt
Sample:installDist # check jvm sample works
-
uses
:
actions/upload-artifact@v2
with
:
name
:
test-reports-windows
...
...
README.md
View file @
084c17ad
...
...
@@ -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 :Skia
JvmSample:run`
-
`./gradlew :Skia
AwtSample:run`
samples/Skia
Jvm
Sample/.project
→
samples/Skia
Awt
Sample/.project
View file @
084c17ad
File moved
samples/Skia
Jvm
Sample/build.gradle.kts
→
samples/Skia
Awt
Sample/build.gradle.kts
View file @
084c17ad
...
...
@@ -44,7 +44,7 @@ dependencies {
}
application
{
mainClass
.
set
(
"Skia
Jvm
Sample.AppKt"
)
mainClass
.
set
(
"Skia
Awt
Sample.AppKt"
)
}
val
additionalArguments
=
mutableMapOf
<
String
,
String
>()
...
...
samples/Skia
Jvm
Sample/fonts/JetBrainsMono-Regular.ttf
→
samples/Skia
Awt
Sample/fonts/JetBrainsMono-Regular.ttf
View file @
084c17ad
File moved
samples/Skia
Jvm
Sample/gradle/wrapper/gradle-wrapper.jar
→
samples/Skia
Awt
Sample/gradle/wrapper/gradle-wrapper.jar
View file @
084c17ad
File moved
samples/Skia
Jvm
Sample/gradle/wrapper/gradle-wrapper.properties
→
samples/Skia
Awt
Sample/gradle/wrapper/gradle-wrapper.properties
View file @
084c17ad
File moved
samples/Skia
Jvm
Sample/gradlew
→
samples/Skia
Awt
Sample/gradlew
View file @
084c17ad
File moved
samples/Skia
Jvm
Sample/gradlew.bat
→
samples/Skia
Awt
Sample/gradlew.bat
View file @
084c17ad
File moved
samples/Skia
Jvm
Sample/settings.gradle.kts
→
samples/Skia
Awt
Sample/settings.gradle.kts
View file @
084c17ad
...
...
@@ -2,11 +2,8 @@ pluginManagement {
repositories
{
mavenCentral
()
gradlePluginPortal
()
maven
{
url
=
uri
(
"https://dl.bintray.com/kotlin/kotlin-eap"
)
}
}
}
rootProject
.
name
=
"Skia
Jvm
Sample"
rootProject
.
name
=
"Skia
Awt
Sample"
samples/Skia
JvmSample/src/main/kotlin/SkiaJvm
Sample/App.kt
→
samples/Skia
AwtSample/src/main/kotlin/SkiaAwt
Sample/App.kt
View file @
084c17ad
package
Skia
Jvm
Sample
package
Skia
Awt
Sample
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"
->
S
wingSkia
()
when
(
System
.
getProperty
(
"skiko.
swing.
interop"
))
{
"true"
->
s
wingSkia
()
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
=
Clocks
Jvm
(
skiaLayer
)
val
clocks
=
Clocks
Awt
(
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
}
samples/Skia
JvmSample/src/main/kotlin/SkiaJvmSample/ClocksJvm
.kt
→
samples/Skia
AwtSample/src/main/kotlin/SkiaAwtSample/ClocksAwt
.kt
View file @
084c17ad
package
Skia
Jvm
Sample
package
Skia
Awt
Sample
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
Clocks
Jvm
(
private
val
layer
:
SkiaLayer
):
SkikoView
{
val
typeface
=
Typeface
.
makeFromFile
(
"fonts/JetBrainsMono-Regular.ttf"
)
val
font
=
Font
(
typeface
,
40f
)
val
paint
=
Paint
().
apply
{
class
Clocks
Awt
(
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
=
0
xff9BC730L
.
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
=
0
xFFFFFFFF
.
toInt
()
}
val
watchStroke
=
Paint
().
apply
{
color
=
0
xFF000000
.
toInt
()
...
...
@@ -56,7 +56,7 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
)
angle
+=
(
2.0
*
PI
/
12.0
).
toFloat
()
}
val
time
=
(
currentTimestamp
/
1
E6
)
%
60000
+
val
time
=
(
nanoTime
/
1
E6
)
%
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
(
0
xFF000000
.
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
}
...
...
samples/Skia
JvmSample/src/main/kotlin/SkiaJvm
Sample/PureSwing.kt
→
samples/Skia
AwtSample/src/main/kotlin/SkiaAwt
Sample/PureSwing.kt
View file @
084c17ad
package
Skia
Jvm
Sample
package
Skia
Awt
Sample
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
(
make
Button
(
"Skiko"
).
apply
{
addActionListener
{
createWindow
(
"Skiko"
,
false
)
}
},
BorderLayout
.
NORTH
)
window
.
contentPane
.
add
(
Button
(
"Swing"
).
apply
{
window
.
contentPane
.
add
(
make
Button
(
"Swing"
).
apply
{
addActionListener
{
pureSwing
()
}
},
BorderLayout
.
WEST
)
window
.
contentPane
.
add
(
Button
(
"Swing+Skiko"
).
apply
{
window
.
contentPane
.
add
(
make
Button
(
"Swing+Skiko"
).
apply
{
addActionListener
{
S
wingSkia
()
s
wingSkia
()
}
},
BorderLayout
.
EAST
)
window
.
setVisible
(
true
)
window
.
isVisible
=
true
}
\ No newline at end of file
samples/Skia
JvmSample/src/main/kotlin/SkiaJvm
Sample/SkiaPanel.kt
→
samples/Skia
AwtSample/src/main/kotlin/SkiaAwt
Sample/SkiaPanel.kt
View file @
084c17ad
package
Skia
Jvm
Sample
package
Skia
Awt
Sample
import
org.jetbrains.skiko.ClipComponent
import
org.jetbrains.skiko.SkiaLayer
...
...
samples/Skia
JvmSample/src/main/kotlin/SkiaJvm
Sample/SwingSkia.kt
→
samples/Skia
AwtSample/src/main/kotlin/SkiaAwt
Sample/SwingSkia.kt
View file @
084c17ad
package
Skia
Jvm
Sample
package
Skia
Awt
Sample
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
make
Button
(
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
S
wingSkia
()
=
SwingUtilities
.
invokeLater
{
fun
s
wingSkia
()
=
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
(
make
Button
(
text
=
"Fullscreen"
,
action
=
{
panel
.
layer
.
fullscreen
=
!
panel
.
layer
.
fullscreen
...
...
@@ -45,7 +37,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
BorderLayout
.
NORTH
)
window
.
contentPane
.
add
(
Button
(
make
Button
(
text
=
"Add SP"
,
action
=
{
window
.
contentPane
.
remove
(
panel
)
...
...
@@ -57,7 +49,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
BorderLayout
.
WEST
)
window
.
contentPane
.
add
(
Button
(
make
Button
(
text
=
"Remove SP"
,
action
=
{
window
.
contentPane
.
remove
(
panel
)
...
...
@@ -66,7 +58,7 @@ fun SwingSkia() = SwingUtilities.invokeLater {
BorderLayout
.
EAST
)
window
.
contentPane
.
add
(
Button
(
make
Button
(
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
,
Clocks
Jvm
(
layer
)))
layer
.
addView
(
GenericSkikoView
(
layer
,
Clocks
Awt
(
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
)
...
...
samples/SkiaMultiplatformSample/build.gradle.kts
View file @
084c17ad
...
...
@@ -74,7 +74,7 @@ kotlin {
targets
.
add
(
iosArm64
())
}
jvm
{
jvm
(
"awt"
)
{
compilations
.
all
{
kotlinOptions
.
jvmTarget
=
"11"
}
...
...
@@ -112,7 +112,7 @@ kotlin {
dependsOn
(
commonMain
)
}
val
jvm
Main
by
getting
{
val
awt
Main
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
>(
"run
Jvm
"
)
{
val
kotlinTask
=
project
.
tasks
.
named
(
"compileKotlin
Jvm
"
)
project
.
tasks
.
register
<
JavaExec
>(
"run
Awt
"
)
{
val
kotlinTask
=
project
.
tasks
.
named
(
"compileKotlin
Awt
"
)
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_
jvm
Kt"
)
mainClass
.
set
(
"org.jetbrains.skiko.sample.App_
awt
Kt"
)
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
{
...
...
samples/SkiaMultiplatformSample/src/
jvmMain/kotlin/org/jetbrains/skiko/sample/App.jvm
.kt
→
samples/SkiaMultiplatformSample/src/
awtMain/kotlin/org/jetbrains/skiko/sample/App.awt
.kt
View file @
084c17ad
File moved
settings.gradle
View file @
084c17ad
rootProject
.
name
=
"skiko-all"
includeBuild
(
"samples/Skia
Jvm
Sample"
)
includeBuild
(
"samples/Skia
Awt
Sample"
)
includeBuild
(
"skiko"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment