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
a171fead
Unverified
Commit
a171fead
authored
Nov 19, 2021
by
Roman Sedaikin
Committed by
GitHub
Nov 19, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Skiko events update. (#386)
parent
db8a94cc
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
369 additions
and
129 deletions
+369
-129
build.gradle.kts
samples/SkiaJvmSample/build.gradle.kts
+5
-0
App.kt
samples/SkiaJvmSample/src/main/kotlin/SkiaJvmSample/App.kt
+21
-11
ClocksJvm.kt
.../SkiaJvmSample/src/main/kotlin/SkiaJvmSample/ClocksJvm.kt
+21
-2
SwingSkia.kt
.../SkiaJvmSample/src/main/kotlin/SkiaJvmSample/SwingSkia.kt
+19
-26
Clocks.kt
...rc/commonMain/kotlin/org/jetbrains/skiko/sample/Clocks.kt
+18
-11
Events.kt
skiko/src/commonMain/kotlin/org/jetbrains/skiko/Events.kt
+95
-9
Convertors.ios.kt
.../src/iosMain/kotlin/org/jetbrains/skiko/Convertors.ios.kt
+0
-0
Convertors.js.kt
skiko/src/jsMain/kotlin/org/jetbrains/skiko/Convertors.js.kt
+80
-0
SkiaLayer.js.kt
skiko/src/jsMain/kotlin/org/jetbrains/skiko/SkiaLayer.js.kt
+5
-32
Convertors.jvm.kt
.../src/jvmMain/kotlin/org/jetbrains/skiko/Convertors.jvm.kt
+37
-8
Convertors.macos.kt
.../macosMain/kotlin/org/jetbrains/skiko/Convertors.macos.kt
+54
-0
SkiaLayer.macos.kt
...c/macosMain/kotlin/org/jetbrains/skiko/SkiaLayer.macos.kt
+14
-30
No files found.
samples/SkiaJvmSample/build.gradle.kts
View file @
a171fead
...
@@ -76,6 +76,11 @@ tasks.register("runWithTransparency") {
...
@@ -76,6 +76,11 @@ tasks.register("runWithTransparency") {
dependsOn
(
casualRun
)
dependsOn
(
casualRun
)
}
}
tasks
.
register
(
"runInterop"
)
{
additionalArguments
+=
mapOf
(
"skiko.swing.interop"
to
"true"
)
dependsOn
(
casualRun
)
}
tasks
.
withType
<
KotlinCompile
>().
configureEach
{
tasks
.
withType
<
KotlinCompile
>().
configureEach
{
kotlinOptions
.
freeCompilerArgs
+=
"-Xopt-in=kotlin.RequiresOptIn"
kotlinOptions
.
freeCompilerArgs
+=
"-Xopt-in=kotlin.RequiresOptIn"
}
}
samples/SkiaJvmSample/src/main/kotlin/SkiaJvmSample/App.kt
View file @
a171fead
...
@@ -11,10 +11,13 @@ import java.io.File
...
@@ -11,10 +11,13 @@ import java.io.File
import
java.nio.file.Files
import
java.nio.file.Files
import
javax.imageio.ImageIO
import
javax.imageio.ImageIO
fun
main
()
{
fun
main
(
args
:
Array
<
String
>
)
{
val
windows
=
1
val
windows
=
parseArgs
(
args
)
repeat
(
windows
)
{
repeat
(
windows
)
{
createWindow
(
"window $it"
,
windows
==
1
)
when
(
System
.
getProperty
(
"skiko.interop"
))
{
"true"
->
SwingSkia
()
else
->
createWindow
(
"window $it"
,
windows
==
1
)
}
}
}
}
}
...
@@ -91,14 +94,7 @@ fun createWindow(title: String, exitOnClose: Boolean) = SwingUtilities.invokeLat
...
@@ -91,14 +94,7 @@ fun createWindow(title: String, exitOnClose: Boolean) = SwingUtilities.invokeLat
println
(
"Changed renderer for $layer: new value is ${layer.renderApi}"
)
println
(
"Changed renderer for $layer: new value is ${layer.renderApi}"
)
}
}
skiaLayer
.
skikoView
=
GenericSkikoView
(
skiaLayer
,
clocks
)
skiaLayer
.
addView
(
GenericSkikoView
(
skiaLayer
,
clocks
))
skiaLayer
.
addMouseMotionListener
(
object
:
MouseMotionAdapter
()
{
override
fun
mouseMoved
(
event
:
MouseEvent
)
{
clocks
.
xpos
=
event
.
x
clocks
.
ypos
=
event
.
y
}
})
// Window transparency
// Window transparency
if
(
System
.
getProperty
(
"skiko.transparency"
)
==
"true"
)
{
if
(
System
.
getProperty
(
"skiko.transparency"
)
==
"true"
)
{
...
@@ -120,3 +116,17 @@ fun createWindow(title: String, exitOnClose: Boolean) = SwingUtilities.invokeLat
...
@@ -120,3 +116,17 @@ fun createWindow(title: String, exitOnClose: Boolean) = SwingUtilities.invokeLat
skiaLayer
.
paint
(
window
.
graphics
)
skiaLayer
.
paint
(
window
.
graphics
)
window
.
isVisible
=
true
window
.
isVisible
=
true
}
}
private
fun
parseArgs
(
args
:
Array
<
String
>):
Int
{
var
windows
=
1
for
(
arg
in
args
)
{
try
{
windows
=
arg
.
toInt
()
break
}
catch
(
e
:
NumberFormatException
)
{
println
(
"The passed argument:($arg) is not a integer number!"
)
}
}
return
windows
}
\ No newline at end of file
samples/SkiaJvmSample/src/main/kotlin/SkiaJvmSample/ClocksJvm.kt
View file @
a171fead
...
@@ -20,8 +20,8 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
...
@@ -20,8 +20,8 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
}
}
private
var
frame
=
0
private
var
frame
=
0
var
xpos
=
0
var
xpos
=
0
.0
var
ypos
=
0
var
ypos
=
0
.0
private
val
fontCollection
=
FontCollection
()
private
val
fontCollection
=
FontCollection
()
.
setDefaultFontManager
(
FontMgr
.
default
)
.
setDefaultFontManager
(
FontMgr
.
default
)
...
@@ -100,4 +100,23 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
...
@@ -100,4 +100,23 @@ class ClocksJvm(private val layer: SkiaLayer): SkikoView {
canvas
.
drawPicture
(
picture
,
null
,
Paint
())
canvas
.
drawPicture
(
picture
,
null
,
Paint
())
canvas
.
drawLine
(
left
,
top
+
rectH
,
left
+
rectW
,
top
,
Paint
())
canvas
.
drawLine
(
left
,
top
+
rectH
,
left
+
rectW
,
top
,
Paint
())
}
}
override
fun
onPointerEvent
(
event
:
SkikoPointerEvent
)
{
when
(
event
.
kind
)
{
SkikoPointerEventKind
.
DOWN
,
SkikoPointerEventKind
.
MOVE
->
{
xpos
=
event
.
x
ypos
=
event
.
y
}
}
// TODO: provide example that covers all features of pointer event
}
override
fun
onInputEvent
(
event
:
SkikoInputEvent
)
{
// TODO: provide example that covers all features of text input event
}
override
fun
onKeyboardEvent
(
event
:
SkikoKeyboardEvent
)
{
// TODO: provide example that covers all features of keyboard event
}
}
}
\ No newline at end of file
samples/SkiaJvmSample/src/main/kotlin/SkiaJvmSample/SwingSkia.kt
View file @
a171fead
...
@@ -81,30 +81,23 @@ fun SwingSkia() = SwingUtilities.invokeLater {
...
@@ -81,30 +81,23 @@ fun SwingSkia() = SwingUtilities.invokeLater {
}
}
private
fun
getSkiaPanel
():
SkiaPanel
{
private
fun
getSkiaPanel
():
SkiaPanel
{
val
panel
=
SkiaPanel
()
return
SkiaPanel
().
apply
{
val
clocks
=
ClocksJvm
(
panel
.
layer
)
layer
.
addView
(
GenericSkikoView
(
layer
,
ClocksJvm
(
layer
)))
panel
.
layer
.
skikoView
=
GenericSkikoView
(
panel
.
layer
,
clocks
)
val
btnPanelOK
=
JPanel
()
val
btnPanelOK
=
JPanel
()
btnPanelOK
.
setLayout
(
BorderLayout
(
0
,
0
))
btnPanelOK
.
setLayout
(
BorderLayout
(
0
,
0
))
btnPanelOK
.
setBackground
(
Color
.
white
)
btnPanelOK
.
setBackground
(
Color
.
white
)
btnPanelOK
.
add
(
JButton
(
"OK"
))
btnPanelOK
.
add
(
JButton
(
"OK"
))
val
btnCancel
=
JButton
(
"Cancel"
)
val
btnCancel
=
JButton
(
"Cancel"
)
add
(
btnPanelOK
)
panel
.
add
(
btnPanelOK
)
add
(
btnCancel
)
panel
.
add
(
btnCancel
)
addComponentListener
(
object
:
ComponentAdapter
()
{
panel
.
addComponentListener
(
object
:
ComponentAdapter
()
{
override
fun
componentResized
(
e
:
ComponentEvent
)
{
override
fun
componentResized
(
e
:
ComponentEvent
)
{
btnPanelOK
.
setBounds
(
width
-
200
,
height
-
100
,
200
,
40
)
btnPanelOK
.
setBounds
(
panel
.
width
-
200
,
panel
.
height
-
100
,
200
,
40
)
btnCancel
.
setBounds
(
width
-
200
,
height
-
50
,
200
,
40
)
btnCancel
.
setBounds
(
panel
.
width
-
200
,
panel
.
height
-
50
,
200
,
40
)
invalidate
()
panel
.
invalidate
()
validate
()
panel
.
validate
()
repaint
()
panel
.
repaint
()
}
}
})
})
}
panel
.
layer
.
addMouseMotionListener
(
object
:
MouseMotionAdapter
()
{
override
fun
mouseMoved
(
event
:
MouseEvent
)
{
clocks
.
xpos
=
event
.
x
clocks
.
ypos
=
event
.
y
}
})
return
panel
}
}
samples/SkiaMultiplatformSample/src/commonMain/kotlin/org/jetbrains/skiko/sample/Clocks.kt
View file @
a171fead
...
@@ -5,14 +5,7 @@ import org.jetbrains.skia.paragraph.FontCollection
...
@@ -5,14 +5,7 @@ import org.jetbrains.skia.paragraph.FontCollection
import
org.jetbrains.skia.paragraph.ParagraphBuilder
import
org.jetbrains.skia.paragraph.ParagraphBuilder
import
org.jetbrains.skia.paragraph.ParagraphStyle
import
org.jetbrains.skia.paragraph.ParagraphStyle
import
org.jetbrains.skia.paragraph.TextStyle
import
org.jetbrains.skia.paragraph.TextStyle
import
org.jetbrains.skiko.currentSystemTheme
import
org.jetbrains.skiko.*
import
org.jetbrains.skiko.SkiaLayer
import
org.jetbrains.skiko.SkikoView
import
org.jetbrains.skiko.SkikoPointerEvent
import
org.jetbrains.skiko.SkikoGestureEvent
import
org.jetbrains.skiko.SkikoGestureEventKind
import
org.jetbrains.skiko.SkikoGestureEventState
import
org.jetbrains.skiko.isLeftClick
import
kotlin.math.cos
import
kotlin.math.cos
import
kotlin.math.sin
import
kotlin.math.sin
import
kotlin.math.PI
import
kotlin.math.PI
...
@@ -103,10 +96,24 @@ class Clocks(private val layer: SkiaLayer): SkikoView {
...
@@ -103,10 +96,24 @@ class Clocks(private val layer: SkiaLayer): SkikoView {
}
}
override
fun
onPointerEvent
(
event
:
SkikoPointerEvent
)
{
override
fun
onPointerEvent
(
event
:
SkikoPointerEvent
)
{
if
(
event
.
isLeftClick
)
{
when
(
event
.
kind
)
{
xpos
=
event
.
x
SkikoPointerEventKind
.
DOWN
,
ypos
=
event
.
y
SkikoPointerEventKind
.
MOVE
->
{
xpos
=
event
.
x
ypos
=
event
.
y
}
else
->
{}
}
}
// TODO: provide example that covers all features of pointer event
}
override
fun
onInputEvent
(
event
:
SkikoInputEvent
)
{
// TODO: provide example that covers all features of text input event
}
override
fun
onKeyboardEvent
(
event
:
SkikoKeyboardEvent
)
{
println
(
event
.
kind
)
// TODO: provide example that covers all features of keyboard event
}
}
override
fun
onGestureEvent
(
event
:
SkikoGestureEvent
)
{
override
fun
onGestureEvent
(
event
:
SkikoGestureEvent
)
{
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skiko/Events.kt
View file @
a171fead
package
org.jetbrains.skiko
package
org.jetbrains.skiko
// Clicked mouse buttons bitmask.
// Clicked mouse buttons bitmask.
object
SkikoMouseButtons
{
inline
class
SkikoMouseButtons
(
val
value
:
Int
)
{
const
val
NONE
=
0
companion
object
{
const
val
LEFT
=
1
shl
0
val
NONE
=
SkikoMouseButtons
(
0
)
const
val
RIGHT
=
1
shl
1
val
LEFT
=
SkikoMouseButtons
(
1
)
const
val
MIDDLE
=
1
shl
2
val
RIGHT
=
SkikoMouseButtons
(
2
)
val
MIDDLE
=
SkikoMouseButtons
(
4
)
val
BUTTON_1
=
SkikoMouseButtons
(
1
)
val
BUTTON_2
=
SkikoMouseButtons
(
2
)
val
BUTTON_3
=
SkikoMouseButtons
(
4
)
val
BUTTON_4
=
SkikoMouseButtons
(
8
)
val
BUTTON_5
=
SkikoMouseButtons
(
16
)
val
BUTTON_6
=
SkikoMouseButtons
(
32
)
val
BUTTON_7
=
SkikoMouseButtons
(
64
)
val
BUTTON_8
=
SkikoMouseButtons
(
128
)
}
fun
has
(
value
:
SkikoMouseButtons
):
Boolean
{
if
(
value
.
value
and
this
.
value
!=
0
)
{
return
true
}
return
false
}
override
fun
toString
():
String
{
val
result
=
mutableListOf
<
String
>().
apply
{
if
(
has
(
SkikoMouseButtons
.
LEFT
))
{
add
(
"LEFT"
)
}
if
(
has
(
SkikoMouseButtons
.
RIGHT
))
{
add
(
"RIGHT"
)
}
if
(
has
(
SkikoMouseButtons
.
MIDDLE
))
{
add
(
"MIDDLE"
)
}
if
(
has
(
SkikoMouseButtons
.
BUTTON_4
))
{
add
(
"BUTTON_4"
)
}
if
(
has
(
SkikoMouseButtons
.
BUTTON_5
))
{
add
(
"BUTTON_5"
)
}
if
(
has
(
SkikoMouseButtons
.
BUTTON_6
))
{
add
(
"BUTTON_6"
)
}
if
(
has
(
SkikoMouseButtons
.
BUTTON_7
))
{
add
(
"BUTTON_7"
)
}
if
(
has
(
SkikoMouseButtons
.
BUTTON_8
))
{
add
(
"BUTTON_8"
)
}
}
return
if
(!
result
.
isEmpty
())
result
.
toString
()
else
""
}
}
inline
class
SkikoInputModifiers
(
val
value
:
Int
)
{
companion
object
{
val
EMPTY
=
SkikoInputModifiers
(
0
)
val
META
=
SkikoInputModifiers
(
1
)
val
CONTROL
=
SkikoInputModifiers
(
2
)
val
ALT
=
SkikoInputModifiers
(
4
)
val
SHIFT
=
SkikoInputModifiers
(
8
)
}
fun
has
(
value
:
SkikoInputModifiers
):
Boolean
{
if
(
value
.
value
and
this
.
value
!=
0
)
{
return
true
}
return
false
}
override
fun
toString
():
String
{
val
result
=
mutableListOf
<
String
>().
apply
{
if
(
has
(
SkikoInputModifiers
.
META
))
{
add
(
"META"
)
}
if
(
has
(
SkikoInputModifiers
.
CONTROL
))
{
add
(
"CONTROL"
)
}
if
(
has
(
SkikoInputModifiers
.
ALT
))
{
add
(
"ALT"
)
}
if
(
has
(
SkikoInputModifiers
.
SHIFT
))
{
add
(
"SHIFT"
)
}
}
return
if
(!
result
.
isEmpty
())
result
.
toString
()
else
""
}
}
}
enum
class
SkikoGestureEventKind
{
enum
class
SkikoGestureEventKind
{
...
@@ -22,7 +104,6 @@ data class SkikoGestureEvent(
...
@@ -22,7 +104,6 @@ data class SkikoGestureEvent(
val
x
:
Double
,
val
y
:
Double
,
val
x
:
Double
,
val
y
:
Double
,
val
velocity
:
Double
=
0.0
,
val
velocity
:
Double
=
0.0
,
val
direction
:
SkikoGestureEventDirection
=
SkikoGestureEventDirection
.
UNKNOWN
,
val
direction
:
SkikoGestureEventDirection
=
SkikoGestureEventDirection
.
UNKNOWN
,
val
interval
:
Long
=
0
,
val
rotation
:
Double
=
0.0
,
val
rotation
:
Double
=
0.0
,
val
scale
:
Double
=
1.0
,
val
scale
:
Double
=
1.0
,
val
kind
:
SkikoGestureEventKind
,
val
kind
:
SkikoGestureEventKind
,
...
@@ -42,6 +123,7 @@ enum class SkikoKeyboardEventKind {
...
@@ -42,6 +123,7 @@ enum class SkikoKeyboardEventKind {
expect
class
SkikoPlatformKeyboardEvent
expect
class
SkikoPlatformKeyboardEvent
data class
SkikoKeyboardEvent
(
data class
SkikoKeyboardEvent
(
val
code
:
Int
,
val
code
:
Int
,
val
modifiers
:
SkikoInputModifiers
=
SkikoInputModifiers
.
EMPTY
,
val
kind
:
SkikoKeyboardEventKind
,
val
kind
:
SkikoKeyboardEventKind
,
val
platform
:
SkikoPlatformKeyboardEvent
?
val
platform
:
SkikoPlatformKeyboardEvent
?
)
)
...
@@ -52,14 +134,18 @@ enum class SkikoPointerEventKind {
...
@@ -52,14 +134,18 @@ enum class SkikoPointerEventKind {
expect
class
SkikoPlatformPointerEvent
expect
class
SkikoPlatformPointerEvent
data class
SkikoPointerEvent
(
data class
SkikoPointerEvent
(
val
x
:
Double
,
val
y
:
Double
,
val
x
:
Double
,
val
y
:
Double
,
val
buttonMask
:
Int
,
val
buttons
:
SkikoMouseButtons
=
SkikoMouseButtons
.
NONE
,
val
modifiers
:
SkikoInputModifiers
=
SkikoInputModifiers
.
EMPTY
,
val
kind
:
SkikoPointerEventKind
,
val
kind
:
SkikoPointerEventKind
,
val
platform
:
SkikoPlatformPointerEvent
?
val
platform
:
SkikoPlatformPointerEvent
?
)
)
val
SkikoPointerEvent
.
isLeftClick
:
Boolean
val
SkikoPointerEvent
.
isLeftClick
:
Boolean
get
()
=
(
buttonMask
and
SkikoMouseButtons
.
LEFT
)
!=
0
&&
(
kind
==
SkikoPointerEventKind
.
UP
)
get
()
=
buttons
.
has
(
SkikoMouseButtons
.
LEFT
)
&&
(
kind
==
SkikoPointerEventKind
.
UP
)
val
SkikoPointerEvent
.
isRightClick
:
Boolean
val
SkikoPointerEvent
.
isRightClick
:
Boolean
get
()
=
(
buttonMask
and
SkikoMouseButtons
.
RIGHT
)
!=
0
&&
(
kind
==
SkikoPointerEventKind
.
UP
)
get
()
=
buttons
.
has
(
SkikoMouseButtons
.
RIGHT
)
&&
(
kind
==
SkikoPointerEventKind
.
UP
)
val
SkikoPointerEvent
.
isMiddleClick
:
Boolean
get
()
=
buttons
.
has
(
SkikoMouseButtons
.
MIDDLE
)
&&
(
kind
==
SkikoPointerEventKind
.
UP
)
skiko/src/iosMain/kotlin/org/jetbrains/skiko/Convertors.kt
→
skiko/src/iosMain/kotlin/org/jetbrains/skiko/Convertors.
ios.
kt
View file @
a171fead
File moved
skiko/src/jsMain/kotlin/org/jetbrains/skiko/Convertors.js.kt
0 → 100644
View file @
a171fead
package
org.jetbrains.skiko
import
org.w3c.dom.events.MouseEvent
import
org.w3c.dom.events.KeyboardEvent
fun
toSkikoEvent
(
event
:
MouseEvent
,
buttons
:
Boolean
,
kind
:
SkikoPointerEventKind
):
SkikoPointerEvent
{
return
SkikoPointerEvent
(
event
.
offsetX
,
event
.
offsetY
,
toSkikoMouseButtons
(
event
,
buttons
),
toSkikoModifiers
(
event
),
kind
,
event
)
}
fun
toSkikoEvent
(
event
:
KeyboardEvent
,
kind
:
SkikoKeyboardEventKind
):
SkikoKeyboardEvent
{
return
SkikoKeyboardEvent
(
event
.
keyCode
,
toSkikoModifiers
(
event
),
kind
,
event
)
}
private
fun
toSkikoMouseButtons
(
event
:
MouseEvent
,
pressed
:
Boolean
):
SkikoMouseButtons
{
// https://www.w3schools.com/jsref/event_button.asp
var
result
=
0
if
(
pressed
&&
event
.
button
.
toInt
()
==
0
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
LEFT
.
value
)
}
if
(
pressed
&&
event
.
button
.
toInt
()
==
2
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
RIGHT
.
value
)
}
if
(
pressed
&&
event
.
button
.
toInt
()
==
1
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
MIDDLE
.
value
)
}
return
SkikoMouseButtons
(
result
)
}
private
fun
toSkikoModifiers
(
event
:
MouseEvent
):
SkikoInputModifiers
{
var
result
=
0
if
(
event
.
altKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
ALT
.
value
)
}
if
(
event
.
shiftKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
SHIFT
.
value
)
}
if
(
event
.
ctrlKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
CONTROL
.
value
)
}
if
(
event
.
metaKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
META
.
value
)
}
return
SkikoInputModifiers
(
result
)
}
private
fun
toSkikoModifiers
(
event
:
KeyboardEvent
):
SkikoInputModifiers
{
var
result
=
0
if
(
event
.
altKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
ALT
.
value
)
}
if
(
event
.
shiftKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
SHIFT
.
value
)
}
if
(
event
.
ctrlKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
CONTROL
.
value
)
}
if
(
event
.
metaKey
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
META
.
value
)
}
return
SkikoInputModifiers
(
result
)
}
\ No newline at end of file
skiko/src/jsMain/kotlin/org/jetbrains/skiko/SkiaLayer.js.kt
View file @
a171fead
...
@@ -29,23 +29,6 @@ actual open class SkiaLayer {
...
@@ -29,23 +29,6 @@ actual open class SkiaLayer {
actual
var
skikoView
:
SkikoView
?
=
null
actual
var
skikoView
:
SkikoView
?
=
null
fun
translatePointerEvent
(
event
:
MouseEvent
,
buttons
:
Boolean
,
kind
:
SkikoPointerEventKind
):
SkikoPointerEvent
{
var
mask
=
SkikoMouseButtons
.
NONE
if
(
buttons
&&
event
.
button
.
toInt
()
==
0
)
mask
=
mask
or
SkikoMouseButtons
.
LEFT
// https://www.w3schools.com/jsref/event_button.asp
if
(
buttons
&&
event
.
button
.
toInt
()
==
2
)
mask
=
mask
or
SkikoMouseButtons
.
RIGHT
return
SkikoPointerEvent
(
event
.
offsetX
,
event
.
offsetY
,
mask
,
kind
,
event
)
}
actual
fun
attachTo
(
container
:
Any
)
{
actual
fun
attachTo
(
container
:
Any
)
{
attachTo
(
container
as
HTMLCanvasElement
,
false
)
attachTo
(
container
as
HTMLCanvasElement
,
false
)
}
}
...
@@ -66,36 +49,26 @@ actual open class SkiaLayer {
...
@@ -66,36 +49,26 @@ actual open class SkiaLayer {
// https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events
// https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events
htmlCanvas
.
addEventListener
(
"pointerdown"
,
{
event
->
htmlCanvas
.
addEventListener
(
"pointerdown"
,
{
event
->
event
as
MouseEvent
event
as
MouseEvent
skikoView
?.
onPointerEvent
(
translatePointerEvent
(
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
true
,
SkikoPointerEventKind
.
DOWN
))
event
,
true
,
SkikoPointerEventKind
.
DOWN
))
})
})
htmlCanvas
.
addEventListener
(
"pointerup"
,
{
event
->
htmlCanvas
.
addEventListener
(
"pointerup"
,
{
event
->
event
as
MouseEvent
event
as
MouseEvent
var
mask
=
SkikoMouseButtons
.
NONE
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
true
,
SkikoPointerEventKind
.
UP
))
skikoView
?.
onPointerEvent
(
translatePointerEvent
(
event
,
true
,
SkikoPointerEventKind
.
UP
))
})
})
htmlCanvas
.
addEventListener
(
"pointermove"
,
{
event
->
htmlCanvas
.
addEventListener
(
"pointermove"
,
{
event
->
event
as
MouseEvent
event
as
MouseEvent
skikoView
?.
onPointerEvent
(
translatePointerEvent
(
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
false
,
SkikoPointerEventKind
.
MOVE
))
event
,
false
,
SkikoPointerEventKind
.
MOVE
))
})
})
htmlCanvas
.
addEventListener
(
"contextmenu"
,
{
event
->
htmlCanvas
.
addEventListener
(
"contextmenu"
,
{
event
->
event
.
preventDefault
()
event
.
preventDefault
()
})
})
htmlCanvas
.
addEventListener
(
"keydown"
,
{
event
->
htmlCanvas
.
addEventListener
(
"keydown"
,
{
event
->
event
as
KeyboardEvent
event
as
KeyboardEvent
skikoView
?.
onKeyboardEvent
(
skikoView
?.
onKeyboardEvent
(
toSkikoEvent
(
event
,
SkikoKeyboardEventKind
.
DOWN
))
SkikoKeyboardEvent
(
event
.
keyCode
,
SkikoKeyboardEventKind
.
DOWN
,
event
)
)
})
})
htmlCanvas
.
addEventListener
(
"keyup"
,
{
event
->
htmlCanvas
.
addEventListener
(
"keyup"
,
{
event
->
event
as
KeyboardEvent
event
as
KeyboardEvent
skikoView
?.
onKeyboardEvent
(
SkikoKeyboardEvent
(
skikoView
?.
onKeyboardEvent
(
toSkikoEvent
(
event
,
SkikoKeyboardEventKind
.
UP
))
event
.
keyCode
,
SkikoKeyboardEventKind
.
UP
,
event
))
})
})
}
}
}
}
...
...
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/Convertors.kt
→
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/Convertors.
jvm.
kt
View file @
a171fead
...
@@ -82,12 +82,8 @@ fun toSkikoEvent(e: MouseEvent): SkikoPointerEvent {
...
@@ -82,12 +82,8 @@ fun toSkikoEvent(e: MouseEvent): SkikoPointerEvent {
return
SkikoPointerEvent
(
return
SkikoPointerEvent
(
e
.
x
.
toDouble
(),
e
.
x
.
toDouble
(),
e
.
y
.
toDouble
(),
e
.
y
.
toDouble
(),
when
(
e
.
button
)
{
toSkikoMouseButtons
(
e
.
modifiersEx
),
MouseEvent
.
BUTTON1
->
SkikoMouseButtons
.
LEFT
toSkikoModifiers
(
e
.
modifiersEx
),
MouseEvent
.
BUTTON2
->
SkikoMouseButtons
.
RIGHT
MouseEvent
.
BUTTON3
->
SkikoMouseButtons
.
MIDDLE
else
->
SkikoMouseButtons
.
NONE
},
when
(
e
.
id
)
{
when
(
e
.
id
)
{
MouseEvent
.
MOUSE_PRESSED
->
SkikoPointerEventKind
.
DOWN
MouseEvent
.
MOUSE_PRESSED
->
SkikoPointerEventKind
.
DOWN
MouseEvent
.
MOUSE_RELEASED
->
SkikoPointerEventKind
.
UP
MouseEvent
.
MOUSE_RELEASED
->
SkikoPointerEventKind
.
UP
...
@@ -105,7 +101,8 @@ fun toSkikoEvent(e: MouseWheelEvent): SkikoPointerEvent {
...
@@ -105,7 +101,8 @@ fun toSkikoEvent(e: MouseWheelEvent): SkikoPointerEvent {
return
SkikoPointerEvent
(
return
SkikoPointerEvent
(
e
.
x
.
toDouble
(),
e
.
x
.
toDouble
(),
e
.
y
.
toDouble
(),
e
.
y
.
toDouble
(),
SkikoMouseButtons
.
NONE
,
toSkikoMouseButtons
(
e
.
modifiersEx
),
toSkikoModifiers
(
e
.
modifiersEx
),
when
(
e
.
id
)
{
when
(
e
.
id
)
{
MouseEvent
.
MOUSE_WHEEL
->
SkikoPointerEventKind
.
SCROLL
MouseEvent
.
MOUSE_WHEEL
->
SkikoPointerEventKind
.
SCROLL
else
->
SkikoPointerEventKind
.
UNKNOWN
else
->
SkikoPointerEventKind
.
UNKNOWN
...
@@ -117,6 +114,7 @@ fun toSkikoEvent(e: MouseWheelEvent): SkikoPointerEvent {
...
@@ -117,6 +114,7 @@ fun toSkikoEvent(e: MouseWheelEvent): SkikoPointerEvent {
fun
toSkikoEvent
(
e
:
KeyEvent
):
SkikoKeyboardEvent
{
fun
toSkikoEvent
(
e
:
KeyEvent
):
SkikoKeyboardEvent
{
return
SkikoKeyboardEvent
(
return
SkikoKeyboardEvent
(
e
.
keyCode
,
e
.
keyCode
,
toSkikoModifiers
(
e
.
modifiersEx
),
when
(
e
.
id
)
{
when
(
e
.
id
)
{
KeyEvent
.
KEY_PRESSED
->
SkikoKeyboardEventKind
.
DOWN
KeyEvent
.
KEY_PRESSED
->
SkikoKeyboardEventKind
.
DOWN
KeyEvent
.
KEY_RELEASED
->
SkikoKeyboardEventKind
.
UP
KeyEvent
.
KEY_RELEASED
->
SkikoKeyboardEventKind
.
UP
...
@@ -129,7 +127,38 @@ fun toSkikoEvent(e: KeyEvent): SkikoKeyboardEvent {
...
@@ -129,7 +127,38 @@ fun toSkikoEvent(e: KeyEvent): SkikoKeyboardEvent {
fun
toSkikoEvent
(
e
:
InputMethodEvent
):
SkikoInputEvent
{
fun
toSkikoEvent
(
e
:
InputMethodEvent
):
SkikoInputEvent
{
return
SkikoInputEvent
(
return
SkikoInputEvent
(
""
,
""
,
// TODO: this parameter should be reconsidered
e
e
)
)
}
}
private
fun
toSkikoMouseButtons
(
buttons
:
Int
):
SkikoMouseButtons
{
var
result
=
0
if
(
buttons
and
InputEvent
.
BUTTON1_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
LEFT
.
value
)
}
if
(
buttons
and
InputEvent
.
BUTTON2_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
RIGHT
.
value
)
}
if
(
buttons
and
InputEvent
.
BUTTON3_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
MIDDLE
.
value
)
}
return
SkikoMouseButtons
(
result
)
}
private
fun
toSkikoModifiers
(
modifiers
:
Int
):
SkikoInputModifiers
{
var
result
=
0
if
(
modifiers
and
InputEvent
.
ALT_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
ALT
.
value
)
}
if
(
modifiers
and
InputEvent
.
SHIFT_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
SHIFT
.
value
)
}
if
(
modifiers
and
InputEvent
.
CTRL_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
CONTROL
.
value
)
}
if
(
modifiers
and
InputEvent
.
META_DOWN_MASK
!=
0
)
{
result
=
result
.
or
(
SkikoInputModifiers
.
META
.
value
)
}
return
SkikoInputModifiers
(
result
)
}
skiko/src/macosMain/kotlin/org/jetbrains/skiko/Convertors.macos.kt
0 → 100644
View file @
a171fead
package
org.jetbrains.skiko
import
kotlinx.cinterop.useContents
import
platform.AppKit.*
fun
toSkikoEvent
(
event
:
NSEvent
,
kind
:
SkikoPointerEventKind
,
view
:
NSView
):
SkikoPointerEvent
{
var
(
xpos
,
ypos
)
=
event
.
locationInWindow
.
useContents
{
x
to
y
}
// Translate.
view
.
frame
.
useContents
{
ypos
=
size
.
height
-
ypos
}
return
SkikoPointerEvent
(
xpos
,
ypos
,
toSkikoMouseButtons
(
event
),
toSkikoModifiers
(
event
),
kind
,
event
)
}
fun
toSkikoEvent
(
event
:
NSEvent
,
kind
:
SkikoKeyboardEventKind
):
SkikoKeyboardEvent
{
return
SkikoKeyboardEvent
(
event
.
keyCode
.
toInt
(),
toSkikoModifiers
(
event
),
kind
,
event
)
}
private
fun
toSkikoMouseButtons
(
event
:
NSEvent
):
SkikoMouseButtons
{
var
result
=
0
val
mask
=
event
.
buttonMask
.
toInt
()
if
((
mask
and
1
)
!=
0
||
event
.
buttonNumber
==
0L
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
LEFT
.
value
)
}
if
((
mask
and
2
)
!=
0
||
event
.
buttonNumber
==
1L
)
{
result
=
result
.
or
(
SkikoMouseButtons
.
RIGHT
.
value
)
}
return
SkikoMouseButtons
(
result
)
}
private
fun
toSkikoModifiers
(
event
:
NSEvent
):
SkikoInputModifiers
{
return
SkikoInputModifiers
.
EMPTY
}
\ No newline at end of file
skiko/src/macosMain/kotlin/org/jetbrains/skiko/SkiaLayer.macos.kt
View file @
a171fead
...
@@ -44,28 +44,6 @@ actual open class SkiaLayer() {
...
@@ -44,28 +44,6 @@ actual open class SkiaLayer() {
private
var
picture
:
PictureHolder
?
=
null
private
var
picture
:
PictureHolder
?
=
null
private
val
pictureRecorder
=
PictureRecorder
()
private
val
pictureRecorder
=
PictureRecorder
()
private
fun
eventToMouse
(
event
:
NSEvent
,
kind
:
SkikoPointerEventKind
):
SkikoPointerEvent
{
var
buttons
=
SkikoMouseButtons
.
NONE
val
mask
=
event
.
buttonMask
.
toInt
()
if
((
mask
and
1
)
!=
0
||
event
.
buttonNumber
==
0L
)
{
buttons
=
buttons
or
SkikoMouseButtons
.
LEFT
}
if
((
mask
and
2
)
!=
0
||
event
.
buttonNumber
==
1L
)
{
buttons
=
buttons
or
SkikoMouseButtons
.
RIGHT
}
var
(
x
,
y
)
=
event
.
locationInWindow
.
useContents
{
this
.
x
to
this
.
y
}
// Translate.
nsView
.
frame
.
useContents
{
y
=
size
.
height
-
y
}
return
SkikoPointerEvent
(
x
,
y
,
buttons
,
kind
,
event
)
}
private
fun
eventToKeyboard
(
event
:
NSEvent
,
kind
:
SkikoKeyboardEventKind
):
SkikoKeyboardEvent
{
return
SkikoKeyboardEvent
(
event
.
keyCode
.
toInt
(),
kind
,
event
)
}
actual
fun
attachTo
(
container
:
Any
)
{
actual
fun
attachTo
(
container
:
Any
)
{
attachTo
(
container
as
NSWindow
)
attachTo
(
container
as
NSWindow
)
}
}
...
@@ -87,31 +65,37 @@ actual open class SkiaLayer() {
...
@@ -87,31 +65,37 @@ actual open class SkiaLayer() {
override
fun
updateTrackingAreas
()
{
override
fun
updateTrackingAreas
()
{
trackingArea
?.
let
{
removeTrackingArea
(
it
)
}
trackingArea
?.
let
{
removeTrackingArea
(
it
)
}
trackingArea
=
NSTrackingArea
(
rect
=
bounds
,
trackingArea
=
NSTrackingArea
(
rect
=
bounds
,
options
=
NSMouseMoved
or
NSTrackingActiveInActiveApp
,
options
=
NSTrackingActiveAlways
or
NSTrackingMouseEnteredAndExited
or
NSTrackingMouseMoved
or
NSTrackingInVisibleRect
,
owner
=
nsView
,
userInfo
=
null
)
owner
=
nsView
,
userInfo
=
null
)
nsView
.
addTrackingArea
(
trackingArea
!!
)
nsView
.
addTrackingArea
(
trackingArea
!!
)
}
}
override
fun
rightMouseDown
(
event
:
NSEvent
)
{
override
fun
rightMouseDown
(
event
:
NSEvent
)
{
skikoView
?.
onPointerEvent
(
eventToMouse
(
event
,
SkikoPointerEventKind
.
DOWN
))
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
SkikoPointerEventKind
.
DOWN
,
nsView
))
}
}
override
fun
rightMouseUp
(
event
:
NSEvent
)
{
override
fun
rightMouseUp
(
event
:
NSEvent
)
{
skikoView
?.
onPointerEvent
(
eventToMouse
(
event
,
SkikoPointerEventKind
.
UP
))
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
SkikoPointerEventKind
.
UP
,
nsView
))
}
}
override
fun
mouseDown
(
event
:
NSEvent
)
{
override
fun
mouseDown
(
event
:
NSEvent
)
{
skikoView
?.
onPointerEvent
(
eventToMouse
(
event
,
SkikoPointerEventKind
.
DOWN
))
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
SkikoPointerEventKind
.
DOWN
,
nsView
))
}
}
override
fun
mouseUp
(
event
:
NSEvent
)
{
override
fun
mouseUp
(
event
:
NSEvent
)
{
skikoView
?.
onPointerEvent
(
eventToMouse
(
event
,
SkikoPointerEventKind
.
UP
))
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
SkikoPointerEventKind
.
UP
,
nsView
))
}
}
override
fun
mouseMoved
(
event
:
NSEvent
)
{
override
fun
mouseMoved
(
event
:
NSEvent
)
{
skikoView
?.
onPointerEvent
(
eventToMouse
(
event
,
SkikoPointerEventKind
.
MOVE
))
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
SkikoPointerEventKind
.
MOVE
,
nsView
))
}
override
fun
mouseDragged
(
event
:
NSEvent
)
{
skikoView
?.
onPointerEvent
(
toSkikoEvent
(
event
,
SkikoPointerEventKind
.
DRAG
,
nsView
))
}
}
override
fun
keyDown
(
event
:
NSEvent
)
{
override
fun
keyDown
(
event
:
NSEvent
)
{
skikoView
?.
onKeyboardEvent
(
eventToKeyboard
(
event
,
SkikoKeyboardEventKind
.
DOWN
))
skikoView
?.
onKeyboardEvent
(
toSkikoEvent
(
event
,
SkikoKeyboardEventKind
.
DOWN
))
}
}
override
fun
keyUp
(
event
:
NSEvent
)
{
override
fun
keyUp
(
event
:
NSEvent
)
{
skikoView
?.
onKeyboardEvent
(
eventToKeyboard
(
event
,
SkikoKeyboardEventKind
.
UP
))
skikoView
?.
onKeyboardEvent
(
toSkikoEvent
(
event
,
SkikoKeyboardEventKind
.
UP
))
}
}
@ObjCAction
@ObjCAction
...
...
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