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
5a47afa5
Unverified
Commit
5a47afa5
authored
Oct 27, 2021
by
Aleksandr Veselov
Committed by
GitHub
Oct 27, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement native methods of Region, add test (#319)
parent
81cbf367
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
51 additions
and
31 deletions
+51
-31
Region.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Region.kt
+7
-4
RegionTest.kt
skiko/src/commonTest/kotlin/org/jetbrains/skia/RegionTest.kt
+27
-0
Region.cc
skiko/src/jvmMain/cpp/common/Region.cc
+5
-3
Region.cc
skiko/src/nativeJsMain/cpp/Region.cc
+12
-24
No files found.
skiko/src/commonMain/kotlin/org/jetbrains/skia/Region.kt
View file @
5a47afa5
...
@@ -52,7 +52,10 @@ class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) {
...
@@ -52,7 +52,10 @@ class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) {
val
bounds
:
IRect
val
bounds
:
IRect
get
()
=
try
{
get
()
=
try
{
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
Region_nGetBounds
(
_ptr
)
val
ltrb
=
withResult
(
IntArray
(
4
))
{
Region_nGetBounds
(
_ptr
,
it
)
}
IRect
(
ltrb
[
0
],
ltrb
[
1
],
ltrb
[
2
],
ltrb
[
3
])
}
finally
{
}
finally
{
reachabilityBarrier
(
this
)
reachabilityBarrier
(
this
)
}
}
...
@@ -108,7 +111,7 @@ class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) {
...
@@ -108,7 +111,7 @@ class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) {
}
}
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
interopScope
{
interopScope
{
Region_nSetRects
(
_ptr
,
toInterop
(
arr
))
Region_nSetRects
(
_ptr
,
toInterop
(
arr
)
,
rects
.
size
)
}
}
}
finally
{
}
finally
{
reachabilityBarrier
(
this
)
reachabilityBarrier
(
this
)
...
@@ -335,7 +338,7 @@ private external fun Region_nIsEmpty(ptr: NativePointer): Boolean
...
@@ -335,7 +338,7 @@ private external fun Region_nIsEmpty(ptr: NativePointer): Boolean
private
external
fun
Region_nIsRect
(
ptr
:
NativePointer
):
Boolean
private
external
fun
Region_nIsRect
(
ptr
:
NativePointer
):
Boolean
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nGetBounds"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nGetBounds"
)
private
external
fun
Region_nGetBounds
(
ptr
:
NativePointer
):
IRect
private
external
fun
Region_nGetBounds
(
ptr
:
NativePointer
,
ltrb
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nSet"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nSet"
)
private
external
fun
Region_nSet
(
ptr
:
NativePointer
,
regoinPtr
:
NativePointer
):
Boolean
private
external
fun
Region_nSet
(
ptr
:
NativePointer
,
regoinPtr
:
NativePointer
):
Boolean
...
@@ -356,7 +359,7 @@ private external fun Region_nSetEmpty(ptr: NativePointer): Boolean
...
@@ -356,7 +359,7 @@ private external fun Region_nSetEmpty(ptr: NativePointer): Boolean
private
external
fun
Region_nSetRect
(
ptr
:
NativePointer
,
left
:
Int
,
top
:
Int
,
right
:
Int
,
bottom
:
Int
):
Boolean
private
external
fun
Region_nSetRect
(
ptr
:
NativePointer
,
left
:
Int
,
top
:
Int
,
right
:
Int
,
bottom
:
Int
):
Boolean
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nSetRects"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nSetRects"
)
private
external
fun
Region_nSetRects
(
ptr
:
NativePointer
,
rects
:
InteropPointer
):
Boolean
private
external
fun
Region_nSetRects
(
ptr
:
NativePointer
,
rects
:
InteropPointer
,
count
:
Int
):
Boolean
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nSetRegion"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Region__1nSetRegion"
)
private
external
fun
Region_nSetRegion
(
ptr
:
NativePointer
,
regionPtr
:
NativePointer
):
Boolean
private
external
fun
Region_nSetRegion
(
ptr
:
NativePointer
,
regionPtr
:
NativePointer
):
Boolean
...
...
skiko/src/commonTest/kotlin/org/jetbrains/skia/RegionTest.kt
0 → 100644
View file @
5a47afa5
package
org.jetbrains.skia
import
kotlin.test.Test
import
kotlin.test.assertEquals
class
RegionTest
{
@Test
fun
canGetBounds
()
{
val
bounds
=
IRect
(
10
,
10
,
30
,
30
)
val
region
=
Region
().
apply
{
setRect
(
bounds
)
}
assertEquals
(
bounds
,
region
.
bounds
)
}
@Test
fun
canSetRects
()
{
val
bounds
=
IRect
(
10
,
10
,
30
,
30
)
val
region
=
Region
().
apply
{
setRects
(
arrayOf
(
IRect
(
10
,
10
,
25
,
25
),
IRect
(
15
,
15
,
30
,
30
),
))
}
assertEquals
(
bounds
,
region
.
bounds
)
}
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/Region.cc
View file @
5a47afa5
...
@@ -38,9 +38,11 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_RegionKt_Region_1n
...
@@ -38,9 +38,11 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_RegionKt_Region_1n
return
instance
->
isComplex
();
return
instance
->
isComplex
();
}
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_RegionKt_Region_1nGetBounds
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_RegionKt_Region_1nGetBounds
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
ltrbArray
)
{
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
skija
::
IRect
::
fromSkIRect
(
env
,
instance
->
getBounds
());
SkIRect
bounds
=
instance
->
getBounds
();
jint
ltrb
[
4
]
{
bounds
.
left
(),
bounds
.
top
(),
bounds
.
right
(),
bounds
.
bottom
()
};
env
->
SetIntArrayRegion
(
ltrbArray
,
0
,
4
,
ltrb
);
}
}
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_RegionKt_Region_1nComputeRegionComplexity
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_RegionKt_Region_1nComputeRegionComplexity
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
...
@@ -64,7 +66,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_RegionKt_Region_1n
...
@@ -64,7 +66,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_RegionKt_Region_1n
return
instance
->
setRect
({
left
,
top
,
right
,
bottom
});
return
instance
->
setRect
({
left
,
top
,
right
,
bottom
});
}
}
extern
"C"
JNIEXPORT
jboolean
JNICALL
Java_org_jetbrains_skia_RegionKt_Region_1nSetRects
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
coords
)
{
extern
"C"
JNIEXPORT
jboolean
JNICALL
Java_org_jetbrains_skia_RegionKt_Region_1nSetRects
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
coords
,
jint
_count
)
{
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
int
len
=
env
->
GetArrayLength
(
coords
);
int
len
=
env
->
GetArrayLength
(
coords
);
std
::
vector
<
SkIRect
>
rects
(
len
/
4
);
std
::
vector
<
SkIRect
>
rects
(
len
/
4
);
...
...
skiko/src/nativeJsMain/cpp/Region.cc
View file @
5a47afa5
...
@@ -41,16 +41,15 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Region__1nIsComplex(KNativePointer ptr)
...
@@ -41,16 +41,15 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Region__1nIsComplex(KNativePointer ptr)
}
}
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_Region__1nGetBounds
(
KNativePointer
ptr
)
{
SKIKO_EXPORT
void
org_jetbrains_skia_Region__1nGetBounds
(
KNativePointer
ptr
,
KInteropPointer
ltrbArray
)
{
TODO
(
"implement org_jetbrains_skia_Region__1nGetBounds(KInteropPointer"
);
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Region__1nGetBounds(KNativePointer ptr) {
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
((
ptr
));
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
((
ptr
));
return skija::IRect::fromSkIRect(env, instance->getBounds());
int
*
ltrb
=
reinterpret_cast
<
int
*>
(
ltrbArray
);
SkIRect
bounds
=
instance
->
getBounds
();
ltrb
[
0
]
=
bounds
.
left
();
ltrb
[
1
]
=
bounds
.
top
();
ltrb
[
2
]
=
bounds
.
right
();
ltrb
[
3
]
=
bounds
.
bottom
();
}
}
#endif
SKIKO_EXPORT
KInt
org_jetbrains_skia_Region__1nComputeRegionComplexity
(
KNativePointer
ptr
)
{
SKIKO_EXPORT
KInt
org_jetbrains_skia_Region__1nComputeRegionComplexity
(
KNativePointer
ptr
)
{
...
@@ -74,24 +73,13 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Region__1nSetRect(KNativePointer ptr, K
...
@@ -74,24 +73,13 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Region__1nSetRect(KNativePointer ptr, K
return
instance
->
setRect
({
left
,
top
,
right
,
bottom
});
return
instance
->
setRect
({
left
,
top
,
right
,
bottom
});
}
}
SKIKO_EXPORT
KBoolean
org_jetbrains_skia_Region__1nSetRects
(
KNativePointer
ptr
,
KInt
*
coords
,
KInt
count
)
{
SKIKO_EXPORT
KBoolean
org_jetbrains_skia_Region__1nSetRects
(
KNativePointer
ptr
,
KInt
*
coords
)
{
TODO
(
"implement org_jetbrains_skia_Region__1nSetRects(KInteropPointer"
);
}
#if 0
SKIKO_EXPORT KBoolean org_jetbrains_skia_Region__1nSetRects(KNativePointer ptr, KInt* coords) {
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
((
ptr
));
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
((
ptr
));
int len = env->GetArrayLength(coords);
std
::
vector
<
SkIRect
>
rects
(
count
);
std::vector<SkIRect> rects(len / 4);
for
(
int
i
=
0
,
off
=
0
;
i
<
count
;
i
++
,
off
+=
4
)
KInt* arr = env->GetIntArrayElements(coords, 0);
rects
[
i
]
=
{
coords
[
off
],
coords
[
off
+
1
],
coords
[
off
+
2
],
coords
[
off
+
3
]};
for (int i = 0; i < len; i += 4)
return
instance
->
setRects
(
rects
.
data
(),
count
);
rects[i / 4] = {arr[i], arr[i+1], arr[i+2], arr[i+3]};
env->ReleaseIntArrayElements(coords, arr, 0);
return instance->setRects(rects.data(), len / 4);
}
}
#endif
SKIKO_EXPORT
KBoolean
org_jetbrains_skia_Region__1nSetRegion
(
KNativePointer
ptr
,
KNativePointer
regionPtr
)
{
SKIKO_EXPORT
KBoolean
org_jetbrains_skia_Region__1nSetRegion
(
KNativePointer
ptr
,
KNativePointer
regionPtr
)
{
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
((
ptr
));
SkRegion
*
instance
=
reinterpret_cast
<
SkRegion
*>
((
ptr
));
...
...
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