Font resolution: all unit tests working
Change-Id: Ie6ee30901d599ceefa42651add79bb0288c54c48
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249004
Commit-Queue: Julia Lavrova <jlavrova@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
Reviewed-by: Julia Lavrova <jlavrova@google.com>
diff --git a/modules/skparagraph/src/ParagraphCache.cpp b/modules/skparagraph/src/ParagraphCache.cpp
index 80da392..e25244e 100644
--- a/modules/skparagraph/src/ParagraphCache.cpp
+++ b/modules/skparagraph/src/ParagraphCache.cpp
@@ -9,12 +9,12 @@
public:
ParagraphCacheKey(const ParagraphImpl* paragraph)
: fText(paragraph->fText.c_str(), paragraph->fText.size())
- , fFontSwitches(paragraph->switches())
+ , fResolvedFonts(paragraph->resolvedFonts())
, fTextStyles(paragraph->fTextStyles)
, fParagraphStyle(paragraph->paragraphStyle()) { }
SkString fText;
- SkTArray<FontDescr> fFontSwitches;
+ SkTArray<ResolvedFontDescriptor> fResolvedFonts;
SkTArray<Block, true> fTextStyles;
ParagraphStyle fParagraphStyle;
};
@@ -32,9 +32,8 @@
// Shaped results:
InternalState fInternalState;
- SkTArray<Run> fRuns;
+ SkTArray<Run, false> fRuns;
SkTArray<Cluster, true> fClusters;
- SkTArray<RunShifts, true> fRunShifts;
};
@@ -46,8 +45,8 @@
}
uint32_t ParagraphCache::KeyHash::operator()(const ParagraphCacheKey& key) const {
uint32_t hash = 0;
- for (auto& fd : key.fFontSwitches) {
- hash = mix(hash, SkGoodHash()(fd.fStart));
+ for (auto& fd : key.fResolvedFonts) {
+ hash = mix(hash, SkGoodHash()(fd.fTextStart));
hash = mix(hash, SkGoodHash()(fd.fFont.getSize()));
if (fd.fFont.getTypeface() != nullptr) {
@@ -74,7 +73,7 @@
if (a.fText.size() != b.fText.size()) {
return false;
}
- if (a.fFontSwitches.count() != b.fFontSwitches.count()) {
+ if (a.fResolvedFonts.count() != b.fResolvedFonts.count()) {
return false;
}
if (a.fText != b.fText) {
@@ -89,10 +88,10 @@
return false;
}
- for (size_t i = 0; i < a.fFontSwitches.size(); ++i) {
- auto& fda = a.fFontSwitches[i];
- auto& fdb = b.fFontSwitches[i];
- if (fda.fStart != fdb.fStart) {
+ for (size_t i = 0; i < a.fResolvedFonts.size(); ++i) {
+ auto& fda = a.fResolvedFonts[i];
+ auto& fdb = b.fResolvedFonts[i];
+ if (fda.fTextStart != fdb.fTextStart) {
return false;
}
if (fda.fFont != fdb.fFont) {
@@ -149,7 +148,6 @@
void ParagraphCache::updateFrom(const ParagraphImpl* paragraph, Entry* entry) {
entry->fValue->fInternalState = paragraph->state();
- entry->fValue->fRunShifts = paragraph->fRunShifts;
for (size_t i = 0; i < paragraph->fRuns.size(); ++i) {
auto& run = paragraph->fRuns[i];
if (run.fSpaced) {
@@ -171,11 +169,6 @@
cluster.setMaster(paragraph);
}
- paragraph->fRunShifts.reset();
- for (auto& runShift : entry->fValue->fRunShifts) {
- paragraph->fRunShifts.push_back(runShift);
- }
-
paragraph->fState = entry->fValue->fInternalState;
}