Placeholders implementation + unit tests
Change-Id: I4e87a6927cbd6ef087b72aaa4b2155c1859589b3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/235677
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
diff --git a/modules/skparagraph/src/ParagraphCache.cpp b/modules/skparagraph/src/ParagraphCache.cpp
index 465b9bc..80da392 100644
--- a/modules/skparagraph/src/ParagraphCache.cpp
+++ b/modules/skparagraph/src/ParagraphCache.cpp
@@ -58,9 +58,13 @@
}
}
for (auto& ts : key.fTextStyles) {
- hash = mix(hash, SkGoodHash()(ts.fStyle.getLetterSpacing()));
- hash = mix(hash, SkGoodHash()(ts.fStyle.getWordSpacing()));
- hash = mix(hash, SkGoodHash()(ts.fRange));
+ if (!ts.fStyle.isPlaceholder()) {
+ hash = mix(hash, SkGoodHash()(ts.fStyle.getLetterSpacing()));
+ hash = mix(hash, SkGoodHash()(ts.fStyle.getWordSpacing()));
+ hash = mix(hash, SkGoodHash()(ts.fRange));
+ } else {
+ // TODO: cache placeholders
+ }
}
hash = mix(hash, SkGoodHash()(key.fText));
return hash;
@@ -99,17 +103,24 @@
for (size_t i = 0; i < a.fTextStyles.size(); ++i) {
auto& tsa = a.fTextStyles[i];
auto& tsb = b.fTextStyles[i];
- if (tsa.fStyle.getLetterSpacing() != tsb.fStyle.getLetterSpacing()) {
+ if (!(tsa.fStyle == tsb.fStyle)) {
return false;
}
- if (tsa.fStyle.getWordSpacing() != tsb.fStyle.getWordSpacing()) {
- return false;
- }
- if (tsa.fRange.width() != tsb.fRange.width()) {
- return false;
- }
- if (tsa.fRange.start != tsb.fRange.start) {
- return false;
+ if (!tsa.fStyle.isPlaceholder()) {
+ if (tsa.fStyle.getLetterSpacing() != tsb.fStyle.getLetterSpacing()) {
+ return false;
+ }
+ if (tsa.fStyle.getWordSpacing() != tsb.fStyle.getWordSpacing()) {
+ return false;
+ }
+ if (tsa.fRange.width() != tsb.fRange.width()) {
+ return false;
+ }
+ if (tsa.fRange.start != tsb.fRange.start) {
+ return false;
+ }
+ } else {
+ // TODO: compare placeholders
}
}