• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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