16930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com/* 26930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * Copyright 2013 Google Inc. 36930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * 46930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * Use of this source code is governed by a BSD-style license that can be 56930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * found in the LICENSE file. 66930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com */ 76930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 86930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com#include "SkFontConfigInterface.h" 94bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman#include "SkFontDescriptor.h" 106930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com#include "SkFontHost_FreeType_common.h" 114bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman#include "SkRefCnt.h" 12e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com#include "SkStream.h" 136930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 146930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comclass SkFontDescriptor; 156930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 160265707c191a31dfde08dd1cd7011c1fe5b8e643bungemanclass SkTypeface_FCI : public SkTypeface_FreeType { 174bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman sk_sp<SkFontConfigInterface> fFCI; 186930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkFontConfigInterface::FontIdentity fIdentity; 196930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkString fFamilyName; 204bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman std::unique_ptr<SkFontData> fFontData; 216930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 226930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.compublic: 231ae0e01accbca4b96a10b8a8c21917dd7bf27dc3bungeman static SkTypeface_FCI* Create(sk_sp<SkFontConfigInterface> fci, 240265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman const SkFontConfigInterface::FontIdentity& fi, 2525272300c308335f2d87c2a70e249965b268bcb0Ben Wagner SkString familyName, 260265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman const SkFontStyle& style) 270265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman { 2825272300c308335f2d87c2a70e249965b268bcb0Ben Wagner return new SkTypeface_FCI(std::move(fci), fi, std::move(familyName), style); 29c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org } 306930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 314bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman static SkTypeface_FCI* Create(std::unique_ptr<SkFontData> data, 3225272300c308335f2d87c2a70e249965b268bcb0Ben Wagner SkString familyName, SkFontStyle style, bool isFixedPitch) 330265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman { 3425272300c308335f2d87c2a70e249965b268bcb0Ben Wagner return new SkTypeface_FCI(std::move(data), std::move(familyName), style, isFixedPitch); 356930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com } 366930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 376930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com const SkFontConfigInterface::FontIdentity& getIdentity() const { 386930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com return fIdentity; 396930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com } 406930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 416930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comprotected: 421ae0e01accbca4b96a10b8a8c21917dd7bf27dc3bungeman SkTypeface_FCI(sk_sp<SkFontConfigInterface> fci, 430265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman const SkFontConfigInterface::FontIdentity& fi, 4425272300c308335f2d87c2a70e249965b268bcb0Ben Wagner SkString familyName, 450265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman const SkFontStyle& style) 46e3aea10428d1597838fd563c92340beaf969a9b4bungeman : INHERITED(style, false) 471ae0e01accbca4b96a10b8a8c21917dd7bf27dc3bungeman , fFCI(std::move(fci)) 48c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org , fIdentity(fi) 4925272300c308335f2d87c2a70e249965b268bcb0Ben Wagner , fFamilyName(std::move(familyName)) 504bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman , fFontData(nullptr) {} 51c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org 5225272300c308335f2d87c2a70e249965b268bcb0Ben Wagner SkTypeface_FCI(std::unique_ptr<SkFontData> data, 5325272300c308335f2d87c2a70e249965b268bcb0Ben Wagner SkString familyName, SkFontStyle style, bool isFixedPitch) 544bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman : INHERITED(style, isFixedPitch) 5525272300c308335f2d87c2a70e249965b268bcb0Ben Wagner , fFamilyName(std::move(familyName)) 564bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman , fFontData(std::move(data)) 570265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman { 584bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman SkASSERT(fFontData); 594bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman fIdentity.fTTCIndex = fFontData->getIndex(); 60c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org } 61c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org 620265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman void onGetFamilyName(SkString* familyName) const override { *familyName = fFamilyName; } 6336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onGetFontDescriptor(SkFontDescriptor*, bool*) const override; 6436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkStreamAsset* onOpenStream(int* ttcIndex) const override; 65f93d71122e4fcfcdc674a0163455990b13855f2fbungeman std::unique_ptr<SkFontData> onMakeFontData() const override; 666930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 676930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comprivate: 686930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com typedef SkTypeface_FreeType INHERITED; 696930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com}; 70