Simplify SkStrike ctor
Allow a SkStrike to be created with a descriptor and a context.
Metrics can be passed in to support the diff canvas.
Change-Id: I981f929ccb6d6391b1d205cba8aaa96f8df4932c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/270197
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/core/SkStrike.cpp b/src/core/SkStrike.cpp
index 8331c46..c1b2bc4 100644
--- a/src/core/SkStrike.cpp
+++ b/src/core/SkStrike.cpp
@@ -16,13 +16,24 @@
#include "src/core/SkEnumerate.h"
#include <cctype>
+static SkFontMetrics use_or_generate_metrics(
+ const SkFontMetrics* metrics, SkScalerContext* context) {
+ SkFontMetrics answer;
+ if (metrics) {
+ answer = *metrics;
+ } else {
+ context->getFontMetrics(&answer);
+ }
+ return answer;
+}
+
SkStrike::SkStrike(
const SkDescriptor& desc,
std::unique_ptr<SkScalerContext> scaler,
- const SkFontMetrics& fontMetrics)
+ const SkFontMetrics* fontMetrics)
: fDesc{desc}
, fScalerContext{std::move(scaler)}
- , fFontMetrics{fontMetrics}
+ , fFontMetrics{use_or_generate_metrics(fontMetrics, fScalerContext.get())}
, fRoundingSpec{fScalerContext->isSubpixel(),
fScalerContext->computeAxisAlignmentForHText()} {
SkASSERT(fScalerContext != nullptr);
diff --git a/src/core/SkStrike.h b/src/core/SkStrike.h
index 7abf96a..638e5a4 100644
--- a/src/core/SkStrike.h
+++ b/src/core/SkStrike.h
@@ -37,7 +37,7 @@
public:
SkStrike(const SkDescriptor& desc,
std::unique_ptr<SkScalerContext> scaler,
- const SkFontMetrics&);
+ const SkFontMetrics* metrics = nullptr);
// Return a glyph. Create it if it doesn't exist, and initialize with the prototype.
SkGlyph* glyphFromPrototype(const SkGlyphPrototype& p, void* image = nullptr) SK_EXCLUDES(fMu);
diff --git a/src/core/SkStrikeCache.cpp b/src/core/SkStrikeCache.cpp
index 98733f7..ecc95f5 100644
--- a/src/core/SkStrikeCache.cpp
+++ b/src/core/SkStrikeCache.cpp
@@ -22,7 +22,7 @@
Node(SkStrikeCache* strikeCache,
const SkDescriptor& desc,
std::unique_ptr<SkScalerContext> scaler,
- const SkFontMetrics& metrics,
+ const SkFontMetrics* metrics,
std::unique_ptr<SkStrikePinner> pinner)
: fStrikeCache{strikeCache}
, fStrike{desc, std::move(scaler), metrics}
@@ -277,14 +277,7 @@
std::unique_ptr<SkScalerContext> scaler,
SkFontMetrics* maybeMetrics,
std::unique_ptr<SkStrikePinner> pinner) -> Node* {
- SkFontMetrics fontMetrics;
- if (maybeMetrics != nullptr) {
- fontMetrics = *maybeMetrics;
- } else {
- scaler->getFontMetrics(&fontMetrics);
- }
-
- return new Node{this, desc, std::move(scaler), fontMetrics, std::move(pinner)};
+ return new Node{this, desc, std::move(scaler), maybeMetrics, std::move(pinner)};
}
void SkStrikeCache::purgeAll() {