Add SkTypeface::makeClone.
This adds an method to typeface to allow users to create a copy of the typeface with different arguments for its parameters. This is far more efficient when animating a variation font. BUG=skia:7121 Change-Id: I34e7557a08c7005f8149ea44f0c28de9c59d15a7 Reviewed-on: https://skia-review.googlesource.com/132480 Commit-Queue: Ben Wagner <bungeman@google.com> Reviewed-by: Mike Reed <reed@google.com>
This commit is contained in:
parent
6120164138
commit
c174cc675c
@ -117,6 +117,14 @@ public:
|
||||
*/
|
||||
static sk_sp<SkTypeface> MakeFromFontData(std::unique_ptr<SkFontData>);
|
||||
|
||||
/** Return a new typeface based on this typeface but parameterized as specified in the
|
||||
SkFontArguments. If the SkFontArguments does not supply an argument for a parameter
|
||||
in the font then the value from this typeface will be used as the value for that
|
||||
argument. If the cloned typeface would be exaclty the same as this typeface then
|
||||
this typeface may be ref'ed and returned. May return nullptr on failure.
|
||||
*/
|
||||
sk_sp<SkTypeface> makeClone(const SkFontArguments&) const;
|
||||
|
||||
/** Write a unique signature to a stream, sufficient to reconstruct a
|
||||
typeface referencing the same font when Deserialize is called.
|
||||
*/
|
||||
@ -301,6 +309,8 @@ protected:
|
||||
SkTypeface(const SkFontStyle& style, bool isFixedPitch = false);
|
||||
virtual ~SkTypeface();
|
||||
|
||||
virtual sk_sp<SkTypeface> onMakeClone(const SkFontArguments&) const;
|
||||
|
||||
/** Sets the fixedPitch bit. If used, must be called in the constructor. */
|
||||
void setIsFixedPitch(bool isFixedPitch) { fIsFixedPitch = isFixedPitch; }
|
||||
/** Sets the font style. If used, must be called in the constructor. */
|
||||
|
@ -161,6 +161,10 @@ sk_sp<SkTypeface> SkTypeface::MakeFromFile(const char path[], int index) {
|
||||
return fm->makeFromFile(path, index);
|
||||
}
|
||||
|
||||
sk_sp<SkTypeface> SkTypeface::makeClone(const SkFontArguments& args) const {
|
||||
return this->onMakeClone(args);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SkTypeface::serialize(SkWStream* wstream) const {
|
||||
@ -321,6 +325,10 @@ bool SkTypeface::onGetKerningPairAdjustments(const uint16_t glyphs[], int count,
|
||||
return false;
|
||||
}
|
||||
|
||||
sk_sp<SkTypeface> SkTypeface::onMakeClone(const SkFontArguments& args) const {
|
||||
return sk_ref_sp(this);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "SkDescriptor.h"
|
||||
|
Loading…
Reference in New Issue
Block a user