Unverified Commit 0e039620 authored by Ivan Matkov's avatar Ivan Matkov Committed by GitHub

Fix `PictureFilterCanvas` native bindings and add tests (#1011)

parent c22b0fcb
...@@ -32,5 +32,7 @@ class PaintFilterCanvasTest { ...@@ -32,5 +32,7 @@ class PaintFilterCanvasTest {
assertTrue(called) assertTrue(called)
assertEquals(Color.RED, pixels.getColor(2, 2)) assertEquals(Color.RED, pixels.getColor(2, 2))
surface.close()
} }
} }
\ No newline at end of file
package org.jetbrains.skia
import kotlin.test.Test
import kotlin.test.assertEquals
class PictureFilterCanvasTest {
@Test
fun canOverrideOnDrawPicture() {
val surface = Surface.makeRasterN32Premul(16, 16)
val bounds = Rect(0f, 0f, 16f, 16f)
var callCount = 0
// Prepare picture
val recorder = PictureRecorder()
val recordingCanvas = recorder.beginRecording(bounds)
val placeholder = Picture.makePlaceholder(bounds)
recordingCanvas.drawPicture(placeholder)
val picture = recorder.finishRecordingAsPicture()
// Filtering
val filterCanvas = object : PictureFilterCanvas(surface.canvas) {
override fun onDrawPicture(picture: Picture, matrix: Matrix33?, paint: Paint?): Boolean {
callCount++
drawRect(
Rect(0f, 0f, 8f, 8f),
Paint().apply { color = Color.RED }
)
return true
}
}
filterCanvas.drawPicture(picture)
filterCanvas.close()
// Render result
val pixels = Bitmap.makeFromImage(surface.makeImageSnapshot())
assertEquals(1, callCount)
assertEquals(Color.RED, pixels.getColor(2, 2))
placeholder.close()
picture.close()
recorder.close()
surface.close()
}
}
\ No newline at end of file
...@@ -37,31 +37,31 @@ protected: ...@@ -37,31 +37,31 @@ protected:
} }
}; };
SKIKO_EXPORT KNativePointer org_jetbrains_skia_SkikoPictureFilterCanvas__1nMake SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureFilterCanvas__1nMake
(SkCanvas* canvas) { (SkCanvas* canvas) {
SkikoPictureFilterCanvas* filterCanvas = new SkikoPictureFilterCanvas(canvas); SkikoPictureFilterCanvas* filterCanvas = new SkikoPictureFilterCanvas(canvas);
return reinterpret_cast<KNativePointer>(filterCanvas); return reinterpret_cast<KNativePointer>(filterCanvas);
} }
SKIKO_EXPORT void org_jetbrains_skia_SkikoPictureFilterCanvas__1nInit SKIKO_EXPORT void org_jetbrains_skia_PictureFilterCanvas__1nInit
(KNativePointer canvasPtr, KInteropPointer onDrawPicture) { (KNativePointer canvasPtr, KInteropPointer onDrawPicture) {
SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr); SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr);
canvas->_onDrawPicture = KBooleanCallback(onDrawPicture); canvas->_onDrawPicture = KBooleanCallback(onDrawPicture);
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_picture SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_picture
(KNativePointer canvasPtr) { (KNativePointer canvasPtr) {
SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr); SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr);
return reinterpret_cast<KNativePointer>(const_cast<SkPicture *>(canvas->_onDrawPicture_picture)); return reinterpret_cast<KNativePointer>(const_cast<SkPicture *>(canvas->_onDrawPicture_picture));
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_matrix SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_matrix
(KNativePointer canvasPtr) { (KNativePointer canvasPtr) {
SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr); SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr);
return reinterpret_cast<KNativePointer>(const_cast<SkMatrix *>(canvas->_onDrawPicture_matrix)); return reinterpret_cast<KNativePointer>(const_cast<SkMatrix *>(canvas->_onDrawPicture_matrix));
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_paint SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_paint
(KNativePointer canvasPtr) { (KNativePointer canvasPtr) {
SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr); SkikoPictureFilterCanvas* canvas = reinterpret_cast<SkikoPictureFilterCanvas*>(canvasPtr);
return reinterpret_cast<KNativePointer>(const_cast<SkPaint *>(canvas->_onDrawPicture_paint)); return reinterpret_cast<KNativePointer>(const_cast<SkPaint *>(canvas->_onDrawPicture_paint));
......
...@@ -21,14 +21,14 @@ internal actual fun PictureFilterCanvas.doInit(ptr: NativePointer) { ...@@ -21,14 +21,14 @@ internal actual fun PictureFilterCanvas.doInit(ptr: NativePointer) {
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureFilterCanvas__1nInit") @ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureFilterCanvas__1nInit")
internal external fun PictureFilterCanvas_nInit(ptr: NativePointer, onFilter: InteropPointer) internal external fun PictureFilterCanvas_nInit(ptr: NativePointer, onFilter: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_picture") @ExternalSymbolName("org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_picture")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_picture") @ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_picture")
internal external fun PictureFilterCanvas_nGetOnDrawPicture_picture(ptr: NativePointer): NativePointer internal external fun PictureFilterCanvas_nGetOnDrawPicture_picture(ptr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_matrix") @ExternalSymbolName("org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_matrix")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_matrix") @ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_matrix")
internal external fun PictureFilterCanvas_nGetOnDrawPicture_matrix(ptr: NativePointer): NativePointer internal external fun PictureFilterCanvas_nGetOnDrawPicture_matrix(ptr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_paint") @ExternalSymbolName("org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_paint")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_SkikoPictureFilterCanvas__1nGetOnDrawPicture_paint") @ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureFilterCanvas__1nGetOnDrawPicture_paint")
internal external fun PictureFilterCanvas_nGetOnDrawPicture_paint(ptr: NativePointer): NativePointer internal external fun PictureFilterCanvas_nGetOnDrawPicture_paint(ptr: NativePointer): NativePointer
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