summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/jni/android_text_StaticLayout.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/core/jni/android_text_StaticLayout.cpp b/core/jni/android_text_StaticLayout.cpp
index ac7924930cc8..4e88a83a92ea 100644
--- a/core/jni/android_text_StaticLayout.cpp
+++ b/core/jni/android_text_StaticLayout.cpp
@@ -120,14 +120,13 @@ static inline std::vector<float> jintArrayToFloatVector(JNIEnv* env, jintArray j
class Run {
public:
- Run(int32_t start, int32_t end) : mStart(start), mEnd(end) {}
+ Run(int32_t start, int32_t end) : mRange(start, end) {}
virtual ~Run() {}
virtual void addTo(minikin::LineBreaker* lineBreaker) = 0;
protected:
- const int32_t mStart;
- const int32_t mEnd;
+ minikin::Range mRange;
private:
// Forbid copy and assign.
@@ -143,7 +142,7 @@ class StyleRun : public Run {
mIsRtl(isRtl) {}
void addTo(minikin::LineBreaker* lineBreaker) override {
- lineBreaker->addStyleRun(&mPaint, mCollection, mStart, mEnd, mIsRtl);
+ lineBreaker->addStyleRun(&mPaint, mCollection, mRange, mIsRtl);
}
private:
@@ -158,7 +157,7 @@ class Replacement : public Run {
: Run(start, end), mWidth(width), mLocaleListId(localeListId) {}
void addTo(minikin::LineBreaker* lineBreaker) override {
- lineBreaker->addReplacement(mStart, mEnd, mWidth, mLocaleListId);
+ lineBreaker->addReplacement(mRange, mWidth, mLocaleListId);
}
private:
@@ -273,7 +272,7 @@ static void recycleCopy(JNIEnv* env, jobject recycle, jintArray recycleBreaks,
static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr,
// Inputs
- jcharArray text,
+ jcharArray javaText,
jint length,
jfloat firstWidth,
jint firstWidthLineCount,
@@ -294,11 +293,10 @@ static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr,
StaticLayoutNative* builder = toNative(nativePtr);
+ ScopedCharArrayRO text(env, javaText);
+
// TODO: Reorganize minikin APIs.
- minikin::LineBreaker b;
- b.resize(length);
- env->GetCharArrayRegion(text, 0, length, b.buffer());
- b.setText();
+ minikin::LineBreaker b(minikin::U16StringPiece(text.get(), length));
if (variableTabStops == nullptr) {
b.setTabStops(nullptr, 0, defaultTabStop);
} else {
@@ -321,7 +319,6 @@ static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr,
env->SetFloatArrayRegion(charWidths, 0, b.size(), b.charWidths());
- b.finish();
builder->clearRuns();
return static_cast<jint>(nBreaks);