platform/cc/paragraph/Paragraph.cc (170 lines of code) (raw):

#include <iostream> #include <jni.h> #include "interop.hh" #include "../interop.hh" #include "DartTypes.h" #include "Paragraph.h" using namespace std; using namespace skia::textlayout; static void deleteParagraph(Paragraph* instance) { delete instance; } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetFinalizer (JNIEnv* env, jclass jclass) { return static_cast<jlong>(reinterpret_cast<uintptr_t>(&deleteParagraph)); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetMaxWidth (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getMaxWidth(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetHeight (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getHeight(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetMinIntrinsicWidth (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getMinIntrinsicWidth(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetMaxIntrinsicWidth (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getMaxIntrinsicWidth(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetAlphabeticBaseline (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getAlphabeticBaseline(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetIdeographicBaseline (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getIdeographicBaseline(); } extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetLongestLine (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->getLongestLine(); } extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nDidExceedMaxLines (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->didExceedMaxLines(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nLayout (JNIEnv* env, jclass jclass, jlong ptr, jfloat width) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); instance->layout(width); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nPaint (JNIEnv* env, jclass jclass, jlong ptr, jlong canvasPtr, jfloat x, jfloat y) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); SkCanvas* canvas = reinterpret_cast<SkCanvas*>(static_cast<uintptr_t>(canvasPtr)); instance->paint(canvas, x, y); } extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetRectsForRange (JNIEnv* env, jclass jclass, jlong ptr, jint start, jint end, jint rectHeightStyle, jint rectWidthStyle) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); std::vector<TextBox> rects = instance->getRectsForRange(start, end, static_cast<RectHeightStyle>(rectHeightStyle), static_cast<RectWidthStyle>(rectWidthStyle)); jobjectArray rectsArray = env->NewObjectArray((jsize) rects.size(), skija::paragraph::TextBox::cls, nullptr); for (int i = 0; i < rects.size(); ++i) { TextBox box = rects[i]; jobject boxObj = env->NewObject(skija::paragraph::TextBox::cls, skija::paragraph::TextBox::ctor, box.rect.fLeft, box.rect.fTop, box.rect.fRight, box.rect.fBottom, static_cast<jint>(box.direction)); env->SetObjectArrayElement(rectsArray, i, boxObj); env->DeleteLocalRef(boxObj); } return rectsArray; } extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetRectsForPlaceholders (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); std::vector<TextBox> rects = instance->getRectsForPlaceholders(); jobjectArray rectsArray = env->NewObjectArray((jsize) rects.size(), skija::paragraph::TextBox::cls, nullptr); for (int i = 0; i < rects.size(); ++i) { TextBox box = rects[i]; jobject boxObj = env->NewObject(skija::paragraph::TextBox::cls, skija::paragraph::TextBox::ctor, box.rect.fLeft, box.rect.fTop, box.rect.fRight, box.rect.fBottom, static_cast<jint>(box.direction)); env->SetObjectArrayElement(rectsArray, i, boxObj); env->DeleteLocalRef(boxObj); } return rectsArray; } extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetGlyphPositionAtCoordinate (JNIEnv* env, jclass jclass, jlong ptr, jfloat dx, jfloat dy) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); PositionWithAffinity p = instance->getGlyphPositionAtCoordinate(dx, dy); if (p.affinity == Affinity::kDownstream) return p.position; else return -p.position-1; } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetWordBoundary (JNIEnv* env, jclass jclass, jlong ptr, jint offset) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); SkRange<size_t> range = instance->getWordBoundary(offset); return packTwoInts(range.start & 0xFFFFFFFF, range.end & 0xFFFFFFFF); } extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetLineMetrics (JNIEnv* env, jclass jclass, jlong ptr, jlong textPtr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); SkString* text = reinterpret_cast<SkString*>(static_cast<uintptr_t>(textPtr)); std::vector<LineMetrics> res; instance->getLineMetrics(res); jobjectArray resArray = env->NewObjectArray((jsize) res.size(), skija::paragraph::LineMetrics::cls, nullptr); auto conv = skija::UtfIndicesConverter(*text); for (int i = 0; i < res.size(); ++i) { LineMetrics lm = res[i]; size_t startIndex = conv.from8To16(lm.fStartIndex); size_t endExcludingWhitespaces = conv.from8To16(lm.fEndExcludingWhitespaces); size_t endIndex = conv.from8To16(lm.fEndIndex); size_t endIncludingNewline = conv.from8To16(lm.fEndIncludingNewline); jobject lmObj = env->NewObject(skija::paragraph::LineMetrics::cls, skija::paragraph::LineMetrics::ctor, startIndex, endIndex, endExcludingWhitespaces, endIncludingNewline, lm.fHardBreak, lm.fAscent, lm.fDescent, lm.fUnscaledAscent, lm.fHeight, lm.fWidth, lm.fLeft, lm.fBaseline, lm.fLineNumber); env->SetObjectArrayElement(resArray, i, lmObj); env->DeleteLocalRef(lmObj); } return resArray; } extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetLineNumber (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->lineNumber(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nMarkDirty (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->markDirty(); } extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nGetUnresolvedGlyphsCount (JNIEnv* env, jclass jclass, jlong ptr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->unresolvedGlyphs(); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nUpdateAlignment (JNIEnv* env, jclass jclass, jlong ptr, jint textAlignment) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); return instance->updateTextAlign(static_cast<TextAlign>(textAlignment)); } // extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nUpdateText // (JNIEnv* env, jclass jclass, jlong ptr, jint from, jstring text) { // Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); // return instance->updateText(from, skString(env, text)); // } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nUpdateFontSize (JNIEnv* env, jclass jclass, jlong ptr, jint from, jint to, jfloat fontSize, jlong textPtr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); SkString* text = reinterpret_cast<SkString*>(static_cast<uintptr_t>(textPtr)); auto conv = skija::UtfIndicesConverter(*text); return instance->updateFontSize(conv.from16To8(from), conv.from16To8(to), fontSize); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nUpdateForegroundPaint (JNIEnv* env, jclass jclass, jlong ptr, jint from, jint to, jlong paintPtr, jlong textPtr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); SkPaint* paint = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(paintPtr)); SkString* text = reinterpret_cast<SkString*>(static_cast<uintptr_t>(textPtr)); auto conv = skija::UtfIndicesConverter(*text); return instance->updateForegroundPaint(conv.from16To8(from), conv.from16To8(to), *paint); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_paragraph_Paragraph__1nUpdateBackgroundPaint (JNIEnv* env, jclass jclass, jlong ptr, jint from, jint to, jlong paintPtr, jlong textPtr) { Paragraph* instance = reinterpret_cast<Paragraph*>(static_cast<uintptr_t>(ptr)); SkPaint* paint = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(paintPtr)); SkString* text = reinterpret_cast<SkString*>(static_cast<uintptr_t>(textPtr)); auto conv = skija::UtfIndicesConverter(*text); return instance->updateBackgroundPaint(conv.from16To8(from), conv.from16To8(to), *paint); }