►
Description
In this meeting, Nikita Prokopov presented Skija -- a new graphics library for the JVM, wrapping Skia.
https://tonsky.me/blog/skija/
https://github.com/JetBrains/skija
Moderator:
Kannan Ramamoorthy
Text chat:
https://tinyurl.com/ya8tqpou
Also, see this recent live demo by Nikita:
https://tonsky.me/blog/skija/
A
Hi
everyone
welcome
to
psychloge
and
good
evening
or
good
morning,
based
on
the
time
zone
that
you're
in
and
today
we'll
be
discussing
about
schedule.
2D,
graphics,
library,
tackle
around
jvm
and
with
us
we
have
nikita
is
an
interesting
gig
with
the
various
dimensions,
so
he
has
around
40
plus
forecasts
on
his
name
and
also
a
lot
of
focus,
contribution
and
lot
of
interesting
contribution
he
has
done
and
for
the
people
from
closure
background
he's
the
one
who
has
designed
the
logo
for
a
famous
babashika
library.
A
So
that's
a
brief
about
nikita
and
so
with
respect
to
this
talk
we'll
be
having
this
talk
for
closer
to
us.
So
this
talk
has
been
organized
into
multiple
topics,
starting
from
the
intro
to
comparison
and
scope
of
development.
That's
that'll
be
in
the
future
plan
for
this
library,
so
in
between
each
topics
will
have
time
for
qas.
A
So
any
questions
that
you
have
on
whatever
nikita's
discussing
with
us
so
feel
free
to
post
your
questions
in
the
chat
so
I'll
be
compiling
the
questions
and
we'll
be
raising
it
in
between
each
sections
and,
if
possible,
feel
free
to
turn
on
your
videos.
So
it'll
be
more
interactive
and
yeah.
A
That's
it
feel,
free
to
interact
and
feel
free
to
raise
questions
and
will
also
be
interested
in
knowing
your
current
background,
so
either
you
are
from
java
or
closure
so
and
if
at
all,
you
are
not
into
closure
too
much
and
if
at
all
you
are
not
getting,
what
we
are
discussing
feel
free
to
raise
it
so
that
we'll
see
what
we
can
do
about
it.
So
nikita.
B
I
think
you
can
hi
everyone
welcome
to
this
kj
introduction
yeah.
Let
me
start
just
by
saying
that
it's
so
yeah,
so
this
this
kija
is
a
library,
it's
a
gvm
library.
So
basically
it
has
java
api
for
in
for
graphics,
right,
2d,
graphics.
Basically,
that's
it.
B
The
idea
is
that
and
it's
basically
it's
just
a
wrapper
around
skia
library,
which
is
a
completely
different
thing,
not
completely
different
thing
like
but
yeah.
Let
me
just
make
myself
a
little
bigger,
so
this
kia
library
yeah,
this
is
the
library
written
by
google
and
it's
quite
popular
and
many
well-known
projects
are
based
on
it.
So
chrome
is
based
on
it
and
flutter
is
based
on
it.
So
basically
they
use
skia,
not
skidra,
to
draw
all
the
pixels
to
the
screen
right.
B
So
all
the
ui
of
the
board
that
share
those
slides-
I
don't
know
whatever
images
flutter
also
uses
it
and
in
the
bottom
row
there
are
like
submarine,
which
is
microsoft,
bot
valonia,
which
is
ui4.net
so
basically
submarine
and
avalonia.net
things,
and
they
have
wrappers
around
skia
for
c-sharp.
B
Firefox
doesn't
use
kia
for
the
main
page,
but
it
uses
for
canvas.
So
when
you
instantiate
the
canvas
in
webpage
and
drawing
it
in
firefox,
you
will
be
drawing
into
skier
through
ski
and
libreoffice.
Is
this
black
logo
is
libreoffice
and
starting
from
version
seven?
I
think
they
also
switched
the
rendering
to
skier.
So
it's
a
quite
capable
quiet
library
for
doing
2d,
graphics,
you
doing
ui,
graphics,
right
and
the
only
problem
was
that
it
was
cpos
plus
library
which
is
okay,
for
I
don't
know
for
cpus
plus
programmers
for
chrome.
B
So
that's
how
skijo
was
born
and
skija
is
just
a
very
thin
layer
that
grabs
c,
plus
plus
skier
library
in
java
bindings-
that's
that's
all
it
does.
Whatever
skier
can
do.
Skedger
can
do
as
well
through
drawing,
and
the
name
is
just
like
one
extra
letter
j.
So
it's
like,
like
most
java
libraries,
do
that's
what
what
it
is.
Okay,
it's!
It's
also
became
later.
B
It
became
a
problem
because
it's
really
easy
to
confuse
the
two
names
and
people
sometimes
even
don't
understand
that
I'm
talking
about
two
different
things
when
I
talk
about
them,
but
that's
that's!
That's
very
small
problem
yeah.
So
let
me
also
explain
a
little
bit
about
the
scope
of
what
what
what
graphics
library
does
right.
So
this
is
not
a
complete
ui
solution
like
it's
not
the
ui
frameworks,
it
doesn't
have
buttons
or
check
boxes
or
even
windows
and
window
events.
B
It
can
draw
them
into
screen
into
a
bitmap
yeah.
So
that
was
so.
Let
me
okay
I'll
try
to
do
this
so
I'll.
I
I
draw
a
stack
here.
So
here
sorry,
there's
dryers!
Oh,
I
can
move
this
as
well.
Okay,
so
drivers,
it's
like
bottom
layers.
It
talks
to
hardware.
Then
there
is
opengl
right
which,
like
wraps
drivers
and
skier
and
skija
by
extension,
can
work
with
opengl
metal
vulcan,
and
I
think
it
has
software
render
as
well
so
rendering
the
bitmaps
or
something
like
that.
It
has,
except
it
has
many
renderers.
B
Actually
it
can
even
render
to
pdf,
but
what
we
are
interested
in
is
like
hardware,
accelerated,
graphics,
so
opengl
metal
or
welcome
so
yeah.
I
don't
have
examples
for
that
yet,
but
it
is
certainly
possible
when
we're
working
on
examples.
B
Then
there
is
a
window
management
us
os
integration
and
stuff
like
create
a
window
handle
user
events
stuff
like
that,
and
this
stuff
is
not
covered
by
schedule
right.
B
So
this
many
many
solutions
exist
in
javaspace,
so
there
is
lwg,
which
I
use
for
most
of
my
examples:
there's
j,
o
g,
l,
j,
r,
a
w
t,
not
a
w
t
but
j
r,
a
w
t
and
they
all
handle
the
problem
of
creating
a
window
in
initializing,
opengl
context
and
stuff
like
that
and
hang
these
events
so
then
don't
have
to,
and
then
there
is
like
here
is
graphics
right.
B
C
I
think,
if
you
would
share
your
screen,
it
will
appear
better
on
the
youtube
video
eventually
because
it
is
recording
like
as
a
gallery
of
every
all
the
little
windows.
So
if
you
can
somehow
share
your
screen,
if
it
is
not
a
trouble.
B
C
C
Yeah
but
I'm
not
sure
about
the
recording
setup,
I
will
try
I'm
trying
to
look
for
moments
at
the
recording
setup
and
maybe
we
can
make
it
work
yeah.
So
if
you
are
still
with
this
slide,
then
you
may
just
keep
talking
for
a
few
more
minutes
and
then
why
I
will
update
if
I
find
a
way
to
make
it
work.
C
But
recording
is
on
the
cloud
and
there
is
I'm
set
up
there
to
to
record
the
gallery.
So
so
maybe
maybe
you
can
forget
about
me
for
a
few
minutes
and
I
will
come
back
maybe
with
okay.
So
exactly.
B
If
you
don't
find
anything,
tell
me
I'll,
restart
and
show
your
screen
no
problem.
So
I
was
talking
about
the
graphics,
so
graphics
is
like
this
green
layer
and
on
top
of
it,
usually
people
build
like
widget
library,
ui
library
controls,
like
buttons
panels,
scroll
views
lists.
I
don't
know
that
thing
that
is
not
in
schedule
as
well,
not
not
in
sketchup.
We
have
jetpack
compose
for
desktop
android
brains
which
is
based
on
schedule
and
which
solves
this
problem.
So
it's
like
the
next
layer
so
visit.
You
can
create
a
whole
application.
B
You
can
create
widgets,
buttons
and
stuff
like
that,
but
schedule
it
like
handles
low
level,
graphics,
stuff,
just
putting
pixels
on
the
screen.
If
you
want
to
compare
it
with
java
swing
or
javafx,
they
cover
all
three
layers
right.
So
if
you
use
swing,
for
example,
you
have
window
management,
built-in,
graphics,
building
and
widgets
and
all
together
in
one
single
package
on
in
case
of
skidra,
we,
this
is
decoupled
into
different
layers,
a
single
responsibility
for
each
library.
B
C
A
Yeah,
actually,
it's
good
that
you
noticed
it.
B
Okay,
so
all
my
tricks
about
the
camera
will
now
not
work,
but
okay,
I
I
can
use
like
this.
I
guess
I
wish
I
could
hide
stuff,
but
I
can't
but
anyways
okay.
At
least
you
can
see
me
now
right
and
okay,
okay,
okay,
okay,
okay,
now,
let's
go
so
this!
I
was
talking
about
it.
So
let
me
say
yeah,
so
this
is
that
tells
us
about
what
sketch
does
what
it
doesn't
it's
place
so,
basically,
graphics,
and
even
though
it's
not
a
complete
ui
solution,
it's
still
useful.
B
I
believe
it's
still
useful
well.
First
of
all,
you
can
use
it
as
a
basis
for
like
widgets
and
controls
like
like
we
do
in
compose
right,
but
then
you
can
do
also
visualizations,
like
I
don't
know,
scientific
visualizations,
like
graphics
and
especially
interactive
graphics,
charts
with
with
many
data
points,
for
example,
if
you
need
high
performance
graphics
for
some
reason,
you
you
can
do
that
the
problem
the
as
long
as
it's
2d.
So
there
is
no
3d
stuff
just
flat
and
then
you
can
build.
B
I
guess
games,
I
guess
2d
games
probably
should
be
possible
should
be
no
problem
for
it
as
well,
and
then
I
have
actually.
I
wanted
to
show
you
how
what
what
type
of
graphics
schedule
supports,
and
for
that
I
have
a
demo
application
here.
So
it's
a
little
demo
time,
we'll
just
cycle
through
many
examples
and
just
show
the
basics,
so
the
most
basic
stuff.
B
B
There
is
very
sophisticated,
like
path
effects
when
you
can
put
different
shapes
on
the
pass
and
fill
paths
with
different
shapes
stuff
like
that,
which
also
might
be
useful
for
some
reason
very
sophisticated
pass
library.
Basically,
everything
that
you
can
expect
from
vector,
graphics,
editor,
like
figma
or
sketch.
It's
sketcher
probably
can
do
that
as
well.
B
Then
there
are
there's
text.
Oh,
this
is
still
all
different
types
of
effects.
There's
also
text,
like
I
don't
know,
text
layouting,
complex
text
layouts,
including
emojis,
bi-directional
text
and
stuff,
like
that
multiple
fonts
phones
fall
backs.
So
it
does
all
that
very
good
right.
So
it's
very
high
quality
implementation
because
because
chrome
is
based
on
it
and
android
is
based
on
it
and
they
need
it
to
be
good.
So
that's
why
it's
also
good
in
ski
as
well.
So
it's
not
it's
something
if
it
works
in
chrome.
B
It
probably
works
correctly
here
as
well.
This
is
svg
different,
so
it
can
render
svg.
You
can
render
gradients
shadows
as
it,
though,
so
this
is
interesting.
We
implemented
java
dvd
2d
graphics
in
skidra.
It's
not
completely
implemented,
yet
there
are
some
bugs,
but
especially
in
this
site,
it's
called.
B
I
forget
how
it's
called,
but
the
the
oldest
style
for
swing
it.
It
can
render
spin
components
but
not
going
to
java
2d
instead
going
to
schedule,
but
the
same
components.
Yeah,
there's
text
effects.
B
Scales
and
stuff
like
that,
this
also
different
bitmap
effects
like
stretch
of
glass,
black
and
white
stuff,
like
that,
you
can
do
that
clips
images.
This
is
like
figma
ui,
but
it's
kids.
B
B
Different
types
of
text,
rendering
so
there's
also
sophisticated
text,
rendering
with
many
knobs
to
control
that
supports
variable,
fonts,
open
type
features,
also
modern
stuffs
with
browsers
support
supports
as
well.
Let
me
go
back
to
where
to
here.
Yes,
so
this
is
what
skj
is
good
for:
okay
boom,
okay!
Next
next
part,
I
don't
have
many
slides,
so
I
think
it's
best.
B
B
It
is
java
api
like
you,
go
to,
for
example,
canvas.java,
and
here
you
can,
I
don't
know,
draw
polygon
right,
so
you
call
it
draw
polygon
plus,
coordinates,
plus
paint,
which
is
another
object
that
has
color
and
stuff
like
that
and
and
yeah
it
will
appear
on
the
screen
yeah.
So
the
the
tricky
part
in
implementing
this
so
scheduler
is
not
an
automatically
generated
buildings
for
skier.
B
So
when
I
started
this
project,
there
existed
two
two
after
generated
buildings,
which
were
pretty
bad
they're,
really
hard
to
use
they're,
confusing
and
stuff
like
that,
so
we
decided
to
build
a
library
that
is
like
handcrafted,
but
it's
also
feels
like
normal
java
api.
So
things
make
sense,
sometimes
for
some
things
you
need
to
be
using
native
objects
behind
the
java
object.
Sometimes
you
are
good
with
just
java
objects.
Sometimes
there
is
like
stream
in
c
plus,
for
example,
or
in
students.
B
Keys
key
implements
its
own
streams
for
reading
files,
but
in
java
we
have
input
streams,
so
you
need
to
build
a
breach
so
that
java
users
will
use
input
streams
which
they
used
to
instead
of
like
some
weird
wrapper,
around
c
plus
plus
library,
which
is
like
implemented
in
ski
and
stuff
like
that.
So
where
things
make
sense,
we
use
native
java
classes
native
java
idioms.
B
We
use
iterators
instead
of
ski
iterators,
for
example
stuff,
like
that,
and
I
think
it's
much
more
pleasant
to
use
and
existing
solutions.
It
also
handles
memory
management
for
you,
so
c,
plus
plus
it
means
you
have
to
manage
your
memory.
If
you
allocate
cpus
plus
object,
you
have
to
free
it
at
some
point
right,
and
this
is
not
what
java
programmers
are
used
to
do.
So
we
do
a
special
wrapper.
So
all
the
skeda
classes
are
extending
managed
class
which
handles
memory
management
for
you.
B
B
And
that's
the
beauty
of
it.
There
is
a
method
called
close.
So
if
you
want
to
for
some
heavy
weight
resources,
you
can
freeze
them
manually
from
java.
So
if
you
allocate,
I
don't
know
typeface
or
texture
or
something
like
that,
it's
probably
a
good
idea
to
get
rid
of
it
as
soon
as
possible,
instead
of
waiting
for
garbage
collector.
So
you
can
do
that
too,
but
it
is
optional
right,
so
you
can
call
it.
You
can
not
call
it
whatever
you
do.
B
The
result
will
be
at
some
point.
The
native
object
will
be
freed
and
closed
correctly.
So
this
was
a
pretty
interesting
problem
to
solve,
but
it
seems
to
work
okay,
so
far,
yeah
and
then
there
are
just
lots:
lots
of
classes
this
on
the
left,
all
the
classes
that
schedule
have
to
drop
in
one
way
and
or
another
different
c
plus
bus
class.
B
So
closure
is
not
native
to
skidra,
but
I
had
it
in
mind
so
because
of
jvm
library
you
can
use
jvm
you,
you
can
use
it
for
enclosure
and
probably
it
would
be
better
if
there
was
a
closure
wrapper
around
it
because
something's
a
little
trickier
to
use
but
anyways
it
totally
works.
I
have
an
example
that
works
in
closure.
B
B
So
this
is
long
and
we
need
integer
and
they're
not
easily
transformable.
So
yeah
this
function,
I
wrote
and
then
there's
draw.
So
basically
it
is
paint
set.
Color
translate
on
canvas,
canvases,
kids
class
paint,
the
schedule,
class
reactive
schedule
class
right.
So
this
and
then
there
is
some
lj
vga
alerts
whatever
to
create
a
window.
B
B
B
B
B
Yeah
so,
and
the
idea
actually
is
a
global
plan-
is
eventually
that
eventually
having
this
library
for
graphics
for
jvm,
I
would
build
some
ui
library
for
closure,
because
I
think
closure
is
best
suited
for
ui
development
because
of
ripple
and
interactivity
and
from
there
you
can,
we
can
like
develop
desktop
applications.
B
B
Performance
performance
is,
I
have
about
different
stuff
about
it?
The
performance
is
pretty
good
for
some
pretty
bad
for
not
not
bad,
so
performance
for
skedja
is
pretty
good
and
solid
for
most
of
the
tasks
that
I
can
think
of
that
I
tried
it
is
sometimes
slower
than
javafx
and
some
in
some
tasks.
For
example,
this
is
the
repo
I
built
for
testing
performance
of
javafx
and
scheduler
and
awt.
B
Eventually,
maybe
right
now
just
does
two
so
the
results,
for
example
the
feeling
screen
with
circles
javafx,
does
it
faster
than
than
skija,
but
teacher?
Does
it
reasonably
fast
as
well,
but
something
like
clipping
or
drawing
shadows?
Javafx
is
very,
very
slow
while
skj
is
is
okay,
it's
it's
it's
doing
pretty
good
and
I
think
it's
well.
B
I
didn't
try
to
do
anything,
fancy
just
the
stuff
that
you
would
expect
from
user
interface
like
clips
for
button
shapes
or
I
know,
check,
boxes
or
gradients
for
buttons
backgrounds
or
shadows
again,
the
stuff
that
you
commonly
see
in
user
interfaces
or
text
stuff
like
that
yeah
and
it's
it's
pretty
solid.
It's
not
like
fastest
in
the
world.
Again,
sometimes
javafx
is
faster,
but
it's
pretty
solid
and
I
think.
A
Yeah
one
quick
question:
whatever
you
mentioned
less
than
one
is
it
in.
B
So
this
is
pretty
interesting,
so
let
me
show
you:
this
is
a
benchmark
where
I
draw
the
circles,
but
then
don't
draw
any
circles
they're
drawn
as
clipping
rectangles.
So
basically
it's
a
rectangle
that
has
a
clipping
mask
of
the
shape
of
the
donut
right.
So,
for
example,
if
you're
drawing
something
like
this,
you
would
probably
need
to
clip
on
the
on
the
border.
So
you
don't
overdraw
to
the
stuff.
That's
out
of
your
button
so
anyway,
so
clipping
is
sometimes
is
important
in
user
interface.
B
So
this
is
what
skij
does
and
who
does
it
print
reasonably
well,
for
some
reason,
javafx
cannot
do
clipping
at
all.
So
if
I
try
to
do
it,
it
will
be
very,
very
slow,
so
it
can
draw
like
four
or
six
or
eight
clipping
masks
with
like
tens,
10
fps,
or
something
like
that.
If
I
do
this
much
it,
it
basically
goes
to
zero
it.
It
needs
multiple
seconds
to
render
this
picture.
For
some
reason.
It
also
cannot
draw
a
doughnut
with
clipping
mask.
B
B
Frames
per
second:
yes,
oh
okay,
okay,
yeah
yeah!
This
is
about
performance,
so
I
think
if
it's
those
are
my
my
judgment
is
if
it's
good
for
chrome-
and
this
is
good
for
android-
it's
probably
will
be
good
for
your
application
as
well
and
finally,
comparisons
with
between
java
and
skeeja
and
javafx.
B
So
one
yeah.
So
it's
not
that
I
want
to
compare
this
to
specifically,
but
with
any
existing
java
solutions
right,
so
there's
awt
there's
swings,
there
are
javafx,
and
now
there
is
new
graphics
library.
So
what's
the
point,
so
there
are
many
many
problems.
B
First
of
all,
as
I
mentioned,
javafx
and
swing
are
complete
solution
for
ui
schedule.
Only
does
part
of
that.
So
it's
not
probably
fair
comparison,
but
we
can
compare
on
the
graphics
side
and
exclude
everything
else
and
from
the
graphics
side
I
have.
I
have
at
least
somewhere
yeah
here.
I
think
so.
What
I
I
like
about.
B
The
skija
is,
it
gives
you
high
quality,
high
fidelity
with,
like
super
detailed
control
over
details
of
what
you're
pushing
drawing
on
the
screen.
So
awt
and
javafx
do
a
decent
job,
but
they
are
very
basic.
So
basically,
you
can
do
basic
things,
but
if
you
dedicated
to
do
very,
I
don't
know
how
high
quality
and
very
specific
things.
If
you
like,
pixel,
perfect
sync,
they
might
not
be
powerful
enough.
The
api
might
be
not
powerful
enough
or
wide
enough
to
do
what
you
want.
So
skidget
just
has
much
much
broader
api
surface.
B
It
can
do
much
more
things.
It
has
much
more
control
over
what
you're
doing,
and
that
was
important
for
me
right.
So
so
one
of
the
things
so
two
two
things
actually
that
I
missed
when
I
evaluated
javafx
for
as
a
as
a
graphics
backend
for
compose
jpeg
compose
and
for
any
potential
closure.
Ui
library,
if
it
ever
happens,
was
color
management,
which
is,
as
far
as
I
know,
doesn't
exist
in
javafx
or
nor
in
awt.
B
Also,
the
code
and
typography
right
so
text
rendering
so
color
management
is
a
thing
that
becomes
more
and
more
important,
especially
for
graphics
application,
and
the
problem
is
before
I
don't
know
like
five
years
ago.
Probably
I
don't
remember
exactly
five
fish
years
ago.
Most
of
the
displays
that
we
had
were
srgb
and
so
color
management
problem
didn't
exist,
at
least
for
showing
pictures
on
the
screen
for
computer
screens.
You
just
render
srgb
picture
and
you're
fine.
B
Now
apple
started
to
selling
wide
gamut
displays,
so
all
the
modern
macbooks
and
the
pro
display
hdr
display,
or
it's
called
white
gamut.
They
can
show
more
colors
than
rgb,
and
this
is
a
problem,
because
if
you
ignore
that
fact,
you
will
probably
be
rendering
slightly
around
colors
on
this
displays.
So
if
you
just
rendering
srgb
your
your,
how
they
say
it
so
color
management
in
a
pro
it's
a
problem
that
cannot
be
ignored.
You
have
to
deal
with
it.
B
Unfortunately,
and
then
the
typography
is
and
yeah
about
color
management,
and
then
there
are
hdr
displays,
of
course,
which
also
have
like
the
different
variety
of
them,
but
again
they're
becoming
more
and
more
popular,
and
you
have
to
work
with
color
differently
when
draining
pictures
for
them.
So
it
just
the
point:
is
it
becomes
a
problem
that
cannot
be
ignored
anymore,
unfortunately,
and
if
we're
playing
for
building
something
for
the
future,
we
probably
have
this
somehow
foundation
for
this
solved
right
now.
B
The
second
problem
is
typography
right,
so
the
text
we
live
in,
like
in
a
world
where
there
exists,
left
to
right
languages
right
to
left
languages
where
emoji
exists
and
utf-8
or
etfs
etf
16
are
not
enough
for
everything.
There
are
multiple
fonts
and
fold
fontful
backs.
There's
there's
also
a
text
rendering
which
is
pretty
hard
problem
to
do
correctly,
and
all
that
also
is
very
important
for
ui
right.
B
You
cannot
build
the
ui
if
you
cannot
render
like
right
to
left
text
correctly
or
if
you
cannot
render
an
emoji,
and
all
this
is,
I
would
say,
underwhelming
in
javafx,
so
I
did
some
quick
tests
yesterday.
B
B
Then
I
learned
there
are
still
unsolved
problems
about
this,
which
is
lcd
text,
rendering
which
shouldn't
be
enabled
on
mac
os
at
all,
but
javafx
enables
it
and
if
it
end
and
then
does
their
own
job.
So
as
far
as
understand
you
shouldn't
see
this
type
of
colors,
this
saturated
colors
in
lcd,
anti
layers
text
and
then
there's
also
for
some
reason.
B
It
it
two
pixels
white,
I'm
not
sure
why
it
should
be
one
pixel,
the
color
color
binding
should
be
for
one
pixel
or
two,
but
anyway
yeah
and
these
problems,
and
then
I
try
to
render
text
with
emoji.
So
this
is
skija
on
the
in
the
bottom,
on
the
bottom
and
on
the
top
is
javafx.
B
To
be
honest,
there
are
two.
There
are
two
two
ways
to
render
text
right.
You
can
create
a
text.
Node
and
if
you're,
using
javafx
as
a
ui
library,
you're,
probably
not
drawing
drawing
to
the
canvas
directly
you're
using
text,
nodes
and
text,
node
knows
how
render
itself.
Maybe
it
works
better.
I
didn't
test
it.
This
is
like
using
graphics,
like
graphics,
graphics
context,
so
it's
basically
canvas
which
I
put
pixels
to.
B
It
uses
some
apis
that
you
don't
have
access
to
right.
I
I
prefer
to
have
access
to
all
the
apis
that
the
library
itself
uses
yeah
then
there's
like
high
dpi
support
fractional
scaling
like
vsync,
and
this
this
all
stuff.
That
javafx
has
problems
with
and
yeah,
and
this
is
the
last
problem
with
it
is
that
javafx
is
a
single
single
thing.
You
you
need
to
use
it
all
together.
You
cannot
use
like
window
management
from
javafx
and
throw
away
the
rest.
B
B
Is
needed.
This
is
why
I
think
it's
needed
on
jvm.
Well,
because
I
work
in
java
company
right
and
we
we
have
most
our
code,
expertise
in
jvm.
I
work
in
two
brains
right
now
and
they
sponsor
this
development
and
plan
to
use
it
for
java
as
well,
and
then
I
think
closure
is
perfect
for
ui
building
and
it's
a
shame.
It
still
doesn't
have
any
ui
framework
in
closure.
We
do
have
we
do
have,
but
I
think
we
can
do
better.
That's
that's
all.
B
We
have
a
javafx
wrapper,
for
example,
but
that
brings
the
whole
of
javafx,
which
is
not
not
optimal
yeah,
but
that's
for
the
future
right.
So
in
the
future,
maybe
somehow
we'll
solve
window
management,
ui
library,
probably
in
different
libraries,
so
I
don't
want
to
put
that
all
into
schedule.
I
want
skidget
to
stay
just
graphics
and
you
have
a
choice
of
which
window
management
you
choose,
which
your
library
chooses
and
stuff
like
that
yeah
yeah.
I
think
that's,
that's
it!
That's
all.
A
Let's,
for
the
moment,
we
haven't
received
any
questions
from
the
audience
yet,
but
as
a
user
of
swing
in
the
past,
I
have
certain
questions.
A
So
the
first
thing
is
like
in
so
I
remember
using
html
rendering
from
swing
so
do
we
have
support
for
that
in
schedule.
B
No,
no,
no!
No,
I
think
the
the
it's
it's
like
it's!
It's
the
wrong
level
to
to
solve
this
problem,
so
this
kj
is
pretty
damp
and
low
level.
Just
draws
what
you
tell
it
it
doesn't
doesn't
have
it
doesn't
come
with
all
the
stuff
that
that
you
might
actually
need.
So
in
that
sense,
it's
pretty
limited.
I
guess
in
its
users
it's
it's
like
foundation
for
other
stuff,
including
html,
rendering,
okay,
okay,.
A
Yeah
yeah
and
the
next
question
is
like
so,
as
you
have
mentioned,
we
have
a
lot
of
advantages
with
schedule
and
there.
A
In
the
existing
java
ecosystem,
which
is
safe
to
be
implemented
in
skija,
so,
given
this
scenario,
do
we
have?
Is
there
a
possibility
of
so
developing?
So
so
is
it
possible
to
combine
skija
and
existing
java
effects
or
swing
together
so
that
they
complement
each
other
in
a
single
application?
Things
like
that.
B
It
is
possible,
but
you
you
have
to
work
on
it
yeah.
So
one
example
I
can
give
you
we
have.
We
have
jpeg
compose
for
desktop
and
it's
also
the
brains,
library
which,
which
basically
it's
japak
compose,
which
is
android
library
but
ported
for
desktop
to
building
desktop
applications
and
it
uses
kidra
and
folks
that
are
working
on
it.
I
right
now
they're
working
working
on
integration
with
swing,
and
this
is
two-way
integration.
B
I
I
know
that
they
can
render
a
ski
surface
in
a
swing
application,
and
now
they
very
recently
they
also
learned
to
draw
swing
components
inside
ski
surface.
So
it
is,
let
me
show
you
actually,
I
think
it's
in
in
a
public
channel,
so
I
can
probably
show
you.
B
Here
yeah,
so
this
is
like
swing
window
or
awt
window,
this
awt
buttons
or
panels
on
the
on
the
border
inside
this
clock.
Wall
of
clocks
is
scheduler,
rendered
graphics
right
and
inside
inside
it.
There
are
two
buttons
which
are
also
swing
components.
So
it's
like
three
layered
cake.
The
swing
then
skija
then
swing
again
and
it
seems
to
work
yeah.
Now
there
are
yeah,
it
works.
A
Yeah
and
we
have
a
question
from
audience
now
so
so
that's
from
daniel,
so
he's
saying
like
it
would
be
great
to
hear
more
about
the
solution
for
handling
c,
plus
plus
memory
release
on
garbage
collection.
A
It
is
something
that
we
need
in
closure
currently
using
a
nice
library
called
egg.resource
curious
to
hear
about
any
challenges
you
have
run
into
when
taking
care
of
them.
So
you'd
like
to
know
more
about
the
garbage
collection
and
yeah,
absolutely
any
interesting
issues
that
you
would
like
to
share.
Yeah.
B
B
B
B
Now
it's
like
there's
different
api
called
cleaner,
or
something
like
that.
So
the
idea
is
you,
you
put
your
object
in
the
cleaning
queue
and
when
garbage
collector
decides
to
kill
your
object
to
collect
your
object,
you
get
a
chance
to
do
something
at
that
point
in
time,
so
there's
cleaner
time
they
are
sunk.
B
B
Simple
plus
pointer,
and
then
we
go
to
c
plus
plus
version
of
the
paint.
So
this
is
the
constructor
that
creates
new
paint
on
zippo's
plus
side.
It
creates
new
paint
c,
plus
plus
object,
sets
anti-alias
and
returns
the
say
there
is
a
pointer
casted
to
j
long
okay,
then
there
is
finalizer
that
just
calls
delete
and
we
take
pointer
to
the
function
and
we
also
pass
it
back
to
the
java.
So
java
now
has
this
pointer
to
the
object
and
this
pointer
to
this
function
actually
to
this
function.
B
B
One
interesting
thing
that
I
learned
is
actually
quite
recently
this
week.
Actually
is
that
java
can
be
pretty
eager
to
collect
your
object,
even
if
you're,
like
currently
in
the
native
method.
So
there
is,
we
had
a
race
when
you're
in
a
native
madness,
working
with
pointers
and
java
decides
to
delete
your
object.
You
are
working
with,
and
that
was
maybe
expected,
because
java
is
multi-threaded.
Of
course
it
has
garbage
characters
threat
and,
of
course
it
can
hit
at
any
time.
B
But
what
I
didn't
expect
is
that,
while
you're
in
a
java
method
here,
for
example
right
so
it's
a
it's,
not
static
method,
it's
a
paint
method.
It
can
collect
the
paint
itself
so,
while
you're
in
the
object
method,
it
can
collect
this.
B
It's
method
is
not
finished
yet,
but
if
java
sees
that
for
the
rest
of
it,
you
don't
use
this
anymore.
It
can
collect
it.
So
this
was
kind
of
unexpected.
So
here
you
can
see.
I
have
reachability
fence
that
guards
this.
So
until
this
native
method
finishes,
please,
please
don't
collect
itself,
otherwise
it
will
erase
here
but
yeah.
That's
that's
basic,
the
gist
of
it.
A
Yeah-
and
we
have
a
couple
of
more
interesting
questions
and
discussion
to
me
so
another
question
from
story
on-
I
hope
I
spelled
the
name
right.
So
the
question
is
like
nikita:
do
you
have
any
plans
to
do
live
coding
session,
something
like
writing
a
simple
game
using
skija?
A
So
I
assume
that
the
intention
is
to
get
a
hands-on
feel
for
both
the
audience
and
you.
B
I
actually
wanted
to
do
that
yeah.
I
I
used
to
do
some
live
coding
some
time
ago,
but
yeah
when
I
was
like,
I
had
data,
I
have
data
scripts
streams.
I
think
I
have
ram
streams
now
yeah.
It
would
totally
make
sense.
I
would
probably
even
do
it
in
closure,
because
I
I
don't
think
live
coding
in
java
is
much
fun
and
I
also
want
to
try
how
it
feels
to
use
it
from
closure.
B
Even
even
writing,
like
this
small
example
gives
gave
me
some
insights
into
what
closure
wrapper
should
be
so
yeah.
Probably
if
you
follow
me
on
twitter,
you'll
probably
be
you
you
can
subscribe
to
it
or
you
can
write
to
my
youtube
channel.
I
guess
it's.
It
has
a
much
weirder
link.
It's
something
like
something
like
this.
No
okay,
I
don't
know
which
my
youtube
link
is,
but
I
have
youtube
channel.
Oh
they
are
no
twitter
is
better,
so
the
nickname
is
nikitansky
yeah.
Oh
yes,
I'm
really
awesome.
Yeah
yeah
yeah.
A
Yeah,
so
I
think
the
answer
is
sometimes
we
might
have
a
session
and
next
is
an
interesting
question
and
we
have
vladislav
and
who
is
author
of
clj
effects,
so
so
he
so
the
strategy
is
like
due
to
its
back
end.
I
happen
to
know
a
lot
about
java
effects.
I
wholeheartedly
agree
that
javafx,
being
everything
in
one
package
makes
me
at
mercy
of
the
quality
of
building
components.
A
I
think
it's
fair
to
say
that
javafx
is
neither
very
bad
nor
very
good
it's
somewhere
in
between,
but
for
ui
development.
I
usually
need
something
higher
level
than
shapes
and
text,
so
I
would
say
it
makes
more
sense
to
compare
javafx
to
jetpack
compose
for
the
desktop.
Can
you
provide
comparison
between
those
two?
So
so
it's
asking
if
there
is
any
comparison
between
java
effects
and
jpeg
compose
that
you
have.
B
Yeah,
I
cannot
provide
you
first
of
all,
you're
right.
Absolutely
right!
Javafx
is
something
that
should
be
compared
to
something
like
just
bug
compose.
Yes,
they
are
complete
ui
solutions,
both
both
of
them
right.
B
Then
the
components
are
the
components
I
think
are
tricky
because
they
still
it's
still
unclear.
Even
for
android,
which
is
like
a
upstream
for
desktop
compose
it's
android
compose
and
even
there
they
don't
yet
know
what
components
should
be,
but
I
think,
if
you,
I
think,
most
of
them,
if
they're
available
in
android
they're,
probably
available
in
desktop
as
well,
because
they
should
basically
share
most
of
the
code
base.
B
So
you
probably
should
go
to
something
like
just
pack
compose
documentation.
Jet
pack
compose.
B
For
for
android
and
see
she's
there,
so
I
don't
think
desktop
does
anything
differently
it.
I
think
what
it
does
differently
is
stuff
around
windows
like
I
think
they
have
components
like
window
component
or
pop-up
component
stuff
like
that
or
dialogue,
something
like
that
which
doesn't
exist
on
android
right,
so
they
have
to
implement
those
about
those.
I
don't
think
you
have.
B
There
is
a
good
place
to
read,
but
everything
inside
the
window
is
probably
just
straight
from
jetpack
compose
as
for
other
comparisons,
so
well
they're
using
awt,
I
think
jawt,
which
is
a
way
to
render
open
trail
texture
inside
awt
window.
So
they
are
sitting
on
awt
event,
kill
awt
window
management
but
render
their
own
components
inside
they
use
skedra
instead
of
about
twink
uses
java2d
right,
so
they
use
kj.
B
Instead,
this
is
a
big
difference
and
or
javafx
uses
its
own
thing,
but
other
from
that
yeah
they're,
probably
pretty
similar.
Well,
it's
not
similar.
So
come!
Okay!
Sorry,
sorry
for
it's
just
I
have
some
so
many
things
and
I
I
struggle
to
say
them
in
order.
B
So
the
biggest
difference
like
if
we
move
away
from
internals
from
the
outside
for
the
outsider's
view,
the
biggest
difference
is
that
javafx
is
old-style,
ui
framework
as
the
one
which
has,
I
think
it's
based
on
2d,
two
two-way
bindings
right,
so
the
properties
and
they
have
components
that
react
to
a
change
of
property
or
if
you
change
subject
component,
it
gets
propagated
back
back
to
the
property,
sometimes
that
they
have
like
buildings.
Observable
properties
stuff
like
that,
but
others
from
that.
I
think
it's
also
imperative
like.
B
B
So
and
compose
is
like
this
new
way
of
building
ui,
which
is
now
it's
called
declarative,
ui,
which
was
pioneered
by
react,
and
the
idea
is
that
you
build
virtual,
dom
and
then
and
the
library
itself
behind
the
scenes,
somehow
synchronizes
your
state
between
the
what
you
see
on
screen
between
persistent
components
and
your
virtual
dom
so
in
compose
you
don't
retain
references
to
windows
and
text
boxes
and
stuff
like
that,
you
you
don't
have
them.
Instead,
you
just
call
function
after
function.
B
You
instead,
you
basically
write
a
render
function
that
renders
your
whole
ui
as
if
it's
rendered
from
the
scratch
every
time,
and
then
you
call
it
over
and
over
and
but
the
engine
underneath
compares
what
what
it
has
and
what
you're
trying
to
do
and
only
calculates
diff
and
applies
this
div
to
the
persistent
tree.
B
And
this
approach
that
react
pioneered
that
flutter
took
that
swing
ui.
I
think
you
are
right.
This
thing
ui
took
so
and
now
there
is
jetpack
compose.
So
I
think
that's
the
main
players
in
this
area.
I
I
personally
find
it
much
much
better
way
to
develop
uil,
I
loved
react
when
it
was
out.
I
even
wrote
a
closure
library,
core
skip
library
for
react,
and
it
was
a
joy
to
use
the
fact
that
you
don't
have
to
manage
state
transitions
and
you
only
render
ui
from
scratch
every
time
it's.
B
It
simplifies
a
lot
of
things
and
I'm
glad
that
campus
joined
this
train.
D
Very
cool
thanks
for
your
answer,
but
now
it
makes
me
think
that
maybe
it
makes
more
sense
to
compare
the
pack
compose
to
clj
fix,
which
is
a
react-like
wrapper
of
javafx.
So
they
are
really
have
the
same
semantics
when
it
comes
to
defining
components.
B
Yeah
yeah,
maybe
you're,
probably
right-
I
I
I
haven't
worked
with
it,
so
I
couldn't
say
much,
but
if,
if
it
does
of
this
react
style
things,
it's
probably
kind
of
doing
the
same
thing.
Yes,.
A
And
the
next
question
is
like
so
so
it's
it's
from
glass
lab.
So
the
question
is
like
in
github
of
compose
jb,
I'm
unable
to
find
the
built-in
components.
Is
there
a
reference
where
I
can
find
the
components
that
is
supported
in
compose.
B
You
should
be
looking
at
this
jetpack
compose
for
android
and
look.
I
think
they
have
some
documentation
somewhere,
but
I
also
need
to
mention
that
this
is
in
alpha.
So
it's
not
out
even
for
android,
so
stuff
changes,
it
changes
pretty
significantly
significantly
every
month.
So
it's
it's
pretty
hard
to
keep.
B
A
And
the
next
question
from
daniel
is:
are
you
aware
of
any
other
interesting
c,
plus
plus
libraries
in
the
ecosystem,
around
skia?
That
could
be
useful
to
build
bridges
for
something
for
data
visualization,
for
example?
A
So
is
there
any
c,
plus
first
library
which
can
be
used
used
to
build
a
rapid
around
it
can
be
used
for
things
like
data
should
decision
or
things
like
that.
B
I'm
not
I
yeah
yeah,
okay,
so
the
answer
is,
I
am
not,
but
even
the
skier
repo
itself
has
pretty
well
has
some
right,
so
it
has
svg
library
which
is
actually
in
skija,
so
you
can
render
svg
in
skija.
They
also
have
this
koti,
which
is,
I
think,
a
format
for
svg
animations
or
something
like
that.
So
for
vector
animations.
I
think
it's
I
I
I
think
vector
editors
can
export
it.
Something
like
that
yeah,
I'm,
not
sure
what
else
is
there,
but
something
like
that:
mothers.
B
A
Okay,
so
that's
all
the
questions
that
we
have
for
the
moment.
So
anyone
have
any
questions,
so
we
have
a
lot
more
time
left.
So
probably,
if
you
are
interested
to
discuss
something
or
anything
that
you
are
unclear
of,
I
think
we
have
time
to
have
a
detailed
discussion.
Of
course,.
A
C
Ahead
so
again,
thank
you.
Thank
you
for
the
brilliant
talk
really
exciting.
I
think
there
is
something
that
we
sometimes
like
to
do
after
we
have
talks
like
this
one,
and
that
is
to
go
and
learn,
and
I
wanted
to
ask
people
in
the
audience
if
anybody
would
be
interested
in
meeting
afterwards
and
trying
to
play
with
skija
from
closure
or
not
from
closure,
so
that
we
can
learn
together
and
try
to
use
it
for
our
needs.
C
A
A
A
Okay,
yeah,
I
think.
A
Yeah
yeah
thanks
a
lot
nikita
for
for
such
a
preparation
and
such
a
innovative
presentation
that
you
started
with
and
we
went
on
and
thanks
for
the
work
that
you
are
putting
in
for
ski
job
and
other
libraries
and
podcasts
that
you
are
trying
and
if
people
here
didn't
know
already
so
nikita
is
having
an
interesting
blog
in
which
he's
posting
his
thoughts
and
the
podcast
that
he's
doing
and
the
videos
that
he
have
so
probably
can
follow
that
as
well.
A
And
I
have
also
posted
twitter
handle
of
nikita
a
couple
of
comments
back
in
the
chat
so
yeah.
I
think
we
are
good
anything
else
that
you
we
haven't
discussed.
A
It
it
so
especially
for
me,
since
I
have
experience
with
java
swing,
so
it
gave
a
different
perspective
and
especially
to
see
closer
in
action.
I
was
happy.