1 /*
2 * Copyright 2021 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include <jni.h>
9
10 #include "include/core/SkFont.h"
11 #include "include/core/SkFontMgr.h"
12 #include "modules/androidkit/src/Utils.h"
13
14 namespace {
15
16 //TODO: replace jstring fontFamily with TypeFace object. Wrap Typeface in JetSki
Font_Create(JNIEnv * env,jobject,jstring jFontFamily,float size)17 static jlong Font_Create(JNIEnv* env, jobject, jstring jFontFamily, float size) {
18 const androidkit::utils::CString cFontFamily(env, jFontFamily);
19 sk_sp<SkFontMgr> fontMgr = SkFontMgr::RefDefault();
20 sk_sp<SkTypeface> typeface = sk_sp<SkTypeface>(fontMgr->matchFamilyStyle(cFontFamily, SkFontStyle()));
21 return reinterpret_cast<jlong>(new SkFont(std::move(typeface), size));
22 }
23
Font_Release(JNIEnv *,jobject,jlong native_Font)24 static void Font_Release(JNIEnv*, jobject, jlong native_Font) {
25 delete reinterpret_cast<SkFont*>(native_Font);
26 }
27
28 } // namespace
29
register_androidkit_Font(JNIEnv * env)30 int register_androidkit_Font(JNIEnv* env) {
31 static const JNINativeMethod methods[] = {
32 {"nCreate" , "(Ljava/lang/String;F)J" , reinterpret_cast<void*>(Font_Create)},
33 {"nRelease", "(J)V" , reinterpret_cast<void*>(Font_Release)},
34 };
35
36 const auto clazz = env->FindClass("org/skia/androidkit/Font");
37 return clazz
38 ? env->RegisterNatives(clazz, methods, SK_ARRAY_COUNT(methods))
39 : JNI_ERR;
40 }
41