platform/cc/paragraph/TextStyle.cc (255 lines of code) (raw):

#include <iostream> #include <jni.h> #include <vector> #include "../interop.hh" #include "interop.hh" #include "TextStyle.h" using namespace std; using namespace skia::textlayout; extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nMake (JNIEnv* env, jclass jclass) { TextStyle* instance = new TextStyle(); return reinterpret_cast<jlong>(instance); } static void deleteTextStyle(TextStyle* instance) { delete instance; } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetFinalizer (JNIEnv* env, jclass jclass) { return static_cast<jlong>(reinterpret_cast<uintptr_t>(&deleteTextStyle)); } extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nEquals (JNIEnv* env, jclass jclass, jlong ptr, jlong otherPtr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); TextStyle* other = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(otherPtr)); return instance->equals(*other); } extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nAttributeEquals (JNIEnv* env, jclass jclass, jlong ptr, jint attribute, jlong otherPtr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); TextStyle* other = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(otherPtr)); if (attribute == static_cast<jint>(StyleType::kWordSpacing) + 1) // FONT_EXACT return instance->equalsByFonts(*other); else return instance->matchOneAttribute(static_cast<StyleType>(attribute), *other); } extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetColor (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->getColor(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetColor (JNIEnv* env, jclass jclass, jlong ptr, jint color) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setColor(color); } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetForeground (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->hasForeground() ? reinterpret_cast<jlong>(new SkPaint(instance->getForeground())) : 0; } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetForeground (JNIEnv* env, jclass jclass, jlong ptr, jlong paintPtr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); if (paintPtr == 0) instance->clearForegroundColor(); else { SkPaint* paint = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(paintPtr)); instance->setForegroundColor(*paint); } } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetBackground (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->hasBackground() ? reinterpret_cast<jlong>(new SkPaint(instance->getBackground())) : 0; } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetBackground (JNIEnv* env, jclass jclass, jlong ptr, jlong paintPtr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); if (paintPtr == 0) instance->clearBackgroundColor(); else { SkPaint* paint = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(paintPtr)); instance->setBackgroundColor(*paint); } } extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetDecorationStyle (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); Decoration d = instance->getDecoration(); return env->NewObject(skija::paragraph::DecorationStyle::cls, skija::paragraph::DecorationStyle::ctor, (d.fType & TextDecoration::kUnderline) != 0, (d.fType & TextDecoration::kOverline) != 0, (d.fType & TextDecoration::kLineThrough) != 0, d.fMode == TextDecorationMode::kGaps, d.fColor, static_cast<jint>(d.fStyle), d.fThicknessMultiplier); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetDecorationStyle (JNIEnv* env, jclass jclass, jlong ptr, jboolean underline, jboolean overline, jboolean lineThrough, jboolean gaps, jint color, jint style, jfloat thicknessMultiplier) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); int typeMask = 0; if (underline) typeMask |= TextDecoration::kUnderline; if (overline) typeMask |= TextDecoration::kOverline; if (lineThrough) typeMask |= TextDecoration::kLineThrough; instance->setDecoration(static_cast<TextDecoration>(typeMask)); instance->setDecorationMode(gaps ? TextDecorationMode::kGaps : TextDecorationMode::kThrough); instance->setDecorationColor(color); instance->setDecorationStyle(static_cast<TextDecorationStyle>(style)); instance->setDecorationThicknessMultiplier(thicknessMultiplier); } extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetFontStyle (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return skija::FontStyle::toJava(instance->getFontStyle()); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetFontStyle (JNIEnv* env, jclass jclass, jlong ptr, jint fontStyleValue) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setFontStyle(skija::FontStyle::fromJava(fontStyleValue)); } extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetShadows (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); std::vector<TextShadow> shadows = instance->getShadows(); jobjectArray shadowsArr = env->NewObjectArray((jsize) shadows.size(), skija::paragraph::Shadow::cls, nullptr); for (int i = 0; i < shadows.size(); ++i) { const TextShadow& s = shadows[i]; skija::AutoLocal<jobject> shadowObj(env, env->NewObject(skija::paragraph::Shadow::cls, skija::paragraph::Shadow::ctor, s.fColor, s.fOffset.fX, s.fOffset.fY, s.fBlurSigma)); env->SetObjectArrayElement(shadowsArr, i, shadowObj.get()); } return shadowsArr; } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nAddShadow (JNIEnv* env, jclass jclass, jlong ptr, jint color, jfloat offsetX, jfloat offsetY, jdouble blurSigma) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->addShadow({static_cast<SkColor>(color), {offsetX, offsetY}, blurSigma}); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nClearShadows (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->resetShadows(); } extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetFontFeatures (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); std::vector<FontFeature> fontFeatures = instance->getFontFeatures(); jobjectArray fontFeaturesArr = env->NewObjectArray((jsize) fontFeatures.size(), skija::FontFeature::cls, nullptr); for (int i = 0; i < fontFeatures.size(); ++i) { const FontFeature& ff = fontFeatures[i]; auto featureObj = env->NewObject(skija::FontFeature::cls, skija::FontFeature::ctor, javaString(env, ff.fName), ff.fValue); env->SetObjectArrayElement(fontFeaturesArr, i, featureObj); env->DeleteLocalRef(featureObj); } return fontFeaturesArr; } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nAddFontFeature (JNIEnv* env, jclass jclass, jlong ptr, jstring nameStr, jint value) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->addFontFeature(skString(env, nameStr), value); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nClearFontFeatures (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->resetFontFeatures(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetFontSize (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->getFontSize(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetFontSize (JNIEnv* env, jclass jclass, jlong ptr, jfloat size) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setFontSize(size); } extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetFontFamilies (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return javaStringArray(env, instance->getFontFamilies()); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetFontFamilies (JNIEnv* env, jclass jclass, jlong ptr, jobjectArray familiesArray) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setFontFamilies(skStringVector(env, familiesArray)); } extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetHeight (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->getHeightOverride() ? javaFloat(env, instance->getHeight()) : nullptr; } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetHeight (JNIEnv* env, jclass jclass, jlong ptr, jboolean override, jfloat height) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setHeightOverride(override); instance->setHeight(height); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetLetterSpacing (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->getLetterSpacing(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetLetterSpacing (JNIEnv* env, jclass jclass, jlong ptr, jfloat letterSpacing) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setLetterSpacing(letterSpacing); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetWordSpacing (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->getWordSpacing(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetWordSpacing (JNIEnv* env, jclass jclass, jlong ptr, jfloat wordSpacing) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setWordSpacing(wordSpacing); } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetTypeface (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return reinterpret_cast<jlong>(instance->refTypeface().release()); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetTypeface (JNIEnv* env, jclass jclass, jlong ptr, jlong typefacePtr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); SkTypeface* typeface = reinterpret_cast<SkTypeface*>(static_cast<uintptr_t>(typefacePtr)); instance->setTypeface(sk_ref_sp(typeface)); } extern "C" JNIEXPORT jstring JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetLocale (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return javaString(env, instance->getLocale()); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetLocale (JNIEnv* env, jclass jclass, jlong ptr, jstring locale) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setLocale(skString(env, locale)); } extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetBaselineMode (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return static_cast<jint>(instance->getTextBaseline()); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetBaselineMode (JNIEnv* env, jclass jclass, jlong ptr, jint baselineModeValue) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setTextBaseline(static_cast<TextBaseline>(baselineModeValue)); } extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nGetFontMetrics (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); SkFontMetrics m; instance->getFontMetrics(&m); return skija::FontMetrics::toJava(env, m); } extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nIsPlaceholder (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); return instance->isPlaceholder(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_TextStyle__1nSetPlaceholder (JNIEnv* env, jclass jclass, jlong ptr) { TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); instance->setPlaceholder(); }