diff --git a/m133/modules/skparagraph/src/Run.cpp b/m133/modules/skparagraph/src/Run.cpp index 61578607c0acbcba7568f5eae06cccd6cc9867df..ca43f18c984fd86037321dd778444d2a144f1df9 100644 --- a/m133/modules/skparagraph/src/Run.cpp +++ b/m133/modules/skparagraph/src/Run.cpp @@ -581,22 +581,55 @@ SkScalar Run::addSpacesEvenly(SkScalar space) { } #ifdef ENABLE_TEXT_ENHANCE +// SkScalar Run::addSpacesEvenly(SkScalar space, Cluster* cluster) { +// // Offset all the glyphs in the cluster +// SkScalar shift = 0; +// for (size_t i = cluster->startPos(); i < cluster->endPos(); ++i) { +// fPositions[i].fX += shift; +// fHalfLetterspacings[i] = space / PARAM_TWO; +// shift += space; +// } +// if (this->size() == cluster->endPos()) { +// // To make calculations easier +// fPositions[cluster->endPos()].fX += shift; +// fHalfLetterspacings[cluster->endPos()] = space / PARAM_TWO; +// } +// // Increment the run width +// fAdvance.fX += shift; +// // Increment the cluster width +// cluster->space(shift); +// cluster->setHalfLetterSpacing(space / PARAM_TWO); + +// return shift; +// } SkScalar Run::addSpacesEvenly(SkScalar space, Cluster* cluster) { - // Offset all the glyphs in the cluster + if (cluster->startPos() == cluster->endPos()) { + return 0; // 空 Cluster,不处理 + } + SkScalar shift = 0; - for (size_t i = cluster->startPos(); i < cluster->endPos(); ++i) { + const size_t start = cluster->startPos(); + const size_t end = cluster->endPos(); + + // 第一个字符不偏移(保持原位) + fHalfLetterspacings[start] = space / PARAM_TWO; + + // 从第二个字符开始,每个字符增加 letterSpacing 的偏移 + for (size_t i = start + 1; i < end; ++i) { + shift += space; fPositions[i].fX += shift; fHalfLetterspacings[i] = space / PARAM_TWO; - shift += space; } - if (this->size() == cluster->endPos()) { - // To make calculations easier - fPositions[cluster->endPos()].fX += shift; - fHalfLetterspacings[cluster->endPos()] = space / PARAM_TWO; + + // 处理最后一个字符之后的位置(如果有) + if (end == this->size()) { + shift += space; + fPositions[end].fX += shift; + fHalfLetterspacings[end] = space / PARAM_TWO; } - // Increment the run width + + // 更新 Run 和 Cluster 的宽度 fAdvance.fX += shift; - // Increment the cluster width cluster->space(shift); cluster->setHalfLetterSpacing(space / PARAM_TWO);