platform/cc/interop.hh (313 lines of code) (raw):
#pragma once
#include <iostream>
#include <jni.h>
#include <memory>
#include <vector>
#include "SkCodec.h"
#include "SkFontMetrics.h"
#include "SkFontStyle.h"
#include "SkImageInfo.h"
#include "SkMatrix.h"
#include "SkM44.h"
#include "SkPaint.h"
#include "SkRefCnt.h"
#include "SkRect.h"
#include "SkRRect.h"
#include "SkScalar.h"
#include "SkShaper.h"
#include "SkString.h"
#include "SkSurfaceProps.h"
namespace java {
namespace io {
namespace OutputStream {
extern jmethodID write;
extern jmethodID flush;
void onLoad(JNIEnv* env);
}
}
namespace lang {
namespace Float {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace RuntimeException {
extern jclass cls;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace String {
extern jclass cls;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace Throwable {
extern jmethodID printStackTrace;
void onLoad(JNIEnv* env);
bool exceptionThrown(JNIEnv* env);
}
}
namespace util {
namespace Iterator {
extern jclass cls;
extern jmethodID next;
extern jmethodID hasNext;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace function {
namespace BooleanSupplier {
extern jclass cls;
extern jmethodID apply;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
}
}
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace skija {
namespace AnimationFrameInfo {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
jobject toJava(JNIEnv* env, const SkCodec::FrameInfo& i);
}
template <typename T>
class AutoLocal {
public:
AutoLocal(JNIEnv* env, T ref): fEnv(env), fRef(ref) {
}
AutoLocal(const AutoLocal&) = delete;
AutoLocal(AutoLocal&&) = default;
AutoLocal& operator=(AutoLocal const&) = delete;
~AutoLocal() {
if (fRef)
fEnv->DeleteLocalRef(fRef);
}
T get() {
return fRef;
}
private:
JNIEnv* fEnv;
T fRef;
};
namespace Color4f {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace Drawable {
extern jclass cls;
extern jmethodID onDraw;
extern jmethodID onGetBounds;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace FontFamilyName {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace FontFeature {
extern jclass cls;
extern jmethodID ctor;
extern jfieldID tag;
extern jfieldID value;
extern jfieldID start;
extern jfieldID end;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
std::vector<SkShaper::Feature> fromJavaArray(JNIEnv* env, jobjectArray featuresArr);
}
namespace FontMetrics {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
jobject toJava(JNIEnv* env, const SkFontMetrics& m);
}
namespace FontMgr {
extern jclass cls;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace FontStyle {
SkFontStyle fromJava(jint style);
jint toJava(const SkFontStyle& fs);
}
namespace FontVariation {
extern jclass cls;
extern jmethodID ctor;
extern jfieldID tag;
extern jfieldID value;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace FontVariationAxis {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace ImageInfo {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
jobject toJava(JNIEnv* env, const SkImageInfo& imageInfo);
}
namespace IPoint {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
jobject make(JNIEnv* env, float x, float y);
jobject fromSkIPoint(JNIEnv* env, const SkIPoint& p);
}
namespace IRect {
extern jclass cls;
extern jmethodID makeLTRB;
extern jfieldID left;
extern jfieldID top;
extern jfieldID right;
extern jfieldID bottom;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
jobject fromSkIRect(JNIEnv* env, const SkIRect& rect);
std::unique_ptr<SkIRect> toSkIRect(JNIEnv* env, jobject obj);
}
namespace Path {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace PathSegment {
extern jclass cls;
extern jmethodID ctorDone;
extern jmethodID ctorMoveClose;
extern jmethodID ctorLine;
extern jmethodID ctorQuad;
extern jmethodID ctorConic;
extern jmethodID ctorCubic;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace Point {
extern jclass cls;
extern jmethodID ctor;
extern jfieldID x;
extern jfieldID y;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
jobject make(JNIEnv* env, float x, float y);
jobject fromSkPoint(JNIEnv* env, const SkPoint& p);
jobjectArray fromSkPoints(JNIEnv* env, const std::vector<SkPoint>& ps);
}
namespace PaintFilterCanvas {
extern jmethodID onFilterId;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
bool onFilter(jobject obj, SkPaint& paint);
jobject attach(JNIEnv* env, jobject obj);
void detach(jobject obj);
}
namespace Rect {
extern jclass cls;
extern jmethodID makeLTRB;
extern jfieldID left;
extern jfieldID top;
extern jfieldID right;
extern jfieldID bottom;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
std::unique_ptr<SkRect> toSkRect(JNIEnv* env, jobject rect);
jobject fromLTRB(JNIEnv* env, float left, float top, float right, float bottom);
jobject fromSkRect(JNIEnv* env, const SkRect& rect);
}
namespace RRect {
extern jclass cls;
extern jmethodID makeLTRB1;
extern jmethodID makeLTRB2;
extern jmethodID makeLTRB4;
extern jmethodID makeNinePatchLTRB;
extern jmethodID makeComplexLTRB;
extern jfieldID left;
extern jfieldID top;
extern jfieldID right;
extern jfieldID bottom;
extern jfieldID radii;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
SkRRect toSkRRect(JNIEnv* env, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloatArray jradii);
jobject fromSkRRect(JNIEnv* env, const SkRRect& rect);
}
namespace RSXform {
extern jclass cls;
extern jmethodID ctor;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
}
namespace SamplingMode {
SkSamplingOptions unpack(jlong val);
}
namespace SurfaceProps {
extern jmethodID _getFlags;
extern jmethodID _getPixelGeometryOrdinal;
void onLoad(JNIEnv* env);
std::unique_ptr<SkSurfaceProps> toSkSurfaceProps(JNIEnv* env, jobject surfacePropsObj);
}
namespace impl {
namespace Native {
extern jfieldID _ptr;
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
void* fromJava(JNIEnv* env, jobject obj, jclass cls);
}
}
void onLoad(JNIEnv* env);
void onUnload(JNIEnv* env);
class UtfIndicesConverter {
public:
UtfIndicesConverter(const char* chars8, size_t len8);
UtfIndicesConverter(const SkString& s);
const char* fStart8;
const char* fPtr8;
const char* fEnd8;
uint32_t fPos16;
size_t from16To8(uint32_t i16);
uint32_t from8To16(size_t i8);
};
}
std::unique_ptr<SkMatrix> skMatrix(JNIEnv* env, jfloatArray arr);
std::unique_ptr<SkM44> skM44(JNIEnv* env, jfloatArray arr);
SkString skString(JNIEnv* env, jstring str);
jstring javaString(JNIEnv* env, const SkString& str);
jstring javaString(JNIEnv* env, const char* chars, size_t len);
jstring javaString(JNIEnv* env, const char* chars);
jobject javaFloat(JNIEnv* env, SkScalar val);
jlong packTwoInts(int32_t a, int32_t b);
jlong packIPoint(SkIPoint p);
jlong packISize(SkISize s);
jbyteArray javaByteArray (JNIEnv* env, const std::vector<jbyte>& bytes);
jshortArray javaShortArray (JNIEnv* env, const std::vector<jshort>& shorts);
jintArray javaIntArray (JNIEnv* env, const std::vector<jint>& ints);
jlongArray javaLongArray (JNIEnv* env, const std::vector<jlong>& longs);
jfloatArray javaFloatArray (JNIEnv* env, const std::vector<float>& floats);
std::vector<SkString> skStringVector(JNIEnv* env, jobjectArray arr);
jobjectArray javaStringArray(JNIEnv* env, const std::vector<SkString>& strings);
void deleteJBytes(void* addr, void*);
template <typename T>
inline T jlongToPtr(jlong ptr) {
return reinterpret_cast<T>(static_cast<uintptr_t>(ptr));
}
template <typename T>
jlong ptrToJlong(T* ptr) {
return static_cast<jlong>(reinterpret_cast<uintptr_t>(ptr));
}