blob: d456b7e6d53f8791b422a64d5f7730bf2f3824d9 [file] [log] [blame]
/*
* Copyright 2021 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <jni.h>
#include <string>
#include "include/core/SkBlendMode.h"
#include "include/core/SkSamplingOptions.h"
#include "include/core/SkTileMode.h"
namespace jetski {
namespace utils {
// RAII helper for jstring -> cstring conversions
class CString {
public:
CString(JNIEnv* env, const jstring& jstr)
: fEnv(env)
, fJString(jstr)
, fCString(env->GetStringUTFChars(jstr, nullptr))
{}
~CString() {
fEnv->ReleaseStringUTFChars(fJString, fCString);
}
const char* str() const { return fCString; }
operator const char*() const { return fCString; }
private:
JNIEnv* fEnv;
const jstring& fJString;
const char* fCString;
CString(CString&&) = delete;
CString(const CString&) = delete;
CString& operator=(CString&&) = delete;
CString& operator=(const CString&) = delete;
};
// RAII helper for jstring -> u16String conversions
class U16String {
public:
U16String(JNIEnv* env, const jstring& jstr)
: fEnv(env)
, fJString(jstr)
, fU16String(env->GetStringChars(jstr, nullptr))
{}
~U16String() {
fEnv->ReleaseStringChars(fJString, fU16String);
}
operator const char16_t*() const { return reinterpret_cast<const char16_t*>(fU16String); }
private:
JNIEnv* fEnv;
const jstring& fJString;
const jchar* fU16String;
U16String(U16String&&) = delete;
U16String(const U16String&) = delete;
U16String& operator=(U16String&&) = delete;
U16String& operator=(const U16String&) = delete;
};
// RAII helper for float array access
class CFloats {
public:
CFloats(JNIEnv* env, const jfloatArray& jfloats)
: fEnv(env)
, fJFloats(jfloats)
, fCFloats(env->GetFloatArrayElements(jfloats, nullptr))
{}
~CFloats() {
fEnv->ReleaseFloatArrayElements(fJFloats, fCFloats, 0);
}
operator const float*() const { return fCFloats; }
private:
JNIEnv* fEnv;
const jfloatArray& fJFloats;
float* fCFloats;
CFloats(CFloats&&) = delete;
CFloats(const CFloats&) = delete;
CFloats& operator=(CFloats&&) = delete;
CFloats& operator=(const CFloats&) = delete;
};
SkSamplingOptions SamplingOptions(jint, jfloat, jfloat);
SkTileMode TileMode(jint);
SkBlendMode BlendMode(jint);
} // namespace utils
} // namespace jetski