platform/cc/Path.cc (424 lines of code) (raw):
#include <algorithm>
#include <cfloat>
#include <iostream>
#include <vector>
#include <jni.h>
#include "SkPath.h"
#include "SkPathOps.h"
#include "interop.hh"
#include "include/utils/SkParsePath.h"
static void deletePath(SkPath* path) {
// std::cout << "Deleting [SkPath " << path << "]" << std::endl;
delete path;
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Path__1nGetFinalizer(JNIEnv* env, jclass jclass) {
return static_cast<jlong>(reinterpret_cast<uintptr_t>(&deletePath));
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Path__1nMake(JNIEnv* env, jclass jclass) {
SkPath* obj = new SkPath();
return reinterpret_cast<jlong>(obj);
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Path__1nMakeFromSVGString
(JNIEnv* env, jclass jclass, jstring d) {
SkPath* obj = new SkPath();
SkString s = skString(env, d);
if (SkParsePath::FromSVGString(s.c_str(), obj))
return reinterpret_cast<jlong>(obj);
else {
delete obj;
return 0;
}
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nEquals(JNIEnv* env, jclass jclass, jlong aPtr, jlong bPtr) {
SkPath* a = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(aPtr));
SkPath* b = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(bPtr));
return *a == *b;
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsInterpolatable(JNIEnv* env, jclass jclass, jlong ptr, jlong comparePtr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* compare = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(comparePtr));
return instance->isInterpolatable(*compare);
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Path__1nMakeLerp(JNIEnv* env, jclass jclass, jlong ptr, jlong endingPtr, jfloat weight) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* ending = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(endingPtr));
SkPath* out = new SkPath();
if (instance->interpolate(*ending, weight, out)) {
return reinterpret_cast<jlong>(out);
} else {
delete out;
return 0;
}
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nGetFillMode(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return static_cast<jint>(instance->getFillType());
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nSetFillMode(JNIEnv* env, jclass jclass, jlong ptr, jint fillMode) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->setFillType(static_cast<SkPathFillType>(fillMode));
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsConvex(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->isConvex();
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Path__1nIsOval(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkRect bounds;
if (instance->isOval(&bounds))
return skija::Rect::fromSkRect(env, bounds);
else
return nullptr;
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Path__1nIsRRect(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkRRect rrect;
if (instance->isRRect(&rrect))
return skija::RRect::fromSkRRect(env, rrect);
else
return nullptr;
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nReset(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->reset();
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nRewind(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rewind();
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsEmpty(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->isEmpty();
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsLastContourClosed(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->isLastContourClosed();
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsFinite(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->isFinite();
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsVolatile(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->isVolatile();
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nSetVolatile(JNIEnv* env, jclass jclass, jlong ptr, jboolean isVolatile) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->setIsVolatile(isVolatile);
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsLineDegenerate(JNIEnv* env, jclass jclass, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jboolean exact) {
return SkPath::IsLineDegenerate({x0, y0}, {x1, y1}, exact);
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsQuadDegenerate(JNIEnv* env, jclass jclass, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jboolean exact) {
return SkPath::IsQuadDegenerate({x0, y0}, {x1, y1}, {x2, y2}, exact);
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsCubicDegenerate(JNIEnv* env, jclass jclass, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat x3, jfloat y3, jboolean exact) {
return SkPath::IsCubicDegenerate({x0, y0}, {x1, y1}, {x2, y2}, {x3, y3}, exact);
}
extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_Path__1nMaybeGetAsLine(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPoint line[2];
if (instance->isLine(line)) {
jobjectArray res = env->NewObjectArray(2, skija::Point::cls, nullptr);
env->SetObjectArrayElement(res, 0, skija::Point::fromSkPoint(env, line[0]));
env->SetObjectArrayElement(res, 1, skija::Point::fromSkPoint(env, line[1]));
return res;
} else
return nullptr;
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nGetPointsCount(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->countPoints();
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Path__1nGetPoint(JNIEnv* env, jclass jclass, jlong ptr, jint index) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPoint p = instance->getPoint(index);
return skija::Point::fromSkPoint(env, p);
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nGetPoints(JNIEnv* env, jclass jclass, jlong ptr, jobjectArray pointsArray, jint max) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
std::vector<SkPoint> p(std::min<jint>(max, instance->countPoints()));
int count = instance->getPoints(p.data(), max);
for (int i = 0; i < max && i < count; ++ i)
env->SetObjectArrayElement(pointsArray, i, skija::Point::fromSkPoint(env, p[i]));
return count;
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nCountVerbs(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->countVerbs();
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nGetVerbs(JNIEnv* env, jclass jclass, jlong ptr, jbyteArray verbsArray, jint max) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
jbyte* verbs = verbsArray == nullptr ? nullptr : env->GetByteArrayElements(verbsArray, 0);
int count = instance->getVerbs(reinterpret_cast<uint8_t *>(verbs), max);
if (verbsArray != nullptr)
env->ReleaseByteArrayElements(verbsArray, verbs, 0);
return count;
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nApproximateBytesUsed(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return (jint) instance->approximateBytesUsed();
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nSwap(JNIEnv* env, jclass jclass, jlong ptr, jlong otherPtr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* other = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(otherPtr));
instance->swap(*other);
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Path__1nGetBounds(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return skija::Rect::fromSkRect(env, instance->getBounds());
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nUpdateBoundsCache(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->updateBoundsCache();
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Path__1nComputeTightBounds(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return skija::Rect::fromSkRect(env, instance->computeTightBounds());
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nConservativelyContainsRect(JNIEnv* env, jclass jclass, jlong ptr, float l, float t, float r, float b) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkRect rect {l, t, r, b};
return instance->conservativelyContainsRect(rect);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nIncReserve(JNIEnv* env, jclass jclass, jlong ptr, int extraPtCount) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->incReserve(extraPtCount);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nMoveTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat x, jfloat y) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->moveTo(x, y);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nRMoveTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat dx, jfloat dy) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rMoveTo(dx, dy);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nLineTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat x, jfloat y) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->lineTo(x, y);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nRLineTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat dx, jfloat dy) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rLineTo(dx, dy);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nQuadTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat x1, jfloat y1, jfloat x2, jfloat y2) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->quadTo(x1, y1, x2, y2);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nRQuadTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rQuadTo(dx1, dy1, dx2, dy2);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nConicTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat w) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->conicTo(x1, y1, x2, y2, w);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nRConicTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2, jfloat w) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rConicTo(dx1, dy1, dx2, dy2, w);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nCubicTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat x3, jfloat y3) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->cubicTo(x1, y1, x2, y2, x3, y3);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nRCubicTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2, jfloat dx3, jfloat dy3) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rCubicTo(dx1, dy1, dx2, dy2, dx3, dy3);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nArcTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat startAngle, jfloat sweepAngle, jboolean forceMoveTo) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->arcTo({left, top, right, bottom}, startAngle, sweepAngle, forceMoveTo);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nTangentArcTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat radius) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->arcTo(x1, y1, x2, y2, radius);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nEllipticalArcTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat rx, jfloat ry, jfloat xAxisRotate, jint size, jint direction, jfloat x, float y) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->arcTo(rx, ry, xAxisRotate, static_cast<SkPath::ArcSize>(size), static_cast<SkPathDirection>(direction), x, y);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nREllipticalArcTo(JNIEnv* env, jclass jclass, jlong ptr, jfloat rx, jfloat ry, jfloat xAxisRotate, jint size, jint direction, jfloat dx, float dy) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->rArcTo(rx, ry, xAxisRotate, static_cast<SkPath::ArcSize>(size), static_cast<SkPathDirection>(direction), dx, dy);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nClosePath(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->close();
}
extern "C" JNIEXPORT jobjectArray Java_org_jetbrains_skija_Path__1nConvertConicToQuads
(JNIEnv* env, jclass jclass, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat w, jint pow2) {
std::vector<SkPoint> pts(1 + 2 * (1 << pow2));
int count = SkPath::ConvertConicToQuads({x0, y0}, {x1, y1}, {x2, y2}, w, pts.data(), pow2);
jobjectArray res = env->NewObjectArray(count, skija::Point::cls, nullptr);
for (int i = 0; i < count; ++i) {
env->SetObjectArrayElement(res, i, skija::Point::fromSkPoint(env, pts[i]));
}
return res;
}
extern "C" JNIEXPORT jobject Java_org_jetbrains_skija_Path__1nIsRect
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkRect rect;
if (instance->isRect(&rect))
return skija::Rect::fromSkRect(env, rect);
else
return nullptr;
}
extern "C" JNIEXPORT void Java_org_jetbrains_skija_Path__1nAddRect
(JNIEnv* env, jclass jclass, jlong ptr, jfloat l, jfloat t, jfloat r, jfloat b, jint dirInt, jint start) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPathDirection dir = static_cast<SkPathDirection>(dirInt);
instance->addRect({l, t, r, b}, dir, start);
}
extern "C" JNIEXPORT void Java_org_jetbrains_skija_Path__1nAddOval
(JNIEnv* env, jclass jclass, jlong ptr, jfloat l, jfloat t, jfloat r, jfloat b, jint dirInt, jint start) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPathDirection dir = static_cast<SkPathDirection>(dirInt);
instance->addOval({l, t, r, b}, dir, start);
}
extern "C" JNIEXPORT void Java_org_jetbrains_skija_Path__1nAddCircle
(JNIEnv* env, jclass jclass, jlong ptr, jfloat x, jfloat y, jfloat r, jint dirInt) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPathDirection dir = static_cast<SkPathDirection>(dirInt);
instance->addCircle(x, y, r, dir);
}
extern "C" JNIEXPORT void Java_org_jetbrains_skija_Path__1nAddArc
(JNIEnv* env, jclass jclass, jlong ptr, jfloat l, jfloat t, jfloat r, jfloat b, jfloat startAngle, jfloat sweepAngle) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->addArc({l, t, r, b}, startAngle, sweepAngle);
}
extern "C" JNIEXPORT void Java_org_jetbrains_skija_Path__1nAddRRect
(JNIEnv* env, jclass jclass, jlong ptr, jfloat l, jfloat t, jfloat r, jfloat b, jfloatArray radii, jint dirInt, jint start) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkRRect rrect = skija::RRect::toSkRRect(env, l, t, r, b, radii);
SkPathDirection dir = static_cast<SkPathDirection>(dirInt);
instance->addRRect(rrect, dir, start);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nAddPoly
(JNIEnv* env, jclass jclass, jlong ptr, jfloatArray coords, jboolean close) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
jsize len = env->GetArrayLength(coords);
jfloat* arr = env->GetFloatArrayElements(coords, 0);
instance->addPoly(reinterpret_cast<SkPoint*>(arr), len / 2, close);
env->ReleaseFloatArrayElements(coords, arr, 0);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nAddPath
(JNIEnv* env, jclass jclass, jlong ptr, jlong srcPtr, jboolean extend) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* src = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(srcPtr));
SkPath::AddPathMode mode = extend ? SkPath::AddPathMode::kExtend_AddPathMode : SkPath::AddPathMode::kAppend_AddPathMode;
instance->addPath(*src, mode);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nAddPathOffset
(JNIEnv* env, jclass jclass, jlong ptr, jlong srcPtr, jfloat dx, jfloat dy, jboolean extend) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* src = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(srcPtr));
SkPath::AddPathMode mode = extend ? SkPath::AddPathMode::kExtend_AddPathMode : SkPath::AddPathMode::kAppend_AddPathMode;
instance->addPath(*src, dx, dy, mode);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nAddPathTransform
(JNIEnv* env, jclass jclass, jlong ptr, jlong srcPtr, jfloatArray matrixArr, jboolean extend) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* src = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(srcPtr));
std::unique_ptr<SkMatrix> matrix = skMatrix(env, matrixArr);
SkPath::AddPathMode mode = extend ? SkPath::AddPathMode::kExtend_AddPathMode : SkPath::AddPathMode::kAppend_AddPathMode;
instance->addPath(*src, *matrix, mode);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nReverseAddPath
(JNIEnv* env, jclass jclass, jlong ptr, jlong srcPtr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* src = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(srcPtr));
instance->reverseAddPath(*src);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nOffset
(JNIEnv* env, jclass jclass, jlong ptr, jfloat dx, jfloat dy, jlong dstPtr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* dst = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(dstPtr));
instance->offset(dx, dy, dst);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nTransform
(JNIEnv* env, jclass jclass, jlong ptr, jfloatArray matrixArr, jlong dstPtr, jboolean pcBool) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPath* dst = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(dstPtr));
std::unique_ptr<SkMatrix> matrix = skMatrix(env, matrixArr);
SkApplyPerspectiveClip pc = pcBool ? SkApplyPerspectiveClip::kYes : SkApplyPerspectiveClip::kNo;
instance->transform(*matrix, dst, pc);
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Path__1nGetLastPt
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
SkPoint out;
if (instance->getLastPt(&out))
return skija::Point::fromSkPoint(env, out);
else
return nullptr;
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nSetLastPt
(JNIEnv* env, jclass jclass, jlong ptr, jfloat x, jfloat y) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->setLastPt(x, y);
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nGetSegmentMasks
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->getSegmentMasks();
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nContains
(JNIEnv* env, jclass jclass, jlong ptr, jfloat x, jfloat y) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->contains(x, y);
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nDump
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->dump();
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_Path__1nDumpHex
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
instance->dumpHex();
}
extern "C" JNIEXPORT jbyteArray JNICALL Java_org_jetbrains_skija_Path__1nSerializeToBytes
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
size_t count = instance->writeToMemory(nullptr);
jbyteArray bytesArray = env->NewByteArray((jsize) count);
jbyte* bytes = env->GetByteArrayElements(bytesArray, 0);
instance->writeToMemory(bytes);
env->ReleaseByteArrayElements(bytesArray, bytes, 0);
return bytesArray;
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Path__1nMakeCombining
(JNIEnv* env, jclass jclass, jlong aPtr, jlong bPtr, jint jop) {
SkPath* a = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(aPtr));
SkPath* b = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(bPtr));
SkPathOp op = static_cast<SkPathOp>(jop);
auto res = std::make_unique<SkPath>();
if (Op(*a, *b, op, res.get()))
return reinterpret_cast<jlong>(res.release());
else
return 0;
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Path__1nMakeFromBytes
(JNIEnv* env, jclass jclass, jbyteArray bytesArray) {
SkPath* instance = new SkPath();
int count = env->GetArrayLength(bytesArray);
jbyte* bytes = env->GetByteArrayElements(bytesArray, 0);
if (instance->readFromMemory(bytes, count)) {
env->ReleaseByteArrayElements(bytesArray, bytes, 0);
return reinterpret_cast<jlong>(instance);
} else {
env->ReleaseByteArrayElements(bytesArray, bytes, 0);
delete instance;
return 0;
}
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Path__1nGetGenerationId
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->getGenerationID();
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Path__1nIsValid
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPath* instance = reinterpret_cast<SkPath*>(static_cast<uintptr_t>(ptr));
return instance->isValid();
}