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
aa7ae5bb
Unverified
Commit
aa7ae5bb
authored
Oct 13, 2021
by
Oleksandr Karpovich
Committed by
GitHub
Oct 13, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commonize ImageTest.kt and SurfaceTest.kt (#261)
parent
c9381093
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
249 additions
and
175 deletions
+249
-175
common.h
skiko/src/commonMain/cpp/common.h
+4
-0
common_interop.cc
skiko/src/commonMain/cpp/common_interop.cc
+12
-0
Bitmap.cc
skiko/src/commonMain/cpp/generated/Bitmap.cc
+1
-7
Image.cc
skiko/src/commonMain/cpp/generated/Image.cc
+21
-52
Surface.cc
skiko/src/commonMain/cpp/generated/Surface.cc
+15
-27
Bitmap.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Bitmap.kt
+4
-16
Image.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Image.kt
+11
-9
ImageInfo.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/ImageInfo.kt
+25
-0
Surface.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Surface.kt
+6
-8
ImageTest.kt
skiko/src/commonTest/kotlin/org/jetbrains/skia/ImageTest.kt
+89
-0
SurfaceTest.kt
...o/src/commonTest/kotlin/org/jetbrains/skia/SurfaceTest.kt
+4
-7
Bitmap.cc
skiko/src/jvmMain/cpp/common/Bitmap.cc
+3
-10
Image.cc
skiko/src/jvmMain/cpp/common/Image.cc
+10
-7
Surface.cc
skiko/src/jvmMain/cpp/common/Surface.cc
+8
-10
interop.cc
skiko/src/jvmMain/cpp/common/interop.cc
+34
-21
interop.hh
skiko/src/jvmMain/cpp/common/interop.hh
+2
-1
No files found.
skiko/src/commonMain/cpp/common.h
View file @
aa7ae5bb
...
@@ -55,6 +55,10 @@ namespace skija {
...
@@ -55,6 +55,10 @@ namespace skija {
SkFontStyle
fromKotlin
(
KInt
style
);
SkFontStyle
fromKotlin
(
KInt
style
);
KInt
toKotlin
(
const
SkFontStyle
&
fs
);
KInt
toKotlin
(
const
SkFontStyle
&
fs
);
}
}
namespace
ImageInfo
{
void
writeImageInfoForInterop
(
SkImageInfo
imageInfo
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
);
}
}
}
std
::
unique_ptr
<
SkMatrix
>
skMatrix
(
KFloat
*
matrixArray
);
std
::
unique_ptr
<
SkMatrix
>
skMatrix
(
KFloat
*
matrixArray
);
...
...
skiko/src/commonMain/cpp/common_interop.cc
View file @
aa7ae5bb
#include "common.h"
#include "common.h"
#include "src/utils/SkUTF.h"
#include "src/utils/SkUTF.h"
#include "include/core/SkImageInfo.h"
#include <stdio.h>
#include <stdio.h>
KLong
packTwoInts
(
int32_t
a
,
int32_t
b
)
{
KLong
packTwoInts
(
int32_t
a
,
int32_t
b
)
{
...
@@ -145,4 +146,15 @@ namespace skija {
...
@@ -145,4 +146,15 @@ namespace skija {
return
(
static_cast
<
int
>
(
fs
.
slant
())
<<
24
)
|
(
fs
.
width
()
<<
16
)
|
fs
.
weight
();
return
(
static_cast
<
int
>
(
fs
.
slant
())
<<
24
)
|
(
fs
.
width
()
<<
16
)
|
fs
.
weight
();
}
}
}
}
namespace
ImageInfo
{
void
writeImageInfoForInterop
(
SkImageInfo
imageInfo
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
)
{
imageInfoResult
[
0
]
=
imageInfo
.
width
();
imageInfoResult
[
1
]
=
imageInfo
.
height
();
imageInfoResult
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
imageInfoResult
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
colorSpacePtrsArray
[
0
]
=
imageInfo
.
refColorSpace
().
release
();
}
}
}
}
skiko/src/commonMain/cpp/generated/Bitmap.cc
View file @
aa7ae5bb
...
@@ -40,13 +40,7 @@ SKIKO_EXPORT void org_jetbrains_skia_Bitmap__1nGetImageInfo
...
@@ -40,13 +40,7 @@ SKIKO_EXPORT void org_jetbrains_skia_Bitmap__1nGetImageInfo
SkBitmap
*
instance
=
reinterpret_cast
<
SkBitmap
*>
(
ptr
);
SkBitmap
*
instance
=
reinterpret_cast
<
SkBitmap
*>
(
ptr
);
SkImageInfo
imageInfo
=
instance
->
info
();
SkImageInfo
imageInfo
=
instance
->
info
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
imageInfo
,
imageInfoResult
,
colorSpacePtrsArray
);
imageInfoResult
[
0
]
=
instance
->
width
();
imageInfoResult
[
1
]
=
instance
->
height
();
imageInfoResult
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
imageInfoResult
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
colorSpacePtrsArray
[
0
]
=
imageInfo
.
refColorSpace
().
release
();
}
}
#if 0
#if 0
...
...
skiko/src/commonMain/cpp/generated/Image.cc
View file @
aa7ae5bb
...
@@ -8,25 +8,16 @@
...
@@ -8,25 +8,16 @@
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeRaster
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeRaster
(
KInt
width
,
KInt
height
,
KInt
colorType
,
KInt
alphaType
,
KNativePointer
colorSpacePtr
,
KByte
*
bytesArr
,
KNativePointer
rowBytes
)
{
(
KInt
width
,
KInt
height
,
KInt
colorType
,
KInt
alphaType
,
KNativePointer
colorSpacePtr
,
KByte
*
bytesArr
,
KInt
rowBytes
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nMakeRaster"
);
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
colorSpacePtr
);
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeRaster
(KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr, KByte* bytesArr, KNativePointer rowBytes) {
SkColorSpace* colorSpace = reinterpret_cast<SkColorSpace*>((colorSpacePtr));
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
height
,
height
,
static_cast
<
SkColorType
>
(
colorType
),
static_cast
<
SkColorType
>
(
colorType
),
static_cast
<
SkAlphaType
>
(
alphaType
),
static_cast
<
SkAlphaType
>
(
alphaType
),
sk_ref_sp
<
SkColorSpace
>
(
colorSpace
));
sk_ref_sp
<
SkColorSpace
>
(
colorSpace
));
void* bytes = env->GetPrimitiveArrayCritical(bytesArr, 0);
sk_sp
<
SkImage
>
image
=
SkImage
::
MakeRasterCopy
(
SkPixmap
(
imageInfo
,
bytesArr
,
rowBytes
));
sk_sp<SkImage> image = SkImage::MakeRasterCopy(SkPixmap(imageInfo, bytes, rowBytes));
env->ReleasePrimitiveArrayCritical(bytesArr, bytes, 0);
return
reinterpret_cast
<
KNativePointer
>
(
image
.
release
());
return
reinterpret_cast
<
KNativePointer
>
(
image
.
release
());
}
}
#endif
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeRasterData
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeRasterData
...
@@ -58,38 +49,18 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeFromPixmap
...
@@ -58,38 +49,18 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeFromPixmap
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeFromEncoded
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeFromEncoded
(
KByte
*
encodedArray
)
{
(
KByte
*
encodedArray
,
KInt
encodedLen
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nMakeFromEncoded"
);
sk_sp
<
SkData
>
encodedData
=
SkData
::
MakeWithCopy
(
encodedArray
,
encodedLen
);
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeFromEncoded
(KByte* encodedArray) {
jsize encodedLen = env->GetArrayLength(encodedArray);
KByte* encoded = env->GetByteArrayElements(encodedArray, 0);
sk_sp<SkData> encodedData = SkData::MakeWithCopy(encoded, encodedLen);
env->ReleaseByteArrayElements(encodedArray, encoded, 0);
sk_sp
<
SkImage
>
image
=
SkImage
::
MakeFromEncoded
(
encodedData
);
sk_sp
<
SkImage
>
image
=
SkImage
::
MakeFromEncoded
(
encodedData
);
return
reinterpret_cast
<
KNativePointer
>
(
image
.
release
());
return
reinterpret_cast
<
KNativePointer
>
(
image
.
release
());
}
}
#endif
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_Image__1nGetImageInfo
SKIKO_EXPORT
void
org_jetbrains_skia_Image__1nGetImageInfo
(
KNativePointer
ptr
)
{
(
KNativePointer
ptr
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nGetImageInfo"
);
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
((
ptr
));
SkImageInfo
imageInfo
=
instance
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
imageInfo
,
imageInfoResult
,
colorSpacePtrsArray
);
}
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Image__1nGetImageInfo
(KNativePointer ptr) {
SkImage* instance = reinterpret_cast<SkImage*>((ptr));
return skija::ImageInfo::toJava(env, instance->imageInfo());
}
#endif
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nEncodeToData
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nEncodeToData
...
@@ -101,19 +72,17 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nEncodeToData
...
@@ -101,19 +72,17 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nEncodeToData
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeShader
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeShader
(
KNativePointer
ptr
,
KInt
tmx
,
KInt
tmy
,
KNativePointer
sampling
,
KFloat
*
localMatrixArr
)
{
(
KNativePointer
ptr
,
KInt
tmx
,
KInt
tmy
,
KLong
samplingMode
,
KFloat
*
localMatrixArr
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nMakeShader"
);
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
(
ptr
);
}
std
::
unique_ptr
<
SkMatrix
>
localMatrix
=
skMatrix
(
localMatrixArr
);
sk_sp
<
SkShader
>
shader
=
instance
->
makeShader
(
#if 0
static_cast
<
SkTileMode
>
(
tmx
),
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeShader
static_cast
<
SkTileMode
>
(
tmy
),
(KNativePointer ptr, KInt tmx, KInt tmy, KNativePointer sampling, KFloat* localMatrixArr) {
skija
::
SamplingMode
::
unpack
(
samplingMode
),
SkImage* instance = reinterpret_cast<SkImage*>((ptr));
localMatrix
.
get
()
std::unique_ptr<SkMatrix> localMatrix = skMatrix(env, localMatrixArr);
);
sk_sp<SkShader> shader = instance->makeShader(static_cast<SkTileMode>(tmx), static_cast<SkTileMode>(tmy), skija::SamplingMode::unpack(sampling), localMatrix.get());
return
reinterpret_cast
<
KNativePointer
>
(
shader
.
release
());
return
reinterpret_cast
<
KNativePointer
>
(
shader
.
release
());
}
}
#endif
...
@@ -121,8 +90,8 @@ SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Image__1nPeekPixels
...
@@ -121,8 +90,8 @@ SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Image__1nPeekPixels
(
KNativePointer
ptr
)
{
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nPeekPixels"
);
TODO
(
"implement org_jetbrains_skia_Image__1nPeekPixels"
);
}
}
#if 0
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Image__1nPeekPixels
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Image__1nPeekPixels
(KNativePointer ptr) {
(KNativePointer ptr) {
SkImage* instance = reinterpret_cast<SkImage*>((ptr));
SkImage* instance = reinterpret_cast<SkImage*>((ptr));
...
...
skiko/src/commonMain/cpp/generated/Surface.cc
View file @
aa7ae5bb
...
@@ -15,8 +15,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirect
...
@@ -15,8 +15,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirect
{
{
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRasterDirect"
);
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRasterDirect"
);
}
}
#if 0
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirect
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirect
(KInteropPointer __Kinstance,
(KInteropPointer __Kinstance,
KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr,
KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr,
...
@@ -48,8 +48,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirectWithPi
...
@@ -48,8 +48,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirectWithPi
{
{
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRasterDirectWithPixmap"
);
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRasterDirectWithPixmap"
);
}
}
#if 0
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirectWithPixmap
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRasterDirectWithPixmap
(KInteropPointer __Kinstance,
(KInteropPointer __Kinstance,
KNativePointer pixmapPtr, KInteropPointer surfacePropsObj)
KNativePointer pixmapPtr, KInteropPointer surfacePropsObj)
...
@@ -72,8 +72,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRaster
...
@@ -72,8 +72,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRaster
{
{
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRaster"
);
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRaster"
);
}
}
#if 0
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRaster
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRaster
(KInteropPointer __Kinstance,
(KInteropPointer __Kinstance,
KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr,
KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr,
...
@@ -138,8 +138,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeFromMTKView
...
@@ -138,8 +138,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeFromMTKView
(
KNativePointer
contextPtr
,
KNativePointer
mtkViewPtr
,
KInt
surfaceOrigin
,
KInt
sampleCount
,
KInt
colorType
,
KNativePointer
colorSpacePtr
,
KInteropPointer
surfacePropsObj
)
{
(
KNativePointer
contextPtr
,
KNativePointer
mtkViewPtr
,
KInt
surfaceOrigin
,
KInt
sampleCount
,
KInt
colorType
,
KNativePointer
colorSpacePtr
,
KInteropPointer
surfacePropsObj
)
{
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeFromMTKView"
);
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeFromMTKView"
);
}
}
#if 0
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeFromMTKView
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeFromMTKView
(KNativePointer contextPtr, KNativePointer mtkViewPtr, KInt surfaceOrigin, KInt sampleCount, KInt colorType, KNativePointer colorSpacePtr, KInteropPointer surfacePropsObj) {
(KNativePointer contextPtr, KNativePointer mtkViewPtr, KInt surfaceOrigin, KInt sampleCount, KInt colorType, KNativePointer colorSpacePtr, KInteropPointer surfacePropsObj) {
GrDirectContext* context = reinterpret_cast<GrDirectContext*>((contextPtr));
GrDirectContext* context = reinterpret_cast<GrDirectContext*>((contextPtr));
...
@@ -172,8 +172,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRenderTarget
...
@@ -172,8 +172,8 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRenderTarget
{
{
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRenderTarget"
);
TODO
(
"implement org_jetbrains_skia_Surface__1nMakeRenderTarget"
);
}
}
#if 0
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRenderTarget
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Surface__1nMakeRenderTarget
(KNativePointer contextPtr, KBoolean budgeted,
(KNativePointer contextPtr, KBoolean budgeted,
KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr,
KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr,
...
@@ -290,24 +290,12 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Surface__1nUnique
...
@@ -290,24 +290,12 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Surface__1nUnique
}
}
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_Surface__1nGetImageInfo
SKIKO_EXPORT
void
org_jetbrains_skia_Surface__1nGetImageInfo
(
KNativePointer
ptr
)
{
(
KNativePointer
ptr
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
)
{
TODO
(
"implement org_jetbrains_skia_Surface__1nGetImageInfo"
);
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
((
ptr
));
SkImageInfo
imageInfo
=
surface
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
imageInfo
,
imageInfoResult
,
colorSpacePtrsArray
);
}
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Surface__1nGetImageInfo
(KNativePointer ptr) {
SkSurface* surface = reinterpret_cast<SkSurface*>((ptr));
const SkImageInfo& info = surface->imageInfo();
return env->NewObject(skija::ImageInfo::cls, skija::ImageInfo::ctor,
info.width(),
info.height(),
static_cast<KInt>(info.colorType()),
static_cast<KInt>(info.alphaType()),
reinterpret_cast<KNativePointer>(info.refColorSpace().release()));
}
#endif
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Surface__1nMakeSurface
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Surface__1nMakeSurface
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/Bitmap.kt
View file @
aa7ae5bb
...
@@ -70,22 +70,10 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
...
@@ -70,22 +70,10 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
override
val
imageInfo
:
ImageInfo
override
val
imageInfo
:
ImageInfo
get
()
=
try
{
get
()
=
try
{
if
(
_imageInfo
==
null
)
{
if
(
_imageInfo
==
null
)
{
Stats
.
onNativeCall
()
_imageInfo
=
ImageInfo
.
createUsing
(
var
colorSpacePtr
:
NativePointer
?
=
null
_ptr
=
_ptr
,
_nGetImageInfo
=
::
_nGetImageInfo
_imageInfo
=
withResult
(
IntArray
(
4
))
{
intArrayPointer
->
)
colorSpacePtr
=
withResult
(
NativePointerArray
(
1
))
{
nativePointerArrayPtr
->
_nGetImageInfo
(
_ptr
,
intArrayPointer
,
nativePointerArrayPtr
)
}[
0
]
}.
let
{
ImageInfo
(
width
=
it
[
0
],
height
=
it
[
1
],
colorType
=
it
[
2
],
alphaType
=
it
[
3
],
colorSpace
=
colorSpacePtr
!!
)
}
}
}
_imageInfo
!!
_imageInfo
!!
}
finally
{
}
finally
{
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/Image.kt
View file @
aa7ae5bb
...
@@ -26,7 +26,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
...
@@ -26,7 +26,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
*
*
* @see [https://fiddle.skia.org/c/@Image_MakeRasterCopy](https://fiddle.skia.org/c/@Image_MakeRasterCopy)
* @see [https://fiddle.skia.org/c/@Image_MakeRasterCopy](https://fiddle.skia.org/c/@Image_MakeRasterCopy)
*/
*/
fun
makeRaster
(
imageInfo
:
ImageInfo
,
bytes
:
ByteArray
,
rowBytes
:
NativePointer
):
Image
{
fun
makeRaster
(
imageInfo
:
ImageInfo
,
bytes
:
ByteArray
,
rowBytes
:
Int
):
Image
{
return
try
{
return
try
{
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
val
ptr
=
interopScope
{
val
ptr
=
interopScope
{
...
@@ -66,7 +66,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
...
@@ -66,7 +66,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
* @param rowBytes how many bytes in a row
* @param rowBytes how many bytes in a row
* @return Image
* @return Image
*/
*/
fun
makeRaster
(
imageInfo
:
ImageInfo
,
data
:
Data
,
rowBytes
:
NativePointer
):
Image
{
fun
makeRaster
(
imageInfo
:
ImageInfo
,
data
:
Data
,
rowBytes
:
Int
):
Image
{
return
try
{
return
try
{
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
val
ptr
=
_nMakeRasterData
(
val
ptr
=
_nMakeRasterData
(
...
@@ -134,7 +134,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
...
@@ -134,7 +134,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
fun
makeFromEncoded
(
bytes
:
ByteArray
?):
Image
{
fun
makeFromEncoded
(
bytes
:
ByteArray
?):
Image
{
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
val
ptr
=
interopScope
{
val
ptr
=
interopScope
{
_nMakeFromEncoded
(
toInterop
(
bytes
))
_nMakeFromEncoded
(
toInterop
(
bytes
)
,
bytes
?.
size
?:
0
)
}
}
require
(
ptr
!=
NullPointer
)
{
"Failed to Image::makeFromEncoded"
}
require
(
ptr
!=
NullPointer
)
{
"Failed to Image::makeFromEncoded"
}
return
Image
(
ptr
)
return
Image
(
ptr
)
...
@@ -158,8 +158,10 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
...
@@ -158,8 +158,10 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
if
(
_imageInfo
==
null
)
{
if
(
_imageInfo
==
null
)
{
commonSynchronized
(
this
)
{
commonSynchronized
(
this
)
{
if
(
_imageInfo
==
null
)
{
if
(
_imageInfo
==
null
)
{
Stats
.
onNativeCall
()
_imageInfo
=
ImageInfo
.
createUsing
(
_imageInfo
=
Image_nGetImageInfo
(
_ptr
)
_ptr
=
_ptr
,
_nGetImageInfo
=
::
Image_nGetImageInfo
)
}
}
}
}
}
}
...
@@ -368,7 +370,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
...
@@ -368,7 +370,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
}
}
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nGetImageInfo"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nGetImageInfo"
)
private
external
fun
Image_nGetImageInfo
(
ptr
:
NativePointer
):
ImageInfo
?
private
external
fun
Image_nGetImageInfo
(
ptr
:
NativePointer
,
imageInfo
:
InteropPointer
,
colorSpacePtrs
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nMakeShader"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nMakeShader"
)
private
external
fun
Image_nMakeShader
(
ptr
:
NativePointer
,
tmx
:
Int
,
tmy
:
Int
,
samplingMode
:
Long
,
localMatrix
:
InteropPointer
):
NativePointer
private
external
fun
Image_nMakeShader
(
ptr
:
NativePointer
,
tmx
:
Int
,
tmy
:
Int
,
samplingMode
:
Long
,
localMatrix
:
InteropPointer
):
NativePointer
...
@@ -384,7 +386,7 @@ private external fun _nMakeRaster(
...
@@ -384,7 +386,7 @@ private external fun _nMakeRaster(
alphaType
:
Int
,
alphaType
:
Int
,
colorSpacePtr
:
NativePointer
,
colorSpacePtr
:
NativePointer
,
pixels
:
InteropPointer
,
pixels
:
InteropPointer
,
rowBytes
:
NativePointer
rowBytes
:
Int
):
NativePointer
):
NativePointer
...
@@ -396,7 +398,7 @@ private external fun _nMakeRasterData(
...
@@ -396,7 +398,7 @@ private external fun _nMakeRasterData(
alphaType
:
Int
,
alphaType
:
Int
,
colorSpacePtr
:
NativePointer
,
colorSpacePtr
:
NativePointer
,
dataPtr
:
NativePointer
,
dataPtr
:
NativePointer
,
rowBytes
:
NativePointer
rowBytes
:
Int
):
NativePointer
):
NativePointer
...
@@ -407,7 +409,7 @@ private external fun _nMakeFromBitmap(bitmapPtr: NativePointer): NativePointer
...
@@ -407,7 +409,7 @@ private external fun _nMakeFromBitmap(bitmapPtr: NativePointer): NativePointer
private
external
fun
_nMakeFromPixmap
(
pixmapPtr
:
NativePointer
):
NativePointer
private
external
fun
_nMakeFromPixmap
(
pixmapPtr
:
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nMakeFromEncoded"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nMakeFromEncoded"
)
private
external
fun
_nMakeFromEncoded
(
bytes
:
InteropPointer
):
NativePointer
private
external
fun
_nMakeFromEncoded
(
bytes
:
InteropPointer
,
encodedLength
:
Int
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nEncodeToData"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nEncodeToData"
)
private
external
fun
_nEncodeToData
(
ptr
:
NativePointer
,
format
:
Int
,
quality
:
Int
):
NativePointer
private
external
fun
_nEncodeToData
(
ptr
:
NativePointer
,
format
:
Int
,
quality
:
Int
):
NativePointer
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/ImageInfo.kt
View file @
aa7ae5bb
...
@@ -2,6 +2,10 @@ package org.jetbrains.skia
...
@@ -2,6 +2,10 @@ package org.jetbrains.skia
import
org.jetbrains.skia.impl.Native
import
org.jetbrains.skia.impl.Native
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.NativePointerArray
import
org.jetbrains.skia.impl.InteropPointer
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.withResult
/**
/**
*
*
...
@@ -279,5 +283,26 @@ class ImageInfo(val colorInfo: ColorInfo, val width: Int, val height: Int) {
...
@@ -279,5 +283,26 @@ class ImageInfo(val colorInfo: ColorInfo, val width: Int, val height: Int) {
fun
makeUnknown
(
width
:
Int
,
height
:
Int
):
ImageInfo
{
fun
makeUnknown
(
width
:
Int
,
height
:
Int
):
ImageInfo
{
return
ImageInfo
(
ColorInfo
(
ColorType
.
UNKNOWN
,
ColorAlphaType
.
UNKNOWN
,
null
),
width
,
height
)
return
ImageInfo
(
ColorInfo
(
ColorType
.
UNKNOWN
,
ColorAlphaType
.
UNKNOWN
,
null
),
width
,
height
)
}
}
fun
createUsing
(
_ptr
:
NativePointer
,
_nGetImageInfo
:
(
_ptr
:
NativePointer
,
intArrayPointer
:
InteropPointer
,
nativePointerArrayPtr
:
InteropPointer
)
->
Unit
):
ImageInfo
{
Stats
.
onNativeCall
()
var
colorSpacePtr
:
NativePointer
?
=
null
return
withResult
(
IntArray
(
4
))
{
intArrayPointer
->
colorSpacePtr
=
withResult
(
NativePointerArray
(
1
))
{
nativePointerArrayPtr
->
_nGetImageInfo
(
_ptr
,
intArrayPointer
,
nativePointerArrayPtr
)
}[
0
]
}.
let
{
ImageInfo
(
width
=
it
[
0
],
height
=
it
[
1
],
colorType
=
it
[
2
],
alphaType
=
it
[
3
],
colorSpace
=
colorSpacePtr
!!
)
}
}
}
}
}
}
skiko/src/commonMain/kotlin/org/jetbrains/skia/Surface.kt
View file @
aa7ae5bb
package
org.jetbrains.skia
package
org.jetbrains.skia
import
org.jetbrains.skia.impl.*
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.RefCnt
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.getPtr
class
Surface
:
RefCnt
{
class
Surface
:
RefCnt
{
companion
object
{
companion
object
{
...
@@ -573,8 +569,10 @@ class Surface : RefCnt {
...
@@ -573,8 +569,10 @@ class Surface : RefCnt {
*/
*/
val
imageInfo
:
ImageInfo
val
imageInfo
:
ImageInfo
get
()
=
try
{
get
()
=
try
{
Stats
.
onNativeCall
()
ImageInfo
.
createUsing
(
Surface_nGetImageInfo
(
_ptr
)
_ptr
=
_ptr
,
_nGetImageInfo
=
::
Surface_nGetImageInfo
)
}
finally
{
}
finally
{
reachabilityBarrier
(
this
)
reachabilityBarrier
(
this
)
}
}
...
@@ -994,7 +992,7 @@ private external fun Surface_nGetWidth(ptr: NativePointer): Int
...
@@ -994,7 +992,7 @@ private external fun Surface_nGetWidth(ptr: NativePointer): Int
private
external
fun
Surface_nGetHeight
(
ptr
:
NativePointer
):
Int
private
external
fun
Surface_nGetHeight
(
ptr
:
NativePointer
):
Int
@ExternalSymbolName
(
"org_jetbrains_skia_Surface__1nGetImageInfo"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Surface__1nGetImageInfo"
)
private
external
fun
Surface_nGetImageInfo
(
ptr
:
NativePointer
):
ImageInfo
private
external
fun
Surface_nGetImageInfo
(
ptr
:
NativePointer
,
imageInfo
:
InteropPointer
,
colorSpacePtrs
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_Surface__1nReadPixels"
)
@ExternalSymbolName
(
"org_jetbrains_skia_Surface__1nReadPixels"
)
private
external
fun
Surface_nReadPixels
(
ptr
:
NativePointer
,
bitmapPtr
:
NativePointer
,
srcX
:
Int
,
srcY
:
Int
):
Boolean
private
external
fun
Surface_nReadPixels
(
ptr
:
NativePointer
,
bitmapPtr
:
NativePointer
,
srcX
:
Int
,
srcY
:
Int
):
Boolean
...
...
skiko/src/commonTest/kotlin/org/jetbrains/skia/ImageTest.kt
0 → 100644
View file @
aa7ae5bb
package
org.jetbrains.skia
import
org.jetbrains.skia.impl.use
import
org.jetbrains.skiko.tests.runTest
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertTrue
class
ImageTest
{
@Test
fun
imageTest
()
{
imageUnderTest
{
image
->
assertEquals
(
100
,
image
.
width
)
assertEquals
(
100
,
image
.
height
)
assertTrue
(
image
.
encodeToData
()
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
JPEG
)
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
JPEG
,
50
)
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
WEBP
)
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
WEBP
,
50
)
?.
bytes
!!
.
isNotEmpty
())
}
}
@Test
fun
canGetImageInfo
()
=
runTest
{
imageUnderTest
{
image
->
val
info
=
image
.
imageInfo
assertEquals
(
100
,
image
.
width
)
assertEquals
(
100
,
image
.
height
)
}
}
@Test
fun
canMakeFromEncodedBytes
()
=
runTest
{
val
encodedBytes
=
imageUnderTest
{
image
->
image
.
encodeToData
()
?.
bytes
!!
}
val
image
=
Image
.
makeFromEncoded
(
encodedBytes
)
assertEquals
(
100
,
image
.
width
)
assertEquals
(
100
,
image
.
height
)
}
@Test
fun
canMakeShader
()
=
runTest
{
val
shader
=
imageUnderTest
{
image
->
image
.
makeShader
(
Matrix33
.
makeRotate
(
45f
))
}
}
@Test
fun
canMakeRaster
()
=
runTest
{
// source: https://fiddle.skia.org/c/@Image_MakeRasterCopy
val
bytes
=
intArrayOf
(
0
xCA
,
0
xDA
,
0
xCA
,
0
xC9
,
0
xA3
,
0
xAC
,
0
xA8
,
0
x89
,
0
xA7
,
0
x87
,
0
x9B
,
0
xB5
,
0
xE5
,
0
x95
,
0
x46
,
0
x90
,
0
x81
,
0
xC5
,
0
x71
,
0
x33
,
0
x75
,
0
x55
,
0
x44
,
0
x40
,
0
x30
).
map
{
it
.
toByte
()
}.
toByteArray
()
val
imageInfo
=
ImageInfo
(
width
=
5
,
height
=
5
,
colorType
=
ColorType
.
GRAY_8
,
alphaType
=
ColorAlphaType
.
OPAQUE
)
val
image
=
Image
.
makeRaster
(
imageInfo
,
bytes
,
5
)
}
private
fun
<
T
>
imageUnderTest
(
block
:
(
Image
)
->
T
):
T
{
return
Surface
.
makeRasterN32Premul
(
100
,
100
).
use
{
surface
->
val
paint
=
Paint
()
paint
.
color
=
-
0
x10000
Path
().
moveTo
(
20f
,
80f
)
.
lineTo
(
50f
,
20f
)
.
lineTo
(
80f
,
80f
)
.
closePath
()
.
use
{
path
->
val
canvas
=
surface
.
canvas
canvas
.
drawPath
(
path
,
paint
)
surface
.
makeImageSnapshot
().
use
{
image
->
block
(
image
)
}
}
}
}
}
skiko/src/
jvmTest/kotlin/org/jetbrains/skiko
/SurfaceTest.kt
→
skiko/src/
commonTest/kotlin/org/jetbrains/skia
/SurfaceTest.kt
View file @
aa7ae5bb
package
org.jetbrains.ski
ko
package
org.jetbrains.ski
a
import
org.jetbrains.skia.Bitmap
import
org.jetbrains.skia.impl.use
import
org.jetbrains.skia.ContentChangeMode
import
org.jetbrains.skia.IRect
import
org.jetbrains.skia.ImageInfo
import
org.jetbrains.skia.Surface
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertFailsWith
import
kotlin.test.assertFailsWith
...
@@ -12,6 +8,7 @@ import kotlin.test.assertNotEquals
...
@@ -12,6 +8,7 @@ import kotlin.test.assertNotEquals
import
kotlin.test.assertTrue
import
kotlin.test.assertTrue
class
SurfaceTest
{
class
SurfaceTest
{
@Test
@Test
fun
surfaceTest
()
{
fun
surfaceTest
()
{
assertFailsWith
<
IllegalArgumentException
>
{
assertFailsWith
<
IllegalArgumentException
>
{
...
@@ -60,4 +57,4 @@ class SurfaceTest {
...
@@ -60,4 +57,4 @@ class SurfaceTest {
assertEquals
(
context
,
null
)
assertEquals
(
context
,
null
)
}
}
}
}
}
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/Bitmap.cc
View file @
aa7ae5bb
...
@@ -37,16 +37,9 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_BitmapKt__1nGetImageIn
...
@@ -37,16 +37,9 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_BitmapKt__1nGetImageIn
SkBitmap
*
instance
=
reinterpret_cast
<
SkBitmap
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkBitmap
*
instance
=
reinterpret_cast
<
SkBitmap
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkImageInfo
imageInfo
=
instance
->
info
();
SkImageInfo
imageInfo
=
instance
->
info
();
jint
*
result_int
=
env
->
GetIntArrayElements
(
imageInfoResult
,
NULL
);
skija
::
ImageInfo
::
writeImageInfoForInterop
(
result_int
[
0
]
=
instance
->
width
();
env
,
imageInfo
,
imageInfoResult
,
colorSpaceResultPtr
result_int
[
1
]
=
instance
->
height
();
);
result_int
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
result_int
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
env
->
ReleaseIntArrayElements
(
imageInfoResult
,
result_int
,
0
);
jlong
*
result_long
=
env
->
GetLongArrayElements
(
colorSpaceResultPtr
,
NULL
);
result_long
[
0
]
=
reinterpret_cast
<
jlong
>
(
imageInfo
.
refColorSpace
().
release
());
env
->
ReleaseLongArrayElements
(
colorSpaceResultPtr
,
result_long
,
0
);
}
}
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_BitmapKt__1nGetRowBytesAsPixels
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_BitmapKt__1nGetRowBytesAsPixels
...
...
skiko/src/jvmMain/cpp/common/Image.cc
View file @
aa7ae5bb
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
#include "interop.hh"
#include "interop.hh"
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeRaster
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeRaster
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jbyteArray
bytesArr
,
j
long
rowBytes
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jbyteArray
bytesArr
,
j
int
rowBytes
)
{
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
static_cast
<
uintptr_t
>
(
colorSpacePtr
));
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
static_cast
<
uintptr_t
>
(
colorSpacePtr
));
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
height
,
height
,
...
@@ -19,7 +19,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeRaster
...
@@ -19,7 +19,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeRaster
}
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeRasterData
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeRasterData
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jlong
dataPtr
,
j
long
rowBytes
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jlong
dataPtr
,
j
int
rowBytes
)
{
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
static_cast
<
uintptr_t
>
(
colorSpacePtr
));
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
static_cast
<
uintptr_t
>
(
colorSpacePtr
));
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
height
,
height
,
...
@@ -46,8 +46,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeFromPi
...
@@ -46,8 +46,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeFromPi
}
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeFromEncoded
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeFromEncoded
(
JNIEnv
*
env
,
jclass
jclass
,
jbyteArray
encodedArray
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jbyteArray
encodedArray
,
jint
encodedLen
)
{
jsize
encodedLen
=
env
->
GetArrayLength
(
encodedArray
);
jbyte
*
encoded
=
env
->
GetByteArrayElements
(
encodedArray
,
0
);
jbyte
*
encoded
=
env
->
GetByteArrayElements
(
encodedArray
,
0
);
sk_sp
<
SkData
>
encodedData
=
SkData
::
MakeWithCopy
(
encoded
,
encodedLen
);
sk_sp
<
SkData
>
encodedData
=
SkData
::
MakeWithCopy
(
encoded
,
encodedLen
);
env
->
ReleaseByteArrayElements
(
encodedArray
,
encoded
,
0
);
env
->
ReleaseByteArrayElements
(
encodedArray
,
encoded
,
0
);
...
@@ -57,10 +56,14 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeFromEn
...
@@ -57,10 +56,14 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeFromEn
return
reinterpret_cast
<
jlong
>
(
image
.
release
());
return
reinterpret_cast
<
jlong
>
(
image
.
release
());
}
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_ImageKt_Image_1nGetImageInfo
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_ImageKt_Image_1nGetImageInfo
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
)
{
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
skija
::
ImageInfo
::
toJava
(
env
,
instance
->
imageInfo
());
SkImageInfo
imageInfo
=
instance
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
env
,
imageInfo
,
imageInfoResult
,
colorSpaceResultPtr
);
}
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nEncodeToData
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nEncodeToData
...
...
skiko/src/jvmMain/cpp/common/Surface.cc
View file @
aa7ae5bb
...
@@ -224,16 +224,14 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_SurfaceKt__1nUniqu
...
@@ -224,16 +224,14 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_SurfaceKt__1nUniqu
return
surface
->
unique
();
return
surface
->
unique
();
}
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_SurfaceKt_Surface_1nGetImageInfo
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_SurfaceKt_Surface_1nGetImageInfo
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
)
{
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
const
SkImageInfo
&
info
=
surface
->
imageInfo
();
SkImageInfo
imageInfo
=
surface
->
imageInfo
();
return
env
->
NewObject
(
skija
::
ImageInfo
::
cls
,
skija
::
ImageInfo
::
ctor
,
info
.
width
(),
skija
::
ImageInfo
::
writeImageInfoForInterop
(
info
.
height
(),
env
,
imageInfo
,
imageInfoResult
,
colorSpaceResultPtr
static_cast
<
jint
>
(
info
.
colorType
()),
);
static_cast
<
jint
>
(
info
.
alphaType
()),
reinterpret_cast
<
jlong
>
(
info
.
refColorSpace
().
release
()));
}
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_SurfaceKt__1nMakeSurface
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_SurfaceKt__1nMakeSurface
...
@@ -281,4 +279,4 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_SurfaceKt__1nGetRecor
...
@@ -281,4 +279,4 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_SurfaceKt__1nGetRecor
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
reinterpret_cast
<
jlong
>
(
surface
->
recordingContext
());
return
reinterpret_cast
<
jlong
>
(
surface
->
recordingContext
());
}
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/interop.cc
View file @
aa7ae5bb
...
@@ -298,7 +298,7 @@ namespace skija {
...
@@ -298,7 +298,7 @@ namespace skija {
namespace
FontMgr
{
namespace
FontMgr
{
jclass
cls
;
jclass
cls
;
void
onLoad
(
JNIEnv
*
env
)
{
void
onLoad
(
JNIEnv
*
env
)
{
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/FontMgr"
);
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/FontMgr"
);
cls
=
static_cast
<
jclass
>
(
env
->
NewGlobalRef
(
local
));
cls
=
static_cast
<
jclass
>
(
env
->
NewGlobalRef
(
local
));
...
@@ -326,7 +326,7 @@ namespace skija {
...
@@ -326,7 +326,7 @@ namespace skija {
jfieldID
value
;
jfieldID
value
;
void
onLoad
(
JNIEnv
*
env
)
{
void
onLoad
(
JNIEnv
*
env
)
{
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/FontVariation"
);
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/FontVariation"
);
cls
=
static_cast
<
jclass
>
(
env
->
NewGlobalRef
(
local
));
cls
=
static_cast
<
jclass
>
(
env
->
NewGlobalRef
(
local
));
ctor
=
env
->
GetMethodID
(
cls
,
"<init>"
,
"(IF)V"
);
ctor
=
env
->
GetMethodID
(
cls
,
"<init>"
,
"(IF)V"
);
tag
=
env
->
GetFieldID
(
cls
,
"_tag"
,
"I"
);
tag
=
env
->
GetFieldID
(
cls
,
"_tag"
,
"I"
);
...
@@ -358,7 +358,7 @@ namespace skija {
...
@@ -358,7 +358,7 @@ namespace skija {
jmethodID
ctor
;
jmethodID
ctor
;
void
onLoad
(
JNIEnv
*
env
)
{
void
onLoad
(
JNIEnv
*
env
)
{
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/ImageInfo"
);
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/ImageInfo"
);
cls
=
static_cast
<
jclass
>
(
env
->
NewGlobalRef
(
local
));
cls
=
static_cast
<
jclass
>
(
env
->
NewGlobalRef
(
local
));
ctor
=
env
->
GetMethodID
(
cls
,
"<init>"
,
"(IIIIJ)V"
);
ctor
=
env
->
GetMethodID
(
cls
,
"<init>"
,
"(IIIIJ)V"
);
}
}
...
@@ -375,6 +375,19 @@ namespace skija {
...
@@ -375,6 +375,19 @@ namespace skija {
static_cast
<
jint
>
(
info
.
alphaType
()),
static_cast
<
jint
>
(
info
.
alphaType
()),
reinterpret_cast
<
jlong
>
(
info
.
refColorSpace
().
release
()));
reinterpret_cast
<
jlong
>
(
info
.
refColorSpace
().
release
()));
}
}
void
writeImageInfoForInterop
(
JNIEnv
*
env
,
SkImageInfo
imageInfo
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
)
{
jint
*
result_int
=
env
->
GetIntArrayElements
(
imageInfoResult
,
NULL
);
result_int
[
0
]
=
imageInfo
.
width
();
result_int
[
1
]
=
imageInfo
.
height
();
result_int
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
result_int
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
env
->
ReleaseIntArrayElements
(
imageInfoResult
,
result_int
,
0
);
jlong
*
result_long
=
env
->
GetLongArrayElements
(
colorSpaceResultPtr
,
NULL
);
result_long
[
0
]
=
reinterpret_cast
<
jlong
>
(
imageInfo
.
refColorSpace
().
release
());
env
->
ReleaseLongArrayElements
(
colorSpaceResultPtr
,
result_long
,
0
);
}
}
}
namespace
IPoint
{
namespace
IPoint
{
...
@@ -406,7 +419,7 @@ namespace skija {
...
@@ -406,7 +419,7 @@ namespace skija {
jfieldID
left
;
jfieldID
left
;
jfieldID
top
;
jfieldID
top
;
jfieldID
right
;
jfieldID
right
;
jfieldID
bottom
;
jfieldID
bottom
;
void
onLoad
(
JNIEnv
*
env
)
{
void
onLoad
(
JNIEnv
*
env
)
{
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/IRect"
);
jclass
local
=
env
->
FindClass
(
"org/jetbrains/skia/IRect"
);
...
@@ -432,9 +445,9 @@ namespace skija {
...
@@ -432,9 +445,9 @@ namespace skija {
return
std
::
unique_ptr
<
SkIRect
>
(
nullptr
);
return
std
::
unique_ptr
<
SkIRect
>
(
nullptr
);
else
{
else
{
return
std
::
unique_ptr
<
SkIRect
>
(
new
SkIRect
{
return
std
::
unique_ptr
<
SkIRect
>
(
new
SkIRect
{
env
->
GetIntField
(
obj
,
left
),
env
->
GetIntField
(
obj
,
left
),
env
->
GetIntField
(
obj
,
top
),
env
->
GetIntField
(
obj
,
top
),
env
->
GetIntField
(
obj
,
right
),
env
->
GetIntField
(
obj
,
right
),
env
->
GetIntField
(
obj
,
bottom
)
env
->
GetIntField
(
obj
,
bottom
)
});
});
}
}
...
@@ -577,9 +590,9 @@ namespace skija {
...
@@ -577,9 +590,9 @@ namespace skija {
return
std
::
unique_ptr
<
SkRect
>
(
nullptr
);
return
std
::
unique_ptr
<
SkRect
>
(
nullptr
);
else
{
else
{
SkRect
*
rect
=
new
SkRect
();
SkRect
*
rect
=
new
SkRect
();
rect
->
setLTRB
(
env
->
GetFloatField
(
rectObj
,
left
),
rect
->
setLTRB
(
env
->
GetFloatField
(
rectObj
,
left
),
env
->
GetFloatField
(
rectObj
,
top
),
env
->
GetFloatField
(
rectObj
,
top
),
env
->
GetFloatField
(
rectObj
,
right
),
env
->
GetFloatField
(
rectObj
,
right
),
env
->
GetFloatField
(
rectObj
,
bottom
));
env
->
GetFloatField
(
rectObj
,
bottom
));
if
(
java
::
lang
::
Throwable
::
exceptionThrown
(
env
))
if
(
java
::
lang
::
Throwable
::
exceptionThrown
(
env
))
return
std
::
unique_ptr
<
SkRect
>
(
nullptr
);
return
std
::
unique_ptr
<
SkRect
>
(
nullptr
);
...
@@ -776,7 +789,7 @@ namespace skija {
...
@@ -776,7 +789,7 @@ namespace skija {
RRect
::
onLoad
(
env
);
RRect
::
onLoad
(
env
);
RSXform
::
onLoad
(
env
);
RSXform
::
onLoad
(
env
);
SurfaceProps
::
onLoad
(
env
);
SurfaceProps
::
onLoad
(
env
);
impl
::
Native
::
onLoad
(
env
);
impl
::
Native
::
onLoad
(
env
);
}
}
...
@@ -828,17 +841,17 @@ std::unique_ptr<SkM44> skM44(JNIEnv* env, jfloatArray matrixArray) {
...
@@ -828,17 +841,17 @@ std::unique_ptr<SkM44> skM44(JNIEnv* env, jfloatArray matrixArray) {
//
//
// Normal UTF-8:
// Normal UTF-8:
//
//
// 1 U+ 0.. 7F 7 0xxxxxxx
// 1 U+ 0.. 7F 7 0xxxxxxx
// 2 U+ 80.. 7FF 11 110xxxxx 10xxxxxx
// 2 U+ 80.. 7FF 11 110xxxxx 10xxxxxx
// 3 U+ 800.. FFFF 16 1110xxxx 10xxxxxx 10xxxxxx
// 3 U+ 800.. FFFF 16 1110xxxx 10xxxxxx 10xxxxxx
// 4 U+ 10000..10FFFF 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
// 4 U+ 10000..10FFFF 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
//
//
// Modified UTF-8 (Java):
// Modified UTF-8 (Java):
//
//
// 1 U+ 1.. 7F 7 0xxxxxxx
// 1 U+ 1.. 7F 7 0xxxxxxx
// 2 U+ 0 11000000 10000000
// 2 U+ 0 11000000 10000000
// 2 U+ 80.. 7FF 11 110xxxxx 10xxxxxx
// 2 U+ 80.. 7FF 11 110xxxxx 10xxxxxx
// 3 U+ 800.. FFFF 16 1110xxxx 10xxxxxx 10xxxxxx
// 3 U+ 800.. FFFF 16 1110xxxx 10xxxxxx 10xxxxxx
// 6 U+ 10000..10FFFF 20 11101101 1010xxxx 10xxxxxx 11101101 1011xxxx 10xxxxxx (+ 0x10000)
// 6 U+ 10000..10FFFF 20 11101101 1010xxxx 10xxxxxx 11101101 1011xxxx 10xxxxxx (+ 0x10000)
size_t
utfToUtf8
(
unsigned
char
*
data
,
size_t
len
)
{
size_t
utfToUtf8
(
unsigned
char
*
data
,
size_t
len
)
{
...
@@ -891,8 +904,8 @@ size_t utfToUtf8(unsigned char *data, size_t len) {
...
@@ -891,8 +904,8 @@ size_t utfToUtf8(unsigned char *data, size_t len) {
SkASSERT
((
byte5
&
0
b11110000
)
==
0
b10110000
);
SkASSERT
((
byte5
&
0
b11110000
)
==
0
b10110000
);
SkASSERT
((
byte6
&
0
b11000000
)
==
0
b10000000
);
SkASSERT
((
byte6
&
0
b11000000
)
==
0
b10000000
);
uint32_t
codepoint
=
(((
byte2
&
0
b00001111
)
<<
16
)
|
uint32_t
codepoint
=
(((
byte2
&
0
b00001111
)
<<
16
)
|
((
byte3
&
0
b00111111
)
<<
10
)
|
((
byte3
&
0
b00111111
)
<<
10
)
|
((
byte5
&
0
b00001111
)
<<
6
)
|
((
byte5
&
0
b00001111
)
<<
6
)
|
(
byte6
&
0
b00111111
))
(
byte6
&
0
b00111111
))
+
0x10000
;
+
0x10000
;
// Four-byte UTF-8
// Four-byte UTF-8
...
...
skiko/src/jvmMain/cpp/common/interop.hh
View file @
aa7ae5bb
...
@@ -185,6 +185,7 @@ namespace skija {
...
@@ -185,6 +185,7 @@ namespace skija {
void
onLoad
(
JNIEnv
*
env
);
void
onLoad
(
JNIEnv
*
env
);
void
onUnload
(
JNIEnv
*
env
);
void
onUnload
(
JNIEnv
*
env
);
jobject
toJava
(
JNIEnv
*
env
,
const
SkImageInfo
&
imageInfo
);
jobject
toJava
(
JNIEnv
*
env
,
const
SkImageInfo
&
imageInfo
);
void
writeImageInfoForInterop
(
JNIEnv
*
env
,
SkImageInfo
imageInfo
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
);
}
}
namespace
IPoint
{
namespace
IPoint
{
...
@@ -375,4 +376,4 @@ static inline jint rawBits(jfloat f) {
...
@@ -375,4 +376,4 @@ static inline jint rawBits(jfloat f) {
}
u
;
}
u
;
u
.
f
=
f
;
u
.
f
=
f
;
return
u
.
i
;
return
u
.
i
;
}
}
\ No newline at end of file
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