summaryrefslogtreecommitdiffstats
path: root/core/jni/android/graphics/TextLayoutCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/jni/android/graphics/TextLayoutCache.cpp')
-rw-r--r--core/jni/android/graphics/TextLayoutCache.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 8032ed8..ba8cea4 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -686,23 +686,24 @@ void TextLayoutShaper::computeRunValues(const SkPaint* paint, const UChar* chars
i, HBFixedToFloat(mShaperItem.advances[i]));
}
#endif
- // Get Advances and their total
- jfloat currentAdvance = HBFixedToFloat(mShaperItem.advances[mShaperItem.log_clusters[0]]);
- jfloat totalFontRunAdvance = currentAdvance;
- outAdvances->replaceAt(currentAdvance, startScriptRun);
- for (size_t i = 1; i < countScriptRun; i++) {
- size_t clusterPrevious = mShaperItem.log_clusters[i - 1];
+ jfloat totalFontRunAdvance = 0;
+ size_t clusterStart = 0;
+ for (size_t i = 0; i < countScriptRun; i++) {
size_t cluster = mShaperItem.log_clusters[i];
- if (cluster != clusterPrevious) {
- currentAdvance = HBFixedToFloat(mShaperItem.advances[mShaperItem.log_clusters[i]]);
- outAdvances->replaceAt(currentAdvance, startScriptRun + i);
+ size_t clusterNext = i == countScriptRun - 1 ? mShaperItem.num_glyphs :
+ mShaperItem.log_clusters[i + 1];
+ if (cluster != clusterNext) {
+ jfloat advance = 0;
+ // The advance for the cluster is the sum of the advances of all glyphs within
+ // the cluster.
+ for (size_t j = cluster; j < clusterNext; j++) {
+ advance += HBFixedToFloat(mShaperItem.advances[j]);
+ }
+ totalFontRunAdvance += advance;
+ outAdvances->replaceAt(advance, startScriptRun + clusterStart);
+ clusterStart = i + 1;
}
}
- // TODO: can be removed and go back in the previous loop when Harfbuzz log clusters are fixed
- for (size_t i = 1; i < mShaperItem.num_glyphs; i++) {
- currentAdvance = HBFixedToFloat(mShaperItem.advances[i]);
- totalFontRunAdvance += currentAdvance;
- }
#if DEBUG_ADVANCES
ALOGD("Returned advances");