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,16 +560,18 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH ...@@ -564,16 +560,18 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
return try { return try {
_imageInfo = null _imageInfo = null
Stats.onNativeCall() Stats.onNativeCall()
_nInstallPixels( interopScope {
_ptr, _nInstallPixels(
info.width, _ptr,
info.height, info.width,
info.colorInfo.colorType.ordinal, info.height,
info.colorInfo.alphaType.ordinal, info.colorInfo.colorType.ordinal,
getPtr(info.colorInfo.colorSpace), info.colorInfo.alphaType.ordinal,
pixels, getPtr(info.colorInfo.colorSpace),
rowBytes toInterop(pixels),
) 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(
_nMakeShader( interopScope {
_ptr, _nMakeShader(
tmx.ordinal, _ptr,
tmy.ordinal, tmx.ordinal,
sampling._pack(), tmy.ordinal,
localMatrix?.mat sampling._pack(),
) 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()
_nDrawPatch( interopScope {
_ptr, _nDrawPatch(
Point.flattenArray(cubics), _ptr,
colors, toInterop(Point.flattenArray(cubics)),
Point.flattenArray(texCoords), toInterop(colors),
mode.ordinal, toInterop(Point.flattenArray(texCoords)),
getPtr(paint) mode.ordinal,
) 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()
_nDraw( interopScope {
_ptr, _nDraw(
getPtr(canvas), _ptr,
matrix?.mat getPtr(canvas),
) 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 {
imageInfo.width, _nMakeRaster(
imageInfo.height, imageInfo.width,
imageInfo.colorInfo.colorType.ordinal, imageInfo.height,
imageInfo.colorInfo.alphaType.ordinal, imageInfo.colorInfo.colorType.ordinal,
getPtr(imageInfo.colorInfo.colorSpace), imageInfo.colorInfo.alphaType.ordinal,
bytes, getPtr(imageInfo.colorInfo.colorSpace),
rowBytes toInterop(bytes),
) 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(
Image_nMakeShader( interopScope {
_ptr, Image_nMakeShader(
tmx.ordinal, _ptr,
tmy.ordinal, tmx.ordinal,
sampling._pack(), tmy.ordinal,
localMatrix?.mat sampling._pack(),
) 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,19 +274,21 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -274,19 +274,21 @@ class ImageFilter internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
ImageFilter( ImageFilter(
_nMakeMatrixConvolution( interopScope {
kernelW, _nMakeMatrixConvolution(
kernelH, kernelW,
kernel, kernelH,
gain, toInterop(kernel),
bias, gain,
offsetX, bias,
offsetY, offsetX,
tileMode.ordinal, offsetY,
convolveAlpha, tileMode.ordinal,
getPtr(input), convolveAlpha,
crop getPtr(input),
) 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(
_nMakeMatrixTransform( interopScope {
matrix.mat, _nMakeMatrixTransform(
mode._pack(), toInterop(matrix.mat),
getPtr(input) mode._pack(),
) 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()
_nAddPathTransform( interopScope {
_ptr, _nAddPathTransform(
getPtr(src), _ptr,
matrix.mat, getPtr(src),
extend toInterop(matrix.mat),
) 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()
_nTransform( interopScope {
_ptr, _nTransform(
matrix.mat, _ptr,
getPtr(dst), toInterop(matrix.mat),
applyPerspectiveClip getPtr(dst),
) 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(
_nMakePath2D( interopScope {
matrix.mat, _nMakePath2D(
getPtr(path) toInterop(matrix.mat),
) 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(
_nMakeLinearGradient( interopScope {
x0, _nMakeLinearGradient(
y0, x0,
x1, y0,
y1, x1,
colors, y1,
positions, toInterop(colors),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) 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(
_nMakeLinearGradientCS( interopScope {
x0, _nMakeLinearGradientCS(
y0, x0,
x1, y0,
y1, x1,
Color4f.flattenArray(colors), y1,
getPtr(cs), toInterop(Color4f.flattenArray(colors)),
positions, getPtr(cs),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) 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(
_nMakeRadialGradient( interopScope {
x, _nMakeRadialGradient(
y, x,
r, y,
colors, r,
positions, toInterop(colors),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) 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(
_nMakeRadialGradientCS( interopScope {
x, _nMakeRadialGradientCS(
y, x,
r, y,
Color4f.flattenArray(colors), r,
getPtr(cs), toInterop(Color4f.flattenArray(colors)),
positions, getPtr(cs),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) toInterop(style._getMatrixArray())
)
}
) )
} finally { } finally {
reachabilityBarrier(cs) reachabilityBarrier(cs)
...@@ -224,19 +228,21 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -224,19 +228,21 @@ 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(
_nMakeTwoPointConicalGradient( interopScope {
x0, _nMakeTwoPointConicalGradient(
y0, x0,
r0, y0,
x1, r0,
y1, x1,
r1, y1,
colors, r1,
positions, toInterop(colors),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) toInterop(style._getMatrixArray())
)
}
) )
} }
...@@ -269,20 +275,22 @@ class Shader internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -269,20 +275,22 @@ 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(
_nMakeTwoPointConicalGradientCS( interopScope {
x0, _nMakeTwoPointConicalGradientCS(
y0, x0,
r0, y0,
x1, r0,
y1, x1,
r1, y1,
Color4f.flattenArray(colors), r1,
getPtr(cs), toInterop(Color4f.flattenArray(colors)),
positions, getPtr(cs),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) 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(
_nMakeSweepGradient( interopScope {
x, _nMakeSweepGradient(
y, x,
startAngle, y,
endAngle, startAngle,
colors, endAngle,
positions, toInterop(colors),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) 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(
_nMakeSweepGradientCS( interopScope {
x, _nMakeSweepGradientCS(
y, x,
startAngle, y,
endAngle, startAngle,
Color4f.flattenArray(colors), endAngle,
getPtr(cs), toInterop(Color4f.flattenArray(colors)),
positions, getPtr(cs),
style.tileMode.ordinal, toInterop(positions),
style._getFlags(), style.tileMode.ordinal,
style._getMatrixArray() style._getFlags(),
) 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),
ypos, toInterop(xpos),
getPtr(font) ypos,
) 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),
getPtr(font) toInterop(floatXform),
) 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()
_nAppendRun( interopScope {
_ptr, _nAppendRun(
getPtr(font), _ptr,
glyphs, getPtr(font),
x, toInterop(glyphs),
y, x,
bounds y,
) 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()
_nAppendRunPos( interopScope {
_ptr, _nAppendRunPos(
getPtr(font), _ptr,
glyphs, getPtr(font),
floatPos, toInterop(glyphs),
bounds toInterop(floatPos),
) 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()
_nAppendRunRSXform( interopScope {
_ptr, _nAppendRunRSXform(
getPtr(font), _ptr,
glyphs, getPtr(font),
floatXform toInterop(glyphs),
) 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