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
5d78bcc8
Unverified
Commit
5d78bcc8
authored
Feb 26, 2026
by
Ivan Matkov
Committed by
GitHub
Feb 26, 2026
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
`Blender` fixes (#1162 followup) (#1175)
Fixes from #1168 extracted as a followup patch for #1162
parent
e2abdf1a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
71 additions
and
43 deletions
+71
-43
Blender.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Blender.kt
+24
-14
Paint.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Paint.kt
+9
-6
RuntimeEffect.kt
...src/commonMain/kotlin/org/jetbrains/skia/RuntimeEffect.kt
+2
-1
BlenderTest.kt
...o/src/commonTest/kotlin/org/jetbrains/skia/BlenderTest.kt
+11
-6
Blender.cc
skiko/src/jvmMain/cpp/common/Blender.cc
+5
-1
Paint.cc
skiko/src/jvmMain/cpp/common/Paint.cc
+7
-7
Blender.cc
skiko/src/nativeJsMain/cpp/Blender.cc
+6
-1
Paint.cc
skiko/src/nativeJsMain/cpp/Paint.cc
+7
-7
No files found.
skiko/src/commonMain/kotlin/org/jetbrains/skia/Blender.kt
View file @
5d78bcc8
...
@@ -3,14 +3,23 @@ package org.jetbrains.skia
...
@@ -3,14 +3,23 @@ package org.jetbrains.skia
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.RefCnt
import
org.jetbrains.skia.impl.RefCnt
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.interopScope
import
org.jetbrains.skia.impl.interopScope
/**
/**
* Blender represents a custom blend function in the Skia pipeline. A blender combines a source
* Blender represents a custom blend function in the Skia pipeline. A blender combines a source
* color (the result of our paint) and destination color (from the canvas) into a final color.
* color (the result of our paint) and destination color (from the canvas) into a final color.
*/
*/
class
Blender
internal
constructor
(
ptr
:
NativePointer
)
:
RefCnt
(
ptr
)
{
class
Blender
internal
constructor
(
ptr
:
NativePointer
)
:
RefCnt
(
ptr
)
{
companion
object
{
companion
object
{
init
{
staticLoad
()
}
fun
makeMode
(
mode
:
BlendMode
):
Blender
{
Stats
.
onNativeCall
()
return
Blender
(
_nMakeMode
(
mode
.
ordinal
))
}
fun
makeArithmetic
(
fun
makeArithmetic
(
k1
:
Float
,
k1
:
Float
,
...
@@ -19,19 +28,17 @@ class Blender internal constructor(ptr: NativePointer) : RefCnt(ptr) {
...
@@ -19,19 +28,17 @@ class Blender internal constructor(ptr: NativePointer) : RefCnt(ptr) {
k4
:
Float
,
k4
:
Float
,
enforcePMColor
:
Boolean
,
enforcePMColor
:
Boolean
,
):
Blender
{
):
Blender
{
return
try
{
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
return
interopScope
{
interopScope
{
Blender
(
Blender
(
_nMakeArithmetic
(
_nMakeArithmetic
(
k1
,
k1
,
k2
,
k2
,
k3
,
k3
,
k4
,
k4
,
enforcePMColor
,
enforcePMColor
)
),
)
)
}
}
finally
{
}
}
}
}
}
}
...
@@ -45,3 +52,6 @@ private external fun _nMakeArithmetic(
...
@@ -45,3 +52,6 @@ private external fun _nMakeArithmetic(
k4
:
Float
,
k4
:
Float
,
enforcePMColor
:
Boolean
enforcePMColor
:
Boolean
):
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Blender__1nMakeMode"
)
private
external
fun
_nMakeMode
(
mode
:
Int
):
NativePointer
skiko/src/commonMain/kotlin/org/jetbrains/skia/Paint.kt
View file @
5d78bcc8
...
@@ -448,14 +448,17 @@ class Paint : Managed {
...
@@ -448,14 +448,17 @@ class Paint : Managed {
}
}
/**
/**
*
@param blender how geometry is filled with color; if null, color is used instead
*
Returns the user-supplied blend function, if one has been set.
*
*
*
@see [https://fiddle.skia.org/c/@Color_Filter_Methods](https://fiddle.skia.org/c/@Color_Filter_Methods)
*
A null blender signifies the default SrcOver behavior.
*
*
* @see [https://fiddle.skia.org/c/@Paint_setShader](https://fiddle.skia.org/c/@Paint_setShader)
* For convenience, you can call [blendMode] if the blend effect can be expressed
* as one of those values.
*
*
* @return [Shader] or null
* @see [https://fiddle.skia.org/c/@Paint_setBlender](https://fiddle.skia.org/c/@Paint_setBlender)
* @see [https://fiddle.skia.org/c/@Paint_refShader](https://fiddle.skia.org/c/@Paint_refShader)
* @see [https://fiddle.skia.org/c/@Paint_refBlender](https://fiddle.skia.org/c/@Paint_refBlender)
*
* @return the [Blender] assigned to this paint, otherwise null
*/
*/
var
blender
:
Blender
?
var
blender
:
Blender
?
get
()
=
try
{
get
()
=
try
{
...
@@ -695,7 +698,7 @@ private external fun _nSetImageFilter(ptr: NativePointer, filterPtr: NativePoint
...
@@ -695,7 +698,7 @@ private external fun _nSetImageFilter(ptr: NativePointer, filterPtr: NativePoint
private
external
fun
_nGetBlender
(
ptr
:
NativePointer
):
NativePointer
private
external
fun
_nGetBlender
(
ptr
:
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Paint__1nSetBlender"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Paint__1nSetBlender"
)
private
external
fun
_nSetBlender
(
ptr
:
NativePointer
,
sha
derPtr
:
NativePointer
)
private
external
fun
_nSetBlender
(
ptr
:
NativePointer
,
blen
derPtr
:
NativePointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_Paint__1nHasNothingToDraw"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Paint__1nHasNothingToDraw"
)
private
external
fun
_nHasNothingToDraw
(
ptr
:
NativePointer
):
Boolean
private
external
fun
_nHasNothingToDraw
(
ptr
:
NativePointer
):
Boolean
skiko/src/commonMain/kotlin/org/jetbrains/skia/RuntimeEffect.kt
View file @
5d78bcc8
...
@@ -58,6 +58,7 @@ class RuntimeEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
...
@@ -58,6 +58,7 @@ class RuntimeEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
}
}
}
finally
{
}
finally
{
reachabilityBarrier
(
this
)
reachabilityBarrier
(
this
)
reachabilityBarrier
(
uniforms
)
}
}
}
}
}
}
...
@@ -93,4 +94,4 @@ internal external fun Result_nGetPtr(ptr: NativePointer): NativePointer
...
@@ -93,4 +94,4 @@ internal external fun Result_nGetPtr(ptr: NativePointer): NativePointer
internal
external
fun
Result_nGetError
(
ptr
:
NativePointer
):
NativePointer
internal
external
fun
Result_nGetError
(
ptr
:
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_RuntimeEffect__1Result_nDestroy"
)
@ExternalSymbolName
(
"org_jetbrains_skia_RuntimeEffect__1Result_nDestroy"
)
internal
external
fun
Result_nDestroy
(
ptr
:
NativePointer
)
internal
external
fun
Result_nDestroy
(
ptr
:
NativePointer
)
\ No newline at end of file
skiko/src/commonTest/kotlin/org/jetbrains/skia/BlenderTest.kt
View file @
5d78bcc8
...
@@ -51,10 +51,15 @@ class BlenderTest {
...
@@ -51,10 +51,15 @@ class BlenderTest {
runtimeEffect
.
makeBlender
(
null
)
runtimeEffect
.
makeBlender
(
null
)
}
}
// @Test
@Test
// fun arithmetic() = blenderTest {
fun
arithmetic
()
=
blenderTest
{
// Blender.makeArithmetic(
Blender
.
makeArithmetic
(
// k1 = 0.5f, k2 = 0.5f, k3 = 0.5f, k4 = 0.5f, enforcePMColor = true
k1
=
0.5f
,
k2
=
0.5f
,
k3
=
0.5f
,
k4
=
0.5f
,
enforcePMColor
=
true
// )
)
// }
}
@Test
fun
mode
()
=
blenderTest
{
Blender
.
makeMode
(
BlendMode
.
CLEAR
)
}
}
}
skiko/src/jvmMain/cpp/common/Blender.cc
View file @
5d78bcc8
#include <iostream>
#include <jni.h>
#include <jni.h>
#include "interop.hh"
#include "interop.hh"
#include "SkBlender.h"
#include "SkBlender.h"
...
@@ -10,3 +9,8 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_BlenderKt__1nMakeArit
...
@@ -10,3 +9,8 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_BlenderKt__1nMakeArit
return
reinterpret_cast
<
jlong
>
(
ptr
);
return
reinterpret_cast
<
jlong
>
(
ptr
);
}
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_BlenderKt__1nMakeMode
(
JNIEnv
*
env
,
jclass
jclass
,
jint
mode
)
{
SkBlender
*
ptr
=
SkBlender
::
Mode
(
static_cast
<
SkBlendMode
>
(
mode
)).
release
();
return
reinterpret_cast
<
jlong
>
(
ptr
);
}
skiko/src/jvmMain/cpp/common/Paint.cc
View file @
5d78bcc8
...
@@ -184,16 +184,16 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_PaintKt__1nSetImageFil
...
@@ -184,16 +184,16 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_PaintKt__1nSetImageFil
}
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_PaintKt__1nGetBlender
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_PaintKt__1nGetBlender
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
reinterpret_cast
<
jlong
>
(
instance
->
refBlender
().
release
());
return
reinterpret_cast
<
jlong
>
(
instance
->
refBlender
().
release
());
}
}
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_PaintKt__1nSetBlender
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_PaintKt__1nSetBlender
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jlong
filt
erPtr
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jlong
blend
erPtr
)
{
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkBlender
*
filter
=
reinterpret_cast
<
SkBlender
*>
(
static_cast
<
uintptr_t
>
(
filt
erPtr
));
SkBlender
*
blender
=
reinterpret_cast
<
SkBlender
*>
(
static_cast
<
uintptr_t
>
(
blend
erPtr
));
instance
->
setBlender
(
sk_ref_sp
<
SkBlender
>
(
filt
er
));
instance
->
setBlender
(
sk_ref_sp
<
SkBlender
>
(
blend
er
));
}
}
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_PaintKt__1nGetBlendMode
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_PaintKt__1nGetBlendMode
...
...
skiko/src/nativeJsMain/cpp/Blender.cc
View file @
5d78bcc8
#include <iostream>
#include "SkBlender.h"
#include "SkBlender.h"
#include "SkBlenders.h"
#include "SkBlenders.h"
#include "common.h"
#include "common.h"
...
@@ -8,3 +7,9 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Blender__1nMakeArithmetic
...
@@ -8,3 +7,9 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Blender__1nMakeArithmetic
SkBlender
*
ptr
=
SkBlenders
::
Arithmetic
(
k1
,
k2
,
k3
,
k4
,
enforcePMColor
).
release
();
SkBlender
*
ptr
=
SkBlenders
::
Arithmetic
(
k1
,
k2
,
k3
,
k4
,
enforcePMColor
).
release
();
return
reinterpret_cast
<
KNativePointer
>
(
ptr
);
return
reinterpret_cast
<
KNativePointer
>
(
ptr
);
}
}
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Blender__1nMakeMode
(
KInt
mode
)
{
SkBlender
*
ptr
=
SkBlender
::
Mode
(
static_cast
<
SkBlendMode
>
(
mode
)).
release
();
return
reinterpret_cast
<
KNativePointer
>
(
ptr
);
}
skiko/src/nativeJsMain/cpp/Paint.cc
View file @
5d78bcc8
...
@@ -187,16 +187,16 @@ SKIKO_EXPORT void org_jetbrains_skia_Paint__1nSetImageFilter
...
@@ -187,16 +187,16 @@ SKIKO_EXPORT void org_jetbrains_skia_Paint__1nSetImageFilter
}
}
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Paint__1nGetBlender
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Paint__1nGetBlender
(
KNativePointer
ptr
)
{
(
KNativePointer
ptr
)
{
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
((
ptr
));
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
((
ptr
));
return
reinterpret_cast
<
KNativePointer
>
(
instance
->
refBlender
().
release
());
return
reinterpret_cast
<
KNativePointer
>
(
instance
->
refBlender
().
release
());
}
}
SKIKO_EXPORT
void
org_jetbrains_skia_Paint__1nSetBlender
SKIKO_EXPORT
void
org_jetbrains_skia_Paint__1nSetBlender
(
KNativePointer
ptr
,
KNativePointer
filt
erPtr
)
{
(
KNativePointer
ptr
,
KNativePointer
blend
erPtr
)
{
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
((
ptr
));
SkPaint
*
instance
=
reinterpret_cast
<
SkPaint
*>
((
ptr
));
SkBlender
*
filter
=
reinterpret_cast
<
SkBlender
*>
((
filt
erPtr
));
SkBlender
*
blender
=
reinterpret_cast
<
SkBlender
*>
((
blend
erPtr
));
instance
->
setBlender
(
sk_ref_sp
<
SkBlender
>
(
filt
er
));
instance
->
setBlender
(
sk_ref_sp
<
SkBlender
>
(
blend
er
));
}
}
SKIKO_EXPORT
KInt
org_jetbrains_skia_Paint__1nGetBlendMode
SKIKO_EXPORT
KInt
org_jetbrains_skia_Paint__1nGetBlendMode
...
...
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