platform/cc/shaper/FontMgrRunIterator.cc (33 lines of code) (raw):
#include <jni.h>
#include "../interop.hh"
#include "interop.hh"
#include "FontRunIterator.hh"
#include "SkFontMgr.h"
#include "SkShaper.h"
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_shaper_FontMgrRunIterator__1nMake
(JNIEnv* env, jclass jclass, jlong textPtr, jlong fontPtr, jobject opts) {
SkString* text = reinterpret_cast<SkString*>(static_cast<uintptr_t>(textPtr));
SkFont* font = reinterpret_cast<SkFont*>(static_cast<uintptr_t>(fontPtr));
jobject fontMgrObj = env->GetObjectField(opts, skija::shaper::ShapingOptions::_fontMgr);
sk_sp<SkFontMgr> fontMgr = fontMgrObj == nullptr
? SkFontMgr::RefDefault()
: sk_ref_sp(reinterpret_cast<SkFontMgr*>(skija::impl::Native::fromJava(env, fontMgrObj, skija::FontMgr::cls)));
std::shared_ptr<UBreakIterator> graphemeIter = skija::shaper::graphemeBreakIterator(*text);
if (!graphemeIter) return 0;
auto instance = new FontRunIterator(
text->c_str(),
text->size(),
*font,
fontMgr,
graphemeIter,
env->GetBooleanField(opts, skija::shaper::ShapingOptions::_approximateSpaces),
env->GetBooleanField(opts, skija::shaper::ShapingOptions::_approximatePunctuation)
);
return reinterpret_cast<jlong>(instance);
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_shaper_FontMgrRunIterator__1nGetCurrentFont
(JNIEnv* env, jclass jclass, jlong ptr) {
SkShaper::FontRunIterator* instance = reinterpret_cast<SkShaper::FontRunIterator*>(static_cast<uintptr_t>(ptr));
SkFont* font = new SkFont(instance->currentFont());
return reinterpret_cast<jlong>(font);
}