Unverified Commit 36c350d8 authored by Aleksandr Veselov's avatar Aleksandr Veselov Committed by GitHub

Implement native methods of InvalidationController (#339)

parent 9939833d
......@@ -2,10 +2,7 @@ package org.jetbrains.skia.sksg
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.*
import org.jetbrains.skia.impl.Managed
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.impl.*
import kotlin.jvm.JvmStatic
/**
......@@ -29,21 +26,24 @@ class InvalidationController internal constructor(ptr: NativePointer) : Managed(
fun invalidate(left: Float, top: Float, right: Float, bottom: Float, matrix: Matrix33?): InvalidationController {
Stats.onNativeCall()
InvalidationController_nInvalidate(
_ptr,
left,
top,
right,
bottom,
matrix?.mat ?: Matrix33.IDENTITY.mat
)
interopScope {
val mat = matrix?.mat ?: Matrix33.IDENTITY.mat
InvalidationController_nInvalidate(
_ptr,
left,
top,
right,
bottom,
toInterop(mat)
)
}
return this
}
val bounds: Rect
get() = try {
Stats.onNativeCall()
InvalidationController_nGetBounds(_ptr)
Rect.fromInteropPointer { InvalidationController_nGetBounds(_ptr, it) }
} finally {
reachabilityBarrier(this)
}
......@@ -61,8 +61,8 @@ private external fun InvalidationController_nGetFinalizer(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_sksg_InvalidationController_nMake")
private external fun InvalidationController_nMake(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_sksg_InvalidationController_nInvalidate")
private external fun InvalidationController_nInvalidate(ptr: NativePointer, left: Float, top: Float, right: Float, bottom: Float, matrix: FloatArray?)
private external fun InvalidationController_nInvalidate(ptr: NativePointer, left: Float, top: Float, right: Float, bottom: Float, matrix: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_sksg_InvalidationController_nGetBounds")
private external fun InvalidationController_nGetBounds(ptr: NativePointer): Rect
private external fun InvalidationController_nGetBounds(ptr: NativePointer, result: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_sksg_InvalidationController_nReset")
private external fun InvalidationController_nReset(ptr: NativePointer)
package org.jetbrains.skia.sksg
import org.jetbrains.skia.Rect
import org.jetbrains.skia.tests.assertCloseEnough
import kotlin.test.Test
import kotlin.test.assertTrue
class InvalidationControllerTest {
@Test
fun canCreateWithBounds() {
val controller = InvalidationController()
assertTrue(controller.bounds.isEmpty)
controller.invalidate(1.0f, 1.0f, 10.0f, 10.0f, null)
assertCloseEnough(Rect(1.0f, 1.0f, 10.0f, 10.0f), controller.bounds)
controller.reset()
assertTrue(controller.bounds.isEmpty)
}
}
\ No newline at end of file
......@@ -27,10 +27,10 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_sksg_InvalidationContr
instance->inval(bounds, *matrix.get());
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skia_sksg_InvalidationControllerKt_InvalidationController_1nGetBounds
(JNIEnv* env, jclass jclass, jlong ptr) {
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_sksg_InvalidationControllerKt_InvalidationController_1nGetBounds
(JNIEnv* env, jclass jclass, jlong ptr, jfloatArray result) {
InvalidationController* instance = reinterpret_cast<InvalidationController*>(static_cast<uintptr_t>(ptr));
return skija::Rect::fromSkRect(env, instance->bounds());
skija::Rect::copyToInterop(env, instance->bounds(), result);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_sksg_InvalidationControllerKt_InvalidationController_1nReset
......
#include "SkSGInvalidationController.h"
#include "common.h"
#include "../common.h"
using sksg::InvalidationController;
static void deleteInvalidationController(InvalidationController* controller) {
delete controller;
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_sksg_InvalidationController_nGetFinalizer() {
TODO("implement org_jetbrains_skia_sksg_InvalidationController_nGetFinalizer");
return reinterpret_cast<KNativePointer>(&deleteInvalidationController);
}
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nMake() {
TODO("implement org_jetbrains_skia_sksg_InvalidationController_nMake");
SKIKO_EXPORT KNativePointer org_jetbrains_skia_sksg_InvalidationController_nMake() {
InvalidationController* instance = new InvalidationController();
return reinterpret_cast<KNativePointer>(instance);
}
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nInvalidate() {
TODO("implement org_jetbrains_skia_sksg_InvalidationController_nInvalidate");
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nInvalidate
(KNativePointer ptr, KFloat left, KFloat top, KFloat right, KFloat bottom, KFloat* matrixArr) {
InvalidationController* instance = reinterpret_cast<InvalidationController*>(ptr);
SkRect bounds {left, top, right, bottom};
std::unique_ptr<SkMatrix> matrix = skMatrix(matrixArr);
instance->inval(bounds, *matrix.get());
}
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nGetBounds() {
TODO("implement org_jetbrains_skia_sksg_InvalidationController_nGetBounds");
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nGetBounds
(KNativePointer ptr, KInteropPointer result) {
InvalidationController* instance = reinterpret_cast<InvalidationController*>(ptr);
skija::Rect::copyToInterop(instance->bounds(), result);
}
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nReset() {
TODO("implement org_jetbrains_skia_sksg_InvalidationController_nReset");
SKIKO_EXPORT void org_jetbrains_skia_sksg_InvalidationController_nReset(KNativePointer ptr) {
InvalidationController* instance = reinterpret_cast<InvalidationController*>(ptr);
instance->reset();
}
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