diff --git a/include/minikin/MinikinFont.h b/include/minikin/MinikinFont.h index ee885f497c456ce7c26cb4afe0ae9180fb672604..7f65cd7b0aab1ded2a6850818fb7823da30a61f1 100644 --- a/include/minikin/MinikinFont.h +++ b/include/minikin/MinikinFont.h @@ -35,6 +35,7 @@ public: HyphenEdit() : hyphen(0) { } HyphenEdit(uint32_t hyphenInt) : hyphen(hyphenInt) { } bool hasHyphen() const { return hyphen != 0; } + bool operator==(const HyphenEdit &other) const { return hyphen == other.hyphen; } private: uint32_t hyphen; }; @@ -48,8 +49,7 @@ struct MinikinPaint { fakery(), fontFeatureSettings() { } bool skipCache() const { - // TODO: add hyphen to cache - return !fontFeatureSettings.empty() || hyphenEdit.hasHyphen(); + return !fontFeatureSettings.empty(); } MinikinFont *font; diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp index bac5fc774395ba6048ed3b12a2739de2bb5a9f38..be29e3ca2a09275ce3747b50c2fb82da74321d47 100644 --- a/libs/minikin/Layout.cpp +++ b/libs/minikin/Layout.cpp @@ -110,7 +110,7 @@ public: mStart(start), mCount(count), mId(collection->getId()), mStyle(style), mSize(paint.size), mScaleX(paint.scaleX), mSkewX(paint.skewX), mLetterSpacing(paint.letterSpacing), - mPaintFlags(paint.paintFlags), mIsRtl(dir) { + mPaintFlags(paint.paintFlags), mHyphenEdit(paint.hyphenEdit), mIsRtl(dir) { } bool operator==(const LayoutCacheKey &other) const; hash_t hash() const; @@ -144,6 +144,7 @@ private: float mSkewX; float mLetterSpacing; int32_t mPaintFlags; + HyphenEdit mHyphenEdit; bool mIsRtl; // Note: any fields added to MinikinPaint must also be reflected here. // TODO: language matching (possibly integrate into style) @@ -236,6 +237,7 @@ bool LayoutCacheKey::operator==(const LayoutCacheKey& other) const { && mSkewX == other.mSkewX && mLetterSpacing == other.mLetterSpacing && mPaintFlags == other.mPaintFlags + && mHyphenEdit == other.mHyphenEdit && mIsRtl == other.mIsRtl && mNchars == other.mNchars && !memcmp(mChars, other.mChars, mNchars * sizeof(uint16_t)); @@ -251,6 +253,7 @@ hash_t LayoutCacheKey::hash() const { hash = JenkinsHashMix(hash, hash_type(mSkewX)); hash = JenkinsHashMix(hash, hash_type(mLetterSpacing)); hash = JenkinsHashMix(hash, hash_type(mPaintFlags)); + hash = JenkinsHashMix(hash, hash_type(mHyphenEdit.hasHyphen())); hash = JenkinsHashMix(hash, hash_type(mIsRtl)); hash = JenkinsHashMixShorts(hash, mChars, mNchars); return JenkinsHashWhiten(hash);