/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkFontConfigInterface.h" #include "SkFontDescriptor.h" #include "SkFontHost_FreeType_common.h" #include "SkRefCnt.h" #include "SkStream.h" class SkFontDescriptor; class SkTypeface_FCI : public SkTypeface_FreeType { sk_sp fFCI; SkFontConfigInterface::FontIdentity fIdentity; SkString fFamilyName; std::unique_ptr fFontData; public: static SkTypeface_FCI* Create(sk_sp fci, const SkFontConfigInterface::FontIdentity& fi, SkString familyName, const SkFontStyle& style) { return new SkTypeface_FCI(std::move(fci), fi, std::move(familyName), style); } static SkTypeface_FCI* Create(std::unique_ptr data, SkString familyName, SkFontStyle style, bool isFixedPitch) { return new SkTypeface_FCI(std::move(data), std::move(familyName), style, isFixedPitch); } const SkFontConfigInterface::FontIdentity& getIdentity() const { return fIdentity; } sk_sp onMakeClone(const SkFontArguments& args) const override { std::unique_ptr data = this->cloneFontData(args); if (!data) { return nullptr; } return sk_sp(new SkTypeface_FCI(std::move(data), fFamilyName, this->fontStyle(), this->isFixedPitch())); } protected: SkTypeface_FCI(sk_sp fci, const SkFontConfigInterface::FontIdentity& fi, SkString familyName, const SkFontStyle& style) : INHERITED(style, false) , fFCI(std::move(fci)) , fIdentity(fi) , fFamilyName(std::move(familyName)) , fFontData(nullptr) {} SkTypeface_FCI(std::unique_ptr data, SkString familyName, SkFontStyle style, bool isFixedPitch) : INHERITED(style, isFixedPitch) , fFamilyName(std::move(familyName)) , fFontData(std::move(data)) { SkASSERT(fFontData); fIdentity.fTTCIndex = fFontData->getIndex(); } void onGetFamilyName(SkString* familyName) const override { *familyName = fFamilyName; } void onGetFontDescriptor(SkFontDescriptor*, bool*) const override; SkStreamAsset* onOpenStream(int* ttcIndex) const override; std::unique_ptr onMakeFontData() const override; private: typedef SkTypeface_FreeType INHERITED; };