Unverified Commit bcbda1d8 authored by alexander-gorshenev's avatar alexander-gorshenev Committed by GitHub

interopScope {} for all functions receiving primitive arrays (#195)

parent 9c835488
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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.Managed
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 Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR), IHasImageInfo { class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR), IHasImageInfo {
companion object { companion object {
...@@ -564,6 +560,7 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH ...@@ -564,6 +560,7 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
return try { return try {
_imageInfo = null _imageInfo = null
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nInstallPixels( _nInstallPixels(
_ptr, _ptr,
info.width, info.width,
...@@ -571,9 +568,10 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH ...@@ -571,9 +568,10 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
info.colorInfo.colorType.ordinal, info.colorInfo.colorType.ordinal,
info.colorInfo.alphaType.ordinal, info.colorInfo.alphaType.ordinal,
getPtr(info.colorInfo.colorSpace), getPtr(info.colorInfo.colorSpace),
pixels, toInterop(pixels),
rowBytes rowBytes
) )
}
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
reachabilityBarrier(info.colorInfo.colorSpace) reachabilityBarrier(info.colorInfo.colorSpace)
...@@ -1004,13 +1002,15 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH ...@@ -1004,13 +1002,15 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
require(sampling != null) { "Can’t Bitmap.makeShader with sampling == null" } require(sampling != null) { "Can’t Bitmap.makeShader with sampling == null" }
Stats.onNativeCall() Stats.onNativeCall()
Shader( Shader(
interopScope {
_nMakeShader( _nMakeShader(
_ptr, _ptr,
tmx.ordinal, tmx.ordinal,
tmy.ordinal, tmy.ordinal,
sampling._pack(), sampling._pack(),
localMatrix?.mat toInterop(localMatrix?.mat)
) )
}
) )
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
...@@ -1118,7 +1118,7 @@ private external fun _nInstallPixels( ...@@ -1118,7 +1118,7 @@ private external fun _nInstallPixels(
colorType: Int, colorType: Int,
alphaType: Int, alphaType: Int,
colorSpacePtr: NativePointer, colorSpacePtr: NativePointer,
pixels: ByteArray?, pixels: InteropPointer,
rowBytes: Long rowBytes: Long
): Boolean ): Boolean
...@@ -1180,4 +1180,4 @@ private external fun _nExtractAlpha(ptr: NativePointer, dstPtr: NativePointer, p ...@@ -1180,4 +1180,4 @@ private external fun _nExtractAlpha(ptr: NativePointer, dstPtr: NativePointer, p
private external fun _nPeekPixels(ptr: NativePointer): ByteBuffer? private external fun _nPeekPixels(ptr: NativePointer): ByteBuffer?
@ExternalSymbolName("org_jetbrains_skia_Bitmap__1nMakeShader") @ExternalSymbolName("org_jetbrains_skia_Bitmap__1nMakeShader")
private external fun _nMakeShader(ptr: NativePointer, tmx: Int, tmy: Int, samplingMode: Long, localMatrix: FloatArray?): NativePointer private external fun _nMakeShader(ptr: NativePointer, tmx: Int, tmy: Int, samplingMode: Long, localMatrix: InteropPointer): NativePointer
\ No newline at end of file \ No newline at end of file
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
package org.jetbrains.skia package org.jetbrains.skia
import org.jetbrains.skia.ImageFilter.Companion.makeDropShadowOnly import org.jetbrains.skia.ImageFilter.Companion.makeDropShadowOnly
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.impl.* import org.jetbrains.skia.impl.*
import org.jetbrains.skia.impl.Library.Companion.staticLoad
open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, internal val _owner: Any) : open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, internal val _owner: Any) :
Managed(ptr, _FinalizerHolder.PTR, managed) { Managed(ptr, _FinalizerHolder.PTR, managed) {
...@@ -119,7 +119,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int ...@@ -119,7 +119,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int
*/ */
fun drawPoints(coords: FloatArray, paint: Paint): Canvas { fun drawPoints(coords: FloatArray, paint: Paint): Canvas {
Stats.onNativeCall() Stats.onNativeCall()
_nDrawPoints(_ptr, 0 /* SkCanvas::PointMode::kPoints_PointMode */, coords, getPtr(paint)) interopScope {
_nDrawPoints(_ptr, 0 /* SkCanvas::PointMode::kPoints_PointMode */, toInterop(coords), getPtr(paint))
}
reachabilityBarrier(paint) reachabilityBarrier(paint)
return this return this
} }
...@@ -176,7 +178,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int ...@@ -176,7 +178,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int
*/ */
fun drawLines(coords: FloatArray, paint: Paint): Canvas { fun drawLines(coords: FloatArray, paint: Paint): Canvas {
Stats.onNativeCall() Stats.onNativeCall()
_nDrawPoints(_ptr, 1 /* SkCanvas::PointMode::kLines_PointMode */, coords, getPtr(paint)) interopScope {
_nDrawPoints(_ptr, 1 /* SkCanvas::PointMode::kLines_PointMode */, toInterop(coords), getPtr(paint))
}
reachabilityBarrier(paint) reachabilityBarrier(paint)
return this return this
} }
...@@ -231,7 +235,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int ...@@ -231,7 +235,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int
*/ */
fun drawPolygon(coords: FloatArray, paint: Paint): Canvas { fun drawPolygon(coords: FloatArray, paint: Paint): Canvas {
Stats.onNativeCall() Stats.onNativeCall()
_nDrawPoints(_ptr, 2 /* SkCanvas::PointMode::kPolygon_PointMode */, coords, getPtr(paint)) interopScope {
_nDrawPoints(_ptr, 2 /* SkCanvas::PointMode::kPolygon_PointMode */, toInterop(coords), getPtr(paint))
}
reachabilityBarrier(paint) reachabilityBarrier(paint)
return this return this
} }
...@@ -979,14 +985,16 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int ...@@ -979,14 +985,16 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int
require(colors.size == 4) { "Expected colors.length == 4, got: " + colors.size } require(colors.size == 4) { "Expected colors.length == 4, got: " + colors.size }
require(texCoords == null || texCoords.size == 4) { "Expected texCoords.length == 4, got: " + texCoords!!.size } require(texCoords == null || texCoords.size == 4) { "Expected texCoords.length == 4, got: " + texCoords!!.size }
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nDrawPatch( _nDrawPatch(
_ptr, _ptr,
Point.flattenArray(cubics), toInterop(Point.flattenArray(cubics)),
colors, toInterop(colors),
Point.flattenArray(texCoords), toInterop(Point.flattenArray(texCoords)),
mode.ordinal, mode.ordinal,
getPtr(paint) getPtr(paint)
) )
}
reachabilityBarrier(paint) reachabilityBarrier(paint)
return this return this
} }
...@@ -1048,7 +1056,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int ...@@ -1048,7 +1056,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int
*/ */
fun drawDrawable(drawable: Drawable, matrix: Matrix33?): Canvas { fun drawDrawable(drawable: Drawable, matrix: Matrix33?): Canvas {
Stats.onNativeCall() Stats.onNativeCall()
_nDrawDrawable(_ptr, getPtr(drawable), matrix?.mat) interopScope {
_nDrawDrawable(_ptr, getPtr(drawable), toInterop(matrix?.mat))
}
reachabilityBarrier(drawable) reachabilityBarrier(drawable)
return this return this
} }
...@@ -1076,7 +1086,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int ...@@ -1076,7 +1086,9 @@ open class Canvas internal constructor(ptr: NativePointer, managed: Boolean, int
*/ */
fun setMatrix(matrix: Matrix33): Canvas { fun setMatrix(matrix: Matrix33): Canvas {
Stats.onNativeCall() Stats.onNativeCall()
_nSetMatrix(_ptr, matrix.mat) interopScope {
_nSetMatrix(_ptr, toInterop(matrix.mat))
}
return this return this
} }
...@@ -1451,7 +1463,7 @@ private external fun _nMakeFromBitmap(bitmapPtr: NativePointer, flags: Int, pixe ...@@ -1451,7 +1463,7 @@ private external fun _nMakeFromBitmap(bitmapPtr: NativePointer, flags: Int, pixe
private external fun _nDrawPoint(ptr: NativePointer, x: Float, y: Float, paintPtr: NativePointer) private external fun _nDrawPoint(ptr: NativePointer, x: Float, y: Float, paintPtr: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawPoints") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawPoints")
private external fun _nDrawPoints(ptr: NativePointer, mode: Int, coords: FloatArray?, paintPtr: NativePointer) private external fun _nDrawPoints(ptr: NativePointer, mode: Int, coords: InteropPointer, paintPtr: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawLine") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawLine")
private external fun _nDrawLine(ptr: NativePointer, x0: Float, y0: Float, x1: Float, y1: Float, paintPtr: NativePointer) private external fun _nDrawLine(ptr: NativePointer, x0: Float, y0: Float, x1: Float, y1: Float, paintPtr: NativePointer)
...@@ -1575,16 +1587,16 @@ private external fun _nDrawVertices( ...@@ -1575,16 +1587,16 @@ private external fun _nDrawVertices(
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawPatch") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawPatch")
private external fun _nDrawPatch( private external fun _nDrawPatch(
ptr: NativePointer, ptr: NativePointer,
cubics: FloatArray?, cubics: InteropPointer,
colors: IntArray?, colors: InteropPointer,
texCoords: FloatArray?, texCoords: InteropPointer,
blendMode: Int, blendMode: Int,
paintPtr: NativePointer paintPtr: NativePointer
) )
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawDrawable") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nDrawDrawable")
private external fun _nDrawDrawable(ptr: NativePointer, drawablePrt: NativePointer, matrix: FloatArray?) private external fun _nDrawDrawable(ptr: NativePointer, drawablePrt: NativePointer, matrix: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nClear") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nClear")
private external fun _nClear(ptr: NativePointer, color: Int) private external fun _nClear(ptr: NativePointer, color: Int)
...@@ -1593,7 +1605,7 @@ private external fun _nClear(ptr: NativePointer, color: Int) ...@@ -1593,7 +1605,7 @@ private external fun _nClear(ptr: NativePointer, color: Int)
private external fun _nDrawPaint(ptr: NativePointer, paintPtr: NativePointer) private external fun _nDrawPaint(ptr: NativePointer, paintPtr: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nSetMatrix") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nSetMatrix")
private external fun _nSetMatrix(ptr: NativePointer, matrix: FloatArray?) private external fun _nSetMatrix(ptr: NativePointer, matrix: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_Canvas__1nGetLocalToDevice") @ExternalSymbolName("org_jetbrains_skia_Canvas__1nGetLocalToDevice")
private external fun _nGetLocalToDevice(ptr: NativePointer): FloatArray private external fun _nGetLocalToDevice(ptr: NativePointer): FloatArray
......
...@@ -28,12 +28,20 @@ class ColorFilter : RefCnt { ...@@ -28,12 +28,20 @@ class ColorFilter : RefCnt {
fun makeMatrix(matrix: ColorMatrix): ColorFilter { fun makeMatrix(matrix: ColorMatrix): ColorFilter {
Stats.onNativeCall() Stats.onNativeCall()
return ColorFilter(_nMakeMatrix(matrix.mat)) return ColorFilter(
interopScope {
_nMakeMatrix(toInterop(matrix.mat))
}
)
} }
fun makeHSLAMatrix(matrix: ColorMatrix): ColorFilter { fun makeHSLAMatrix(matrix: ColorMatrix): ColorFilter {
Stats.onNativeCall() Stats.onNativeCall()
return ColorFilter(_nMakeHSLAMatrix(matrix.mat)) return ColorFilter(
interopScope {
_nMakeHSLAMatrix(toInterop(matrix.mat))
}
)
} }
fun makeLerp(dst: ColorFilter?, src: ColorFilter?, t: Float): ColorFilter { fun makeLerp(dst: ColorFilter?, src: ColorFilter?, t: Float): ColorFilter {
...@@ -61,7 +69,11 @@ class ColorFilter : RefCnt { ...@@ -61,7 +69,11 @@ class ColorFilter : RefCnt {
fun makeTable(table: ByteArray): ColorFilter { fun makeTable(table: ByteArray): ColorFilter {
require(table.size == 256) { "Expected 256 elements, got " + table.size } require(table.size == 256) { "Expected 256 elements, got " + table.size }
return ColorFilter(_nMakeTable(table)) return ColorFilter(
interopScope {
_nMakeTable(toInterop(table))
}
)
} }
fun makeTableARGB(a: ByteArray?, r: ByteArray?, g: ByteArray?, b: ByteArray?): ColorFilter { fun makeTableARGB(a: ByteArray?, r: ByteArray?, g: ByteArray?, b: ByteArray?): ColorFilter {
...@@ -104,10 +116,10 @@ private external fun _nMakeComposed(outer: NativePointer, inner: NativePointer): ...@@ -104,10 +116,10 @@ private external fun _nMakeComposed(outer: NativePointer, inner: NativePointer):
private external fun _nMakeBlend(color: Int, blendMode: Int): NativePointer private external fun _nMakeBlend(color: Int, blendMode: Int): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeMatrix") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeMatrix")
private external fun _nMakeMatrix(rowMajor: FloatArray?): NativePointer private external fun _nMakeMatrix(rowMajor: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeHSLAMatrix") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeHSLAMatrix")
private external fun _nMakeHSLAMatrix(rowMajor: FloatArray?): NativePointer private external fun _nMakeHSLAMatrix(rowMajor: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nGetLinearToSRGBGamma") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nGetLinearToSRGBGamma")
private external fun _nGetLinearToSRGBGamma(): NativePointer private external fun _nGetLinearToSRGBGamma(): NativePointer
...@@ -125,7 +137,7 @@ private external fun _nMakeLighting(colorMul: Int, colorAdd: Int): NativePointer ...@@ -125,7 +137,7 @@ private external fun _nMakeLighting(colorMul: Int, colorAdd: Int): NativePointer
private external fun _nMakeHighContrast(grayscale: Boolean, inversionMode: Int, contrast: Float): NativePointer private external fun _nMakeHighContrast(grayscale: Boolean, inversionMode: Int, contrast: Float): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeTable") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeTable")
private external fun _nMakeTable(table: ByteArray?): NativePointer private external fun _nMakeTable(table: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeOverdraw") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeOverdraw")
private external fun _nMakeOverdraw(c0: Int, c1: Int, c2: Int, c3: Int, c4: Int, c5: Int): NativePointer private external fun _nMakeOverdraw(c0: Int, c1: Int, c2: Int, c3: Int, c4: Int, c5: Int): NativePointer
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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.Managed
import org.jetbrains.skia.impl.Native
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.reachabilityBarrier
/** /**
* Data holds an immutable data buffer. * Data holds an immutable data buffer.
...@@ -16,7 +11,11 @@ class Data internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -16,7 +11,11 @@ class Data internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
companion object { companion object {
fun makeFromBytes(bytes: ByteArray, offset: Long = 0L, length: Long = bytes.size.toLong()): Data { fun makeFromBytes(bytes: ByteArray, offset: Long = 0L, length: Long = bytes.size.toLong()): Data {
Stats.onNativeCall() Stats.onNativeCall()
return Data(_nMakeFromBytes(bytes, offset, length)) return Data(
interopScope {
_nMakeFromBytes(toInterop(bytes), offset, length)
}
)
} }
/** /**
...@@ -128,7 +127,7 @@ private external fun _nEquals(ptr: NativePointer, otherPtr: NativePointer): Bool ...@@ -128,7 +127,7 @@ private external fun _nEquals(ptr: NativePointer, otherPtr: NativePointer): Bool
private external fun _nToByteBuffer(ptr: NativePointer): ByteBuffer private external fun _nToByteBuffer(ptr: NativePointer): ByteBuffer
@ExternalSymbolName("org_jetbrains_skia_Data__1nMakeFromBytes") @ExternalSymbolName("org_jetbrains_skia_Data__1nMakeFromBytes")
private external fun _nMakeFromBytes(bytes: ByteArray?, offset: Long, length: Long): NativePointer private external fun _nMakeFromBytes(bytes: InteropPointer, offset: Long, length: Long): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Data__1nMakeFromFileName") @ExternalSymbolName("org_jetbrains_skia_Data__1nMakeFromFileName")
private external fun _nMakeFromFileName(path: String?): NativePointer private external fun _nMakeFromFileName(path: String?): NativePointer
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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
/** /**
* *
...@@ -52,11 +48,13 @@ abstract class Drawable : RefCnt(Drawable_nMake()) { ...@@ -52,11 +48,13 @@ abstract class Drawable : RefCnt(Drawable_nMake()) {
fun draw(canvas: Canvas?, matrix: Matrix33?): Drawable { fun draw(canvas: Canvas?, matrix: Matrix33?): Drawable {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nDraw( _nDraw(
_ptr, _ptr,
getPtr(canvas), getPtr(canvas),
matrix?.mat toInterop(matrix?.mat)
) )
}
this this
} finally { } finally {
reachabilityBarrier(canvas) reachabilityBarrier(canvas)
...@@ -136,7 +134,7 @@ private external fun Drawable_nMake(): NativePointer ...@@ -136,7 +134,7 @@ private external fun Drawable_nMake(): NativePointer
private external fun Drawable_nGetGenerationId(ptr: NativePointer): Int private external fun Drawable_nGetGenerationId(ptr: NativePointer): Int
@ExternalSymbolName("org_jetbrains_skia_Drawable__1nDraw") @ExternalSymbolName("org_jetbrains_skia_Drawable__1nDraw")
private external fun _nDraw(ptr: NativePointer, canvasPtr: NativePointer, matrix: FloatArray?) private external fun _nDraw(ptr: NativePointer, canvasPtr: NativePointer, matrix: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_Drawable__1nMakePictureSnapshot") @ExternalSymbolName("org_jetbrains_skia_Drawable__1nMakePictureSnapshot")
private external fun _nMakePictureSnapshot(ptr: NativePointer): NativePointer private external fun _nMakePictureSnapshot(ptr: NativePointer): NativePointer
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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 Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInfo { class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInfo {
companion object { companion object {
...@@ -34,15 +30,17 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf ...@@ -34,15 +30,17 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
fun makeRaster(imageInfo: ImageInfo, bytes: ByteArray, rowBytes: NativePointer): Image { fun makeRaster(imageInfo: ImageInfo, bytes: ByteArray, rowBytes: NativePointer): Image {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
val ptr = _nMakeRaster( val ptr = interopScope {
_nMakeRaster(
imageInfo.width, imageInfo.width,
imageInfo.height, imageInfo.height,
imageInfo.colorInfo.colorType.ordinal, imageInfo.colorInfo.colorType.ordinal,
imageInfo.colorInfo.alphaType.ordinal, imageInfo.colorInfo.alphaType.ordinal,
getPtr(imageInfo.colorInfo.colorSpace), getPtr(imageInfo.colorInfo.colorSpace),
bytes, toInterop(bytes),
rowBytes rowBytes
) )
}
if (ptr == NullPointer) throw RuntimeException("Failed to makeRaster $imageInfo $bytes $rowBytes") if (ptr == NullPointer) throw RuntimeException("Failed to makeRaster $imageInfo $bytes $rowBytes")
Image(ptr) Image(ptr)
} finally { } finally {
...@@ -136,7 +134,9 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf ...@@ -136,7 +134,9 @@ 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 = _nMakeFromEncoded(bytes) val ptr = interopScope {
_nMakeFromEncoded(toInterop(bytes))
}
require(ptr != NullPointer) { "Failed to Image::makeFromEncoded" } require(ptr != NullPointer) { "Failed to Image::makeFromEncoded" }
return Image(ptr) return Image(ptr)
} }
...@@ -229,13 +229,15 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf ...@@ -229,13 +229,15 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
Shader( Shader(
interopScope {
Image_nMakeShader( Image_nMakeShader(
_ptr, _ptr,
tmx.ordinal, tmx.ordinal,
tmy.ordinal, tmy.ordinal,
sampling._pack(), sampling._pack(),
localMatrix?.mat toInterop(localMatrix?.mat)
) )
}
) )
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
...@@ -370,7 +372,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf ...@@ -370,7 +372,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
private external fun Image_nGetImageInfo(ptr: NativePointer): ImageInfo? private external fun Image_nGetImageInfo(ptr: NativePointer): ImageInfo?
@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: FloatArray?): NativePointer private external fun Image_nMakeShader(ptr: NativePointer, tmx: Int, tmy: Int, samplingMode: Long, localMatrix: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Image__1nPeekPixels") @ExternalSymbolName("org_jetbrains_skia_Image__1nPeekPixels")
private external fun Image_nPeekPixels(ptr: NativePointer): ByteBuffer? private external fun Image_nPeekPixels(ptr: NativePointer): ByteBuffer?
...@@ -382,7 +384,7 @@ private external fun _nMakeRaster( ...@@ -382,7 +384,7 @@ private external fun _nMakeRaster(
colorType: Int, colorType: Int,
alphaType: Int, alphaType: Int,
colorSpacePtr: NativePointer, colorSpacePtr: NativePointer,
pixels: ByteArray?, pixels: InteropPointer,
rowBytes: NativePointer rowBytes: NativePointer
): NativePointer ): NativePointer
...@@ -406,7 +408,7 @@ private external fun _nMakeFromBitmap(bitmapPtr: NativePointer): NativePointer ...@@ -406,7 +408,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: ByteArray?): NativePointer private external fun _nMakeFromEncoded(bytes: InteropPointer): 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
......
...@@ -274,10 +274,11 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -274,10 +274,11 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
ImageFilter( ImageFilter(
interopScope {
_nMakeMatrixConvolution( _nMakeMatrixConvolution(
kernelW, kernelW,
kernelH, kernelH,
kernel, toInterop(kernel),
gain, gain,
bias, bias,
offsetX, offsetX,
...@@ -287,6 +288,7 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -287,6 +288,7 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
getPtr(input), getPtr(input),
crop crop
) )
}
) )
} finally { } finally {
reachabilityBarrier(input) reachabilityBarrier(input)
...@@ -297,11 +299,13 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -297,11 +299,13 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
ImageFilter( ImageFilter(
interopScope {
_nMakeMatrixTransform( _nMakeMatrixTransform(
matrix.mat, toInterop(matrix.mat),
mode._pack(), mode._pack(),
getPtr(input) getPtr(input)
) )
}
) )
} finally { } finally {
reachabilityBarrier(input) reachabilityBarrier(input)
...@@ -701,7 +705,7 @@ private external fun _nMakeMagnifier( ...@@ -701,7 +705,7 @@ private external fun _nMakeMagnifier(
private external fun _nMakeMatrixConvolution( private external fun _nMakeMatrixConvolution(
kernelW: Int, kernelW: Int,
kernelH: Int, kernelH: Int,
kernel: FloatArray?, kernel: InteropPointer,
gain: Float, gain: Float,
bias: Float, bias: Float,
offsetX: Int, offsetX: Int,
...@@ -713,7 +717,7 @@ private external fun _nMakeMatrixConvolution( ...@@ -713,7 +717,7 @@ private external fun _nMakeMatrixConvolution(
): NativePointer ): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ImageFilter__1nMakeMatrixTransform") @ExternalSymbolName("org_jetbrains_skia_ImageFilter__1nMakeMatrixTransform")
private external fun _nMakeMatrixTransform(matrix: FloatArray?, samplingMode: Long, input: NativePointer): NativePointer private external fun _nMakeMatrixTransform(matrix: InteropPointer, samplingMode: Long, input: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ImageFilter__1nMakeMerge") @ExternalSymbolName("org_jetbrains_skia_ImageFilter__1nMakeMerge")
private external fun _nMakeMerge(filters: InteropPointer, crop: IRect?): NativePointer private external fun _nMakeMerge(filters: InteropPointer, crop: IRect?): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ImageFilter__1nMakeOffset") @ExternalSymbolName("org_jetbrains_skia_ImageFilter__1nMakeOffset")
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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 MaskFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { class MaskFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object { companion object {
...@@ -26,7 +22,11 @@ class MaskFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -26,7 +22,11 @@ class MaskFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
fun makeTable(table: ByteArray?): MaskFilter { fun makeTable(table: ByteArray?): MaskFilter {
Stats.onNativeCall() Stats.onNativeCall()
return MaskFilter(MaskFilter_nMakeTable(table)) return MaskFilter(
interopScope {
MaskFilter_nMakeTable(toInterop(table))
}
)
} }
fun makeGamma(gamma: Float): MaskFilter { fun makeGamma(gamma: Float): MaskFilter {
...@@ -46,7 +46,7 @@ class MaskFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -46,7 +46,7 @@ class MaskFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
} }
@ExternalSymbolName("org_jetbrains_skia_MaskFilter__1nMakeTable") @ExternalSymbolName("org_jetbrains_skia_MaskFilter__1nMakeTable")
private external fun MaskFilter_nMakeTable(table: ByteArray?): NativePointer private external fun MaskFilter_nMakeTable(table: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_MaskFilter__1nMakeBlur") @ExternalSymbolName("org_jetbrains_skia_MaskFilter__1nMakeBlur")
private external fun _nMakeBlur(mode: Int, sigma: Float, respectCTM: Boolean): NativePointer private external fun _nMakeBlur(mode: Int, sigma: Float, respectCTM: Boolean): NativePointer
......
...@@ -193,7 +193,11 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -193,7 +193,11 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
*/ */
fun makeFromBytes(data: ByteArray?): Path { fun makeFromBytes(data: ByteArray?): Path {
Stats.onNativeCall() Stats.onNativeCall()
return Path(_nMakeFromBytes(data)) return Path(
interopScope {
_nMakeFromBytes(toInterop(data))
}
)
} }
init { init {
...@@ -640,7 +644,9 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -640,7 +644,9 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
require(if (verbs == null) max == 0 else true) require(if (verbs == null) max == 0 else true)
Stats.onNativeCall() Stats.onNativeCall()
val out = if (verbs == null) null else ByteArray(max) val out = if (verbs == null) null else ByteArray(max)
val count = _nGetVerbs(_ptr, out, max) val count = interopScope {
_nGetVerbs(_ptr, toInterop(out), max)
}
if (verbs != null) for (i in 0 until minOf(count, max)) verbs[i] = PathVerb.values().get( if (verbs != null) for (i in 0 until minOf(count, max)) verbs[i] = PathVerb.values().get(
out!![i].toInt() out!![i].toInt()
) )
...@@ -1668,7 +1674,9 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -1668,7 +1674,9 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
fun addPoly(pts: FloatArray, close: Boolean): Path { fun addPoly(pts: FloatArray, close: Boolean): Path {
require(pts.size % 2 == 0) { "Expected even amount of pts, got " + pts.size } require(pts.size % 2 == 0) { "Expected even amount of pts, got " + pts.size }
Stats.onNativeCall() Stats.onNativeCall()
_nAddPoly(_ptr, pts, close) interopScope {
_nAddPoly(_ptr, toInterop(pts), close)
}
return this return this
} }
/** /**
...@@ -1782,12 +1790,14 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -1782,12 +1790,14 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
fun addPath(src: Path?, matrix: Matrix33, extend: Boolean = false): Path { fun addPath(src: Path?, matrix: Matrix33, extend: Boolean = false): Path {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nAddPathTransform( _nAddPathTransform(
_ptr, _ptr,
getPtr(src), getPtr(src),
matrix.mat, toInterop(matrix.mat),
extend extend
) )
}
this this
} finally { } finally {
reachabilityBarrier(src) reachabilityBarrier(src)
...@@ -1888,12 +1898,14 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -1888,12 +1898,14 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
fun transform(matrix: Matrix33, dst: Path? = null, applyPerspectiveClip: Boolean = true): Path { fun transform(matrix: Matrix33, dst: Path? = null, applyPerspectiveClip: Boolean = true): Path {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nTransform( _nTransform(
_ptr, _ptr,
matrix.mat, toInterop(matrix.mat),
getPtr(dst), getPtr(dst),
applyPerspectiveClip applyPerspectiveClip
) )
}
this this
} finally { } finally {
reachabilityBarrier(dst) reachabilityBarrier(dst)
...@@ -2220,7 +2232,7 @@ private external fun _nGetPoints(ptr: NativePointer, points: Array<Point?>?, max ...@@ -2220,7 +2232,7 @@ private external fun _nGetPoints(ptr: NativePointer, points: Array<Point?>?, max
private external fun _nCountVerbs(ptr: NativePointer): Int private external fun _nCountVerbs(ptr: NativePointer): Int
@ExternalSymbolName("org_jetbrains_skia_Path__1nGetVerbs") @ExternalSymbolName("org_jetbrains_skia_Path__1nGetVerbs")
private external fun _nGetVerbs(ptr: NativePointer, verbs: ByteArray?, max: Int): Int private external fun _nGetVerbs(ptr: NativePointer, verbs: InteropPointer, max: Int): Int
@ExternalSymbolName("org_jetbrains_skia_Path__1nApproximateBytesUsed") @ExternalSymbolName("org_jetbrains_skia_Path__1nApproximateBytesUsed")
private external fun _nApproximateBytesUsed(ptr: NativePointer): NativePointer private external fun _nApproximateBytesUsed(ptr: NativePointer): NativePointer
...@@ -2358,7 +2370,7 @@ private external fun _nAddRRect( ...@@ -2358,7 +2370,7 @@ private external fun _nAddRRect(
@ExternalSymbolName("org_jetbrains_skia_Path__1nAddPoly") @ExternalSymbolName("org_jetbrains_skia_Path__1nAddPoly")
private external fun _nAddPoly(ptr: NativePointer, coords: FloatArray?, close: Boolean) private external fun _nAddPoly(ptr: NativePointer, coords: InteropPointer, close: Boolean)
@ExternalSymbolName("org_jetbrains_skia_Path__1nAddPath") @ExternalSymbolName("org_jetbrains_skia_Path__1nAddPath")
private external fun _nAddPath(ptr: NativePointer, srcPtr: NativePointer, extend: Boolean) private external fun _nAddPath(ptr: NativePointer, srcPtr: NativePointer, extend: Boolean)
...@@ -2367,7 +2379,7 @@ private external fun _nAddPath(ptr: NativePointer, srcPtr: NativePointer, extend ...@@ -2367,7 +2379,7 @@ private external fun _nAddPath(ptr: NativePointer, srcPtr: NativePointer, extend
private external fun _nAddPathOffset(ptr: NativePointer, srcPtr: NativePointer, dx: Float, dy: Float, extend: Boolean) private external fun _nAddPathOffset(ptr: NativePointer, srcPtr: NativePointer, dx: Float, dy: Float, extend: Boolean)
@ExternalSymbolName("org_jetbrains_skia_Path__1nAddPathTransform") @ExternalSymbolName("org_jetbrains_skia_Path__1nAddPathTransform")
private external fun _nAddPathTransform(ptr: NativePointer, srcPtr: NativePointer, matrix: FloatArray?, extend: Boolean) private external fun _nAddPathTransform(ptr: NativePointer, srcPtr: NativePointer, matrix: InteropPointer, extend: Boolean)
@ExternalSymbolName("org_jetbrains_skia_Path__1nReverseAddPath") @ExternalSymbolName("org_jetbrains_skia_Path__1nReverseAddPath")
private external fun _nReverseAddPath(ptr: NativePointer, srcPtr: NativePointer) private external fun _nReverseAddPath(ptr: NativePointer, srcPtr: NativePointer)
...@@ -2376,7 +2388,7 @@ private external fun _nReverseAddPath(ptr: NativePointer, srcPtr: NativePointer) ...@@ -2376,7 +2388,7 @@ private external fun _nReverseAddPath(ptr: NativePointer, srcPtr: NativePointer)
private external fun _nOffset(ptr: NativePointer, dx: Float, dy: Float, dst: NativePointer) private external fun _nOffset(ptr: NativePointer, dx: Float, dy: Float, dst: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_Path__1nTransform") @ExternalSymbolName("org_jetbrains_skia_Path__1nTransform")
private external fun _nTransform(ptr: NativePointer, matrix: FloatArray?, dst: NativePointer, applyPerspectiveClip: Boolean) private external fun _nTransform(ptr: NativePointer, matrix: InteropPointer, dst: NativePointer, applyPerspectiveClip: Boolean)
@ExternalSymbolName("org_jetbrains_skia_Path__1nGetLastPt") @ExternalSymbolName("org_jetbrains_skia_Path__1nGetLastPt")
private external fun _nGetLastPt(ptr: NativePointer): Point private external fun _nGetLastPt(ptr: NativePointer): Point
...@@ -2403,7 +2415,7 @@ private external fun _nSerializeToBytes(ptr: NativePointer): ByteArray ...@@ -2403,7 +2415,7 @@ private external fun _nSerializeToBytes(ptr: NativePointer): ByteArray
private external fun _nMakeCombining(onePtr: NativePointer, twoPtr: NativePointer, op: Int): NativePointer private external fun _nMakeCombining(onePtr: NativePointer, twoPtr: NativePointer, op: Int): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Path__1nMakeFromBytes") @ExternalSymbolName("org_jetbrains_skia_Path__1nMakeFromBytes")
private external fun _nMakeFromBytes(data: ByteArray?): NativePointer private external fun _nMakeFromBytes(data: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Path__1nIsValid") @ExternalSymbolName("org_jetbrains_skia_Path__1nIsValid")
private external fun _nIsValid(ptr: NativePointer): Boolean private external fun _nIsValid(ptr: NativePointer): Boolean
\ No newline at end of file
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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 PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object { companion object {
...@@ -30,10 +26,12 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -30,10 +26,12 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
PathEffect( PathEffect(
interopScope {
_nMakePath2D( _nMakePath2D(
matrix.mat, toInterop(matrix.mat),
getPtr(path) getPtr(path)
) )
}
) )
} finally { } finally {
reachabilityBarrier(path) reachabilityBarrier(path)
...@@ -42,7 +40,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -42,7 +40,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
fun makeLine2D(width: Float, matrix: Matrix33): PathEffect { fun makeLine2D(width: Float, matrix: Matrix33): PathEffect {
Stats.onNativeCall() Stats.onNativeCall()
return PathEffect(_nMakeLine2D(width, matrix.mat)) return PathEffect(
interopScope {
_nMakeLine2D(width, toInterop(matrix.mat))
}
)
} }
fun makeCorner(radius: Float): PathEffect { fun makeCorner(radius: Float): PathEffect {
...@@ -52,7 +54,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -52,7 +54,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
fun makeDash(intervals: FloatArray?, phase: Float): PathEffect { fun makeDash(intervals: FloatArray?, phase: Float): PathEffect {
Stats.onNativeCall() Stats.onNativeCall()
return PathEffect(_nMakeDash(intervals, phase)) return PathEffect(
interopScope {
_nMakeDash(toInterop(intervals), phase)
}
)
} }
fun makeDiscrete(segLength: Float, dev: Float, seed: Int): PathEffect { fun makeDiscrete(segLength: Float, dev: Float, seed: Int): PathEffect {
...@@ -107,16 +113,16 @@ private external fun _nMakeSum(firstPtr: NativePointer, secondPtr: NativePointer ...@@ -107,16 +113,16 @@ private external fun _nMakeSum(firstPtr: NativePointer, secondPtr: NativePointer
private external fun _nMakePath1D(pathPtr: NativePointer, advance: Float, phase: Float, style: Int): NativePointer private external fun _nMakePath1D(pathPtr: NativePointer, advance: Float, phase: Float, style: Int): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakePath2D") @ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakePath2D")
private external fun _nMakePath2D(matrix: FloatArray?, pathPtr: NativePointer): NativePointer private external fun _nMakePath2D(matrix: InteropPointer, pathPtr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeLine2D") @ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeLine2D")
private external fun _nMakeLine2D(width: Float, matrix: FloatArray?): NativePointer private external fun _nMakeLine2D(width: Float, matrix: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeCorner") @ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeCorner")
private external fun _nMakeCorner(radius: Float): NativePointer private external fun _nMakeCorner(radius: Float): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDash") @ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDash")
private external fun _nMakeDash(intervals: FloatArray?, phase: Float): NativePointer private external fun _nMakeDash(intervals: InteropPointer, phase: Float): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDiscrete") @ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDiscrete")
private external fun _nMakeDiscrete(segLength: Float, dev: Float, seed: Int): NativePointer private external fun _nMakeDiscrete(segLength: Float, dev: Float, seed: Int): NativePointer
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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 Picture internal constructor(ptr: NativePointer) : RefCnt(ptr) { class Picture internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object { companion object {
...@@ -212,7 +208,11 @@ class Picture internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -212,7 +208,11 @@ class Picture internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
val arr = localMatrix?.mat val arr = localMatrix?.mat
Shader(_nMakeShader(_ptr, tmx.ordinal, tmy.ordinal, mode.ordinal, arr, tileRect)) Shader(
interopScope {
_nMakeShader(_ptr, tmx.ordinal, tmy.ordinal, mode.ordinal, toInterop(arr), tileRect)
}
)
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
} }
...@@ -250,6 +250,6 @@ private external fun _nMakeShader( ...@@ -250,6 +250,6 @@ private external fun _nMakeShader(
tmx: Int, tmx: Int,
tmy: Int, tmy: Int,
filterMode: Int, filterMode: Int,
localMatrix: FloatArray?, localMatrix: InteropPointer,
tileRect: Rect? tileRect: Rect?
): NativePointer ): NativePointer
...@@ -2,12 +2,8 @@ ...@@ -2,12 +2,8 @@
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.Managed
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.reachabilityBarrier
class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) { class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) {
companion object { companion object {
...@@ -113,7 +109,9 @@ class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) { ...@@ -113,7 +109,9 @@ class Region : Managed(Region_nMake(), _FinalizerHolder.PTR) {
arr[i * 4 + 3] = rects[i].bottom arr[i * 4 + 3] = rects[i].bottom
} }
Stats.onNativeCall() Stats.onNativeCall()
_nSetRects(_ptr, arr) interopScope {
_nSetRects(_ptr, toInterop(arr))
}
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
} }
...@@ -360,7 +358,7 @@ private external fun _nSetEmpty(ptr: NativePointer): Boolean ...@@ -360,7 +358,7 @@ private external fun _nSetEmpty(ptr: NativePointer): Boolean
private external fun _nSetRect(ptr: NativePointer, left: Int, top: Int, right: Int, bottom: Int): Boolean private external fun _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 _nSetRects(ptr: NativePointer, rects: IntArray?): Boolean private external fun _nSetRects(ptr: NativePointer, rects: InteropPointer): Boolean
@ExternalSymbolName("org_jetbrains_skia_Region__1nSetRegion") @ExternalSymbolName("org_jetbrains_skia_Region__1nSetRegion")
private external fun _nSetRegion(ptr: NativePointer, regionPtr: NativePointer): Boolean private external fun _nSetRegion(ptr: NativePointer, regionPtr: NativePointer): Boolean
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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 Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object { companion object {
...@@ -41,17 +37,19 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -41,17 +37,19 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
return Shader( return Shader(
interopScope {
_nMakeLinearGradient( _nMakeLinearGradient(
x0, x0,
y0, y0,
x1, x1,
y1, y1,
colors, toInterop(colors),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} }
...@@ -80,18 +78,20 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -80,18 +78,20 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
Shader( Shader(
interopScope {
_nMakeLinearGradientCS( _nMakeLinearGradientCS(
x0, x0,
y0, y0,
x1, x1,
y1, y1,
Color4f.flattenArray(colors), toInterop(Color4f.flattenArray(colors)),
getPtr(cs), getPtr(cs),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} finally { } finally {
reachabilityBarrier(cs) reachabilityBarrier(cs)
...@@ -128,16 +128,18 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -128,16 +128,18 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
return Shader( return Shader(
interopScope {
_nMakeRadialGradient( _nMakeRadialGradient(
x, x,
y, y,
r, r,
colors, toInterop(colors),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} }
...@@ -165,17 +167,19 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -165,17 +167,19 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
Shader( Shader(
interopScope {
_nMakeRadialGradientCS( _nMakeRadialGradientCS(
x, x,
y, y,
r, r,
Color4f.flattenArray(colors), toInterop(Color4f.flattenArray(colors)),
getPtr(cs), getPtr(cs),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} finally { } finally {
reachabilityBarrier(cs) reachabilityBarrier(cs)
...@@ -224,6 +228,7 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -224,6 +228,7 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
return Shader( return Shader(
interopScope {
_nMakeTwoPointConicalGradient( _nMakeTwoPointConicalGradient(
x0, x0,
y0, y0,
...@@ -231,12 +236,13 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -231,12 +236,13 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
x1, x1,
y1, y1,
r1, r1,
colors, toInterop(colors),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} }
...@@ -269,6 +275,7 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -269,6 +275,7 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
Shader( Shader(
interopScope {
_nMakeTwoPointConicalGradientCS( _nMakeTwoPointConicalGradientCS(
x0, x0,
y0, y0,
...@@ -276,13 +283,14 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -276,13 +283,14 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
x1, x1,
y1, y1,
r1, r1,
Color4f.flattenArray(colors), toInterop(Color4f.flattenArray(colors)),
getPtr(cs), getPtr(cs),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} finally { } finally {
reachabilityBarrier(cs) reachabilityBarrier(cs)
...@@ -343,17 +351,19 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -343,17 +351,19 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
return Shader( return Shader(
interopScope {
_nMakeSweepGradient( _nMakeSweepGradient(
x, x,
y, y,
startAngle, startAngle,
endAngle, endAngle,
colors, toInterop(colors),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} }
...@@ -383,18 +393,20 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -383,18 +393,20 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size } require(positions == null || colors.size == positions.size) { "colors.length " + colors.size + "!= positions.length " + positions!!.size }
Stats.onNativeCall() Stats.onNativeCall()
Shader( Shader(
interopScope {
_nMakeSweepGradientCS( _nMakeSweepGradientCS(
x, x,
y, y,
startAngle, startAngle,
endAngle, endAngle,
Color4f.flattenArray(colors), toInterop(Color4f.flattenArray(colors)),
getPtr(cs), getPtr(cs),
positions, toInterop(positions),
style.tileMode.ordinal, style.tileMode.ordinal,
style._getFlags(), style._getFlags(),
style._getMatrixArray() toInterop(style._getMatrixArray())
) )
}
) )
} finally { } finally {
reachabilityBarrier(cs) reachabilityBarrier(cs)
...@@ -459,7 +471,11 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -459,7 +471,11 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
arr[i * 2 + 1] = tiles[i].height arr[i * 2 + 1] = tiles[i].height
} }
Stats.onNativeCall() Stats.onNativeCall()
Shader(_nMakeFractalNoise(baseFrequencyX, baseFrequencyY, numOctaves, seed, arr)) Shader(
interopScope {
_nMakeFractalNoise(baseFrequencyX, baseFrequencyY, numOctaves, seed, toInterop(arr))
}
)
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
} }
...@@ -479,7 +495,11 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -479,7 +495,11 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) {
arr[i * 2 + 1] = tiles[i].height arr[i * 2 + 1] = tiles[i].height
} }
Stats.onNativeCall() Stats.onNativeCall()
Shader(_nMakeTurbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, arr)) Shader(
interopScope {
_nMakeTurbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, toInterop(arr))
}
)
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
} }
...@@ -512,11 +532,11 @@ private external fun _nMakeLinearGradient( ...@@ -512,11 +532,11 @@ private external fun _nMakeLinearGradient(
y0: Float, y0: Float,
x1: Float, x1: Float,
y1: Float, y1: Float,
colors: IntArray?, colors: InteropPointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -526,12 +546,12 @@ private external fun _nMakeLinearGradientCS( ...@@ -526,12 +546,12 @@ private external fun _nMakeLinearGradientCS(
y0: Float, y0: Float,
x1: Float, x1: Float,
y1: Float, y1: Float,
colors: FloatArray?, colors: InteropPointer,
colorSpacePtr: NativePointer, colorSpacePtr: NativePointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -540,11 +560,11 @@ private external fun _nMakeRadialGradient( ...@@ -540,11 +560,11 @@ private external fun _nMakeRadialGradient(
x: Float, x: Float,
y: Float, y: Float,
r: Float, r: Float,
colors: IntArray?, colors: InteropPointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -553,12 +573,12 @@ private external fun _nMakeRadialGradientCS( ...@@ -553,12 +573,12 @@ private external fun _nMakeRadialGradientCS(
x: Float, x: Float,
y: Float, y: Float,
r: Float, r: Float,
colors: FloatArray?, colors: InteropPointer,
colorSpacePtr: NativePointer, colorSpacePtr: NativePointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -570,11 +590,11 @@ private external fun _nMakeTwoPointConicalGradient( ...@@ -570,11 +590,11 @@ private external fun _nMakeTwoPointConicalGradient(
x1: Float, x1: Float,
y1: Float, y1: Float,
r1: Float, r1: Float,
colors: IntArray?, colors: InteropPointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -586,12 +606,12 @@ private external fun _nMakeTwoPointConicalGradientCS( ...@@ -586,12 +606,12 @@ private external fun _nMakeTwoPointConicalGradientCS(
x1: Float, x1: Float,
y1: Float, y1: Float,
r1: Float, r1: Float,
colors: FloatArray?, colors: InteropPointer,
colorSpacePtr: NativePointer, colorSpacePtr: NativePointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -601,11 +621,11 @@ private external fun _nMakeSweepGradient( ...@@ -601,11 +621,11 @@ private external fun _nMakeSweepGradient(
y: Float, y: Float,
startAngle: Float, startAngle: Float,
endAngle: Float, endAngle: Float,
colors: IntArray?, colors: InteropPointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -615,12 +635,12 @@ private external fun _nMakeSweepGradientCS( ...@@ -615,12 +635,12 @@ private external fun _nMakeSweepGradientCS(
y: Float, y: Float,
startAngle: Float, startAngle: Float,
endAngle: Float, endAngle: Float,
colors: FloatArray?, colors: InteropPointer,
colorSpacePtr: NativePointer, colorSpacePtr: NativePointer,
positions: FloatArray?, positions: InteropPointer,
tileType: Int, tileType: Int,
flags: Int, flags: Int,
matrix: FloatArray? matrix: InteropPointer
): NativePointer ): NativePointer
...@@ -630,7 +650,7 @@ private external fun _nMakeFractalNoise( ...@@ -630,7 +650,7 @@ private external fun _nMakeFractalNoise(
baseFrequencyY: Float, baseFrequencyY: Float,
numOctaves: Int, numOctaves: Int,
seed: Float, seed: Float,
tiles: IntArray? tiles: InteropPointer
): NativePointer ): NativePointer
...@@ -640,7 +660,7 @@ private external fun _nMakeTurbulence( ...@@ -640,7 +660,7 @@ private external fun _nMakeTurbulence(
baseFrequencyY: Float, baseFrequencyY: Float,
numOctaves: Int, numOctaves: Int,
seed: Float, seed: Float,
tiles: IntArray? tiles: InteropPointer
): NativePointer ): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Shader__1nMakeColor") @ExternalSymbolName("org_jetbrains_skia_Shader__1nMakeColor")
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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.Managed
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.getPtr
@ExternalSymbolName("org_jetbrains_skia_TextBlob__1nGetFinalizer") @ExternalSymbolName("org_jetbrains_skia_TextBlob__1nGetFinalizer")
...@@ -28,13 +24,13 @@ private external fun _nBounds(ptr: NativePointer): Rect ...@@ -28,13 +24,13 @@ private external fun _nBounds(ptr: NativePointer): Rect
private external fun _nGetIntercepts(ptr: NativePointer, lower: Float, upper: Float, paintPtr: NativePointer): FloatArray? private external fun _nGetIntercepts(ptr: NativePointer, lower: Float, upper: Float, paintPtr: NativePointer): FloatArray?
@ExternalSymbolName("org_jetbrains_skia_TextBlob__1nMakeFromPosH") @ExternalSymbolName("org_jetbrains_skia_TextBlob__1nMakeFromPosH")
private external fun _nMakeFromPosH(glyphs: ShortArray?, xpos: FloatArray?, ypos: Float, fontPtr: NativePointer): NativePointer private external fun _nMakeFromPosH(glyphs: InteropPointer, xpos: InteropPointer, ypos: Float, fontPtr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_TextBlob__1nMakeFromPos") @ExternalSymbolName("org_jetbrains_skia_TextBlob__1nMakeFromPos")
private external fun _nMakeFromPos(glyphs: ShortArray?, pos: FloatArray?, fontPtr: NativePointer): NativePointer private external fun _nMakeFromPos(glyphs: InteropPointer, pos: InteropPointer, fontPtr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_TextBlob__1nMakeFromRSXform") @ExternalSymbolName("org_jetbrains_skia_TextBlob__1nMakeFromRSXform")
private external fun _nMakeFromRSXform(glyphs: ShortArray?, xform: FloatArray?, fontPtr: NativePointer): NativePointer private external fun _nMakeFromRSXform(glyphs: InteropPointer, xform: InteropPointer, fontPtr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_TextBlob__1nGetGlyphs") @ExternalSymbolName("org_jetbrains_skia_TextBlob__1nGetGlyphs")
private external fun _nGetGlyphs(ptr: NativePointer): ShortArray private external fun _nGetGlyphs(ptr: NativePointer): ShortArray
...@@ -73,12 +69,14 @@ class TextBlob internal constructor(ptr: NativePointer) : Managed(ptr, _Finalize ...@@ -73,12 +69,14 @@ class TextBlob internal constructor(ptr: NativePointer) : Managed(ptr, _Finalize
return try { return try {
require(glyphs.size == xpos.size) { "glyphs.length " + glyphs.size + " != xpos.length " + xpos.size } require(glyphs.size == xpos.size) { "glyphs.length " + glyphs.size + " != xpos.length " + xpos.size }
Stats.onNativeCall() Stats.onNativeCall()
val ptr = _nMakeFromPosH( val ptr = interopScope {
glyphs, _nMakeFromPosH(
xpos, toInterop(glyphs),
toInterop(xpos),
ypos, ypos,
getPtr(font) getPtr(font)
) )
}
if (ptr == NullPointer) null else TextBlob(ptr) if (ptr == NullPointer) null else TextBlob(ptr)
} finally { } finally {
reachabilityBarrier(font) reachabilityBarrier(font)
...@@ -104,7 +102,9 @@ class TextBlob internal constructor(ptr: NativePointer) : Managed(ptr, _Finalize ...@@ -104,7 +102,9 @@ class TextBlob internal constructor(ptr: NativePointer) : Managed(ptr, _Finalize
} }
Stats.onNativeCall() Stats.onNativeCall()
val ptr = val ptr =
_nMakeFromPos(glyphs, floatPos, getPtr(font)) interopScope {
_nMakeFromPos(toInterop(glyphs), toInterop(floatPos), getPtr(font))
}
if (ptr == NullPointer) null else TextBlob(ptr) if (ptr == NullPointer) null else TextBlob(ptr)
} finally { } finally {
reachabilityBarrier(font) reachabilityBarrier(font)
...@@ -122,11 +122,13 @@ class TextBlob internal constructor(ptr: NativePointer) : Managed(ptr, _Finalize ...@@ -122,11 +122,13 @@ class TextBlob internal constructor(ptr: NativePointer) : Managed(ptr, _Finalize
floatXform[i * 4 + 3] = xform[i].ty floatXform[i * 4 + 3] = xform[i].ty
} }
Stats.onNativeCall() Stats.onNativeCall()
val ptr = _nMakeFromRSXform( val ptr = interopScope {
glyphs, _nMakeFromRSXform(
floatXform, toInterop(glyphs),
toInterop(floatXform),
getPtr(font) getPtr(font)
) )
}
if (ptr == NullPointer) null else TextBlob(ptr) if (ptr == NullPointer) null else TextBlob(ptr)
} finally { } finally {
reachabilityBarrier(font) reachabilityBarrier(font)
......
@file:Suppress("NESTED_EXTERNAL_DECLARATION") @file:Suppress("NESTED_EXTERNAL_DECLARATION")
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.Managed
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 TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) { class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) {
companion object { companion object {
...@@ -103,14 +99,16 @@ class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _F ...@@ -103,14 +99,16 @@ class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _F
fun appendRun(font: Font?, glyphs: ShortArray?, x: Float, y: Float, bounds: Rect?): TextBlobBuilder { fun appendRun(font: Font?, glyphs: ShortArray?, x: Float, y: Float, bounds: Rect?): TextBlobBuilder {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nAppendRun( _nAppendRun(
_ptr, _ptr,
getPtr(font), getPtr(font),
glyphs, toInterop(glyphs),
x, x,
y, y,
bounds bounds
) )
}
this this
} finally { } finally {
reachabilityBarrier(font) reachabilityBarrier(font)
...@@ -198,13 +196,15 @@ class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _F ...@@ -198,13 +196,15 @@ class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _F
floatPos[i * 2 + 1] = pos[i].y floatPos[i * 2 + 1] = pos[i].y
} }
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nAppendRunPos( _nAppendRunPos(
_ptr, _ptr,
getPtr(font), getPtr(font),
glyphs, toInterop(glyphs),
floatPos, toInterop(floatPos),
bounds bounds
) )
}
this this
} finally { } finally {
reachabilityBarrier(font) reachabilityBarrier(font)
...@@ -222,12 +222,14 @@ class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _F ...@@ -222,12 +222,14 @@ class TextBlobBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _F
floatXform[i * 4 + 3] = xform[i].ty floatXform[i * 4 + 3] = xform[i].ty
} }
Stats.onNativeCall() Stats.onNativeCall()
interopScope {
_nAppendRunRSXform( _nAppendRunRSXform(
_ptr, _ptr,
getPtr(font), getPtr(font),
glyphs, toInterop(glyphs),
floatXform toInterop(floatXform)
) )
}
this this
} finally { } finally {
reachabilityBarrier(font) reachabilityBarrier(font)
...@@ -250,7 +252,7 @@ private external fun TextBlobBuilder_nMake(): NativePointer ...@@ -250,7 +252,7 @@ private external fun TextBlobBuilder_nMake(): NativePointer
private external fun _nBuild(ptr: NativePointer): NativePointer private external fun _nBuild(ptr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRun") @ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRun")
private external fun _nAppendRun(ptr: NativePointer, fontPtr: NativePointer, glyphs: ShortArray?, x: Float, y: Float, bounds: Rect?) private external fun _nAppendRun(ptr: NativePointer, fontPtr: NativePointer, glyphs: InteropPointer, x: Float, y: Float, bounds: Rect?)
@ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRunPosH") @ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRunPosH")
private external fun _nAppendRunPosH( private external fun _nAppendRunPosH(
...@@ -264,7 +266,7 @@ private external fun _nAppendRunPosH( ...@@ -264,7 +266,7 @@ private external fun _nAppendRunPosH(
@ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRunPos") @ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRunPos")
private external fun _nAppendRunPos(ptr: NativePointer, fontPtr: NativePointer, glyphs: ShortArray?, pos: FloatArray?, bounds: Rect?) private external fun _nAppendRunPos(ptr: NativePointer, fontPtr: NativePointer, glyphs: InteropPointer, pos: InteropPointer, bounds: Rect?)
@ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRunRSXform") @ExternalSymbolName("org_jetbrains_skia_TextBlobBuilder__1nAppendRunRSXform")
private external fun _nAppendRunRSXform(ptr: NativePointer, fontPtr: NativePointer, glyphs: ShortArray?, xform: FloatArray?) private external fun _nAppendRunRSXform(ptr: NativePointer, fontPtr: NativePointer, glyphs: InteropPointer, xform: InteropPointer)
...@@ -42,14 +42,7 @@ expect class InteropScope() { ...@@ -42,14 +42,7 @@ expect class InteropScope() {
fun release() fun release()
} }
inline fun <T> interopScope(block: InteropScope.() -> T): T { expect inline fun <T> interopScope(block: InteropScope.() -> T): T
val scope = InteropScope()
try {
return scope.block()
} finally {
scope.release()
}
}
inline fun withResult(result: ByteArray, block: (InteropPointer) -> Unit): ByteArray = interopScope { inline fun withResult(result: ByteArray, block: (InteropPointer) -> Unit): ByteArray = interopScope {
val handle = toInterop(result) val handle = toInterop(result)
......
...@@ -27,6 +27,15 @@ actual fun reachabilityBarrier(obj: Any?) { ...@@ -27,6 +27,15 @@ actual fun reachabilityBarrier(obj: Any?) {
actual typealias NativePointer = Int actual typealias NativePointer = Int
actual typealias InteropPointer = Int actual typealias InteropPointer = Int
actual inline fun <T> interopScope(block: InteropScope.() -> T): T {
val scope = InteropScope()
try {
return scope.block()
} finally {
scope.release()
}
}
actual class InteropScope actual constructor() { actual class InteropScope actual constructor() {
private val elements = mutableListOf<NativePointer>() private val elements = mutableListOf<NativePointer>()
......
...@@ -50,7 +50,12 @@ actual typealias NativePointer = Long ...@@ -50,7 +50,12 @@ actual typealias NativePointer = Long
actual typealias InteropPointer = Any? actual typealias InteropPointer = Any?
actual class InteropScope actual constructor() { object theScope: InteropScope()
actual inline fun <T> interopScope(block: InteropScope.() -> T): T {
return theScope.block()
}
actual open class InteropScope actual constructor() {
actual fun toInterop(string: String?): InteropPointer = string actual fun toInterop(string: String?): InteropPointer = string
actual fun InteropPointer.fromInterop(result: CharArray) {} actual fun InteropPointer.fromInterop(result: CharArray) {}
actual fun toInterop(array: ByteArray?): InteropPointer = array actual fun toInterop(array: ByteArray?): InteropPointer = array
......
...@@ -32,6 +32,15 @@ actual fun reachabilityBarrier(obj: Any?) { ...@@ -32,6 +32,15 @@ actual fun reachabilityBarrier(obj: Any?) {
// TODO: implement native barrier // TODO: implement native barrier
} }
actual inline fun <T> interopScope(block: InteropScope.() -> T): T {
val scope = InteropScope()
try {
return scope.block()
} finally {
scope.release()
}
}
actual class InteropScope actual constructor() { actual class InteropScope actual constructor() {
actual fun toInterop(string: String?): InteropPointer { actual fun toInterop(string: String?): InteropPointer {
return if (string != null) { return if (string != null) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment