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
41ad22b9
Unverified
Commit
41ad22b9
authored
May 12, 2021
by
Nikolay Igotti
Committed by
GitHub
May 12, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Window state notifications. (#104)
parent
5b9b69e2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
6 deletions
+30
-6
App.kt
...kijaInjectSample/src/main/kotlin/SkijaInjectSample/App.kt
+4
-0
SkiaLayer.kt
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/SkiaLayer.kt
+26
-6
No files found.
samples/SkijaInjectSample/src/main/kotlin/SkijaInjectSample/App.kt
View file @
41ad22b9
...
...
@@ -59,6 +59,10 @@ fun createWindow(title: String) = SwingUtilities.invokeLater {
val
state
=
State
()
state
.
text
=
title
window
.
layer
.
onStateChanged
(
SkiaLayer
.
PropertyKind
.
Renderer
)
{
layer
->
println
(
"Changed renderer for $layer: new value is ${layer.renderApi}"
)
}
window
.
layer
.
renderer
=
Renderer
(
window
.
layer
)
{
renderer
,
w
,
h
,
nanoTime
->
displayScene
(
renderer
,
w
,
h
,
nanoTime
,
mouseX
,
mouseY
,
state
)
}
...
...
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/SkiaLayer.kt
View file @
41ad22b9
...
...
@@ -24,6 +24,11 @@ open class SkiaLayer(
private
val
properties
:
SkiaLayerProperties
=
SkiaLayerProperties
()
)
:
JPanel
()
{
enum
class
PropertyKind
{
Renderer
,
ContentScale
,
}
internal
val
backedLayer
:
HardwareLayer
init
{
...
...
@@ -74,8 +79,6 @@ open class SkiaLayer(
get
()
=
backedLayer
.
fullscreen
set
(
value
)
{
backedLayer
.
fullscreen
=
value
}
protected
open
fun
contentScaleChanged
()
=
Unit
var
renderer
:
SkiaRenderer
?
=
null
val
clipComponents
=
mutableListOf
<
ClipRectangle
>()
...
...
@@ -84,15 +87,19 @@ open class SkiaLayer(
internal
var
redrawer
:
Redrawer
?
=
null
private
var
contextHandler
:
ContextHandler
?
=
null
private
val
fallbackRenderApiQueue
=
SkikoProperties
.
fallbackRenderApiQueue
.
toMutableList
()
var
renderApi
:
GraphicsApi
=
fallbackRenderApiQueue
[
0
]
private
set
private
var
renderApi_
=
fallbackRenderApiQueue
[
0
]
var
renderApi
:
GraphicsApi
get
()
=
renderApi_
private
set
(
value
)
{
this
.
renderApi_
=
value
notifyChange
(
PropertyKind
.
Renderer
)
}
@Volatile
private
var
picture
:
PictureHolder
?
=
null
private
val
pictureRecorder
=
PictureRecorder
()
private
val
pictureLock
=
Any
()
open
fun
init
()
{
backedLayer
.
init
()
renderApi
=
fallbackRenderApiQueue
.
removeAt
(
0
)
...
...
@@ -101,6 +108,19 @@ open class SkiaLayer(
isInited
=
true
}
private
val
stateHandlers
=
mutableMapOf
<
PropertyKind
,
MutableList
<(
SkiaLayer
)
->
Unit
>>()
fun
onStateChanged
(
kind
:
PropertyKind
,
handler
:
(
SkiaLayer
)
->
Unit
)
{
stateHandlers
.
getOrPut
(
kind
,
{
mutableListOf
()
})
+=
handler
}
private
fun
notifyChange
(
kind
:
PropertyKind
)
{
stateHandlers
.
get
(
kind
)
?.
let
{
handlers
->
handlers
.
forEach
{
it
(
this
)
}
}
}
open
fun
dispose
()
{
check
(!
isDisposed
)
check
(
isEventDispatchThread
())
...
...
@@ -129,7 +149,7 @@ open class SkiaLayer(
override
fun
paint
(
g
:
Graphics
)
{
super
.
paint
(
g
)
if
(
backedLayer
.
checkContentScale
())
{
contentScaleChanged
(
)
notifyChange
(
PropertyKind
.
ContentScale
)
}
redrawer
?.
syncSize
()
...
...
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