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" 96930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com#include "SkFontHost_FreeType_common.h" 10e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com#include "SkStream.h" 116930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com#include "SkTypefaceCache.h" 126930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 136930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comclass SkFontDescriptor; 146930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 156930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comclass FontConfigTypeface : public SkTypeface_FreeType { 166930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkFontConfigInterface::FontIdentity fIdentity; 176930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkString fFamilyName; 186930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkStream* fLocalStream; 196930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 206930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.compublic: 21c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org static FontConfigTypeface* Create(Style style, 22c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org const SkFontConfigInterface::FontIdentity& fi, 23c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org const SkString& familyName) { 24c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org return SkNEW_ARGS(FontConfigTypeface, (style, fi, familyName)); 25c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org } 266930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 27c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org static FontConfigTypeface* Create(Style style, bool fixedWidth, SkStream* localStream) { 28c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org return SkNEW_ARGS(FontConfigTypeface, (style, fixedWidth, localStream)); 296930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com } 306930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 316930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com virtual ~FontConfigTypeface() { 326930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkSafeUnref(fLocalStream); 336930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com } 346930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 356930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com const SkFontConfigInterface::FontIdentity& getIdentity() const { 366930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com return fIdentity; 376930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com } 386930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 396930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com const char* getFamilyName() const { return fFamilyName.c_str(); } 406930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com SkStream* getLocalStream() const { return fLocalStream; } 416930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 426930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com bool isFamilyName(const char* name) const { 436930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com return fFamilyName.equals(name); 446930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com } 456930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 46e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com static SkTypeface* LegacyCreateTypeface(const SkTypeface* family, 47e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com const char familyName[], 48e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com SkTypeface::Style); 49e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com 506930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comprotected: 516930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com friend class SkFontHost; // hack until we can make public versions 526930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 53c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org FontConfigTypeface(Style style, 54c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org const SkFontConfigInterface::FontIdentity& fi, 55c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org const SkString& familyName) 56c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org : INHERITED(style, SkTypefaceCache::NewFontID(), false) 57c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org , fIdentity(fi) 58c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org , fFamilyName(familyName) 59c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org , fLocalStream(NULL) {} 60c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org 61c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org FontConfigTypeface(Style style, bool fixedWidth, SkStream* localStream) 62c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org : INHERITED(style, SkTypefaceCache::NewFontID(), fixedWidth) { 63c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org // we default to empty fFamilyName and fIdentity 64c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org fLocalStream = localStream; 65c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org SkSafeRef(localStream); 66c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org } 67c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org 686930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE; 696930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE; 706930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com 716930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comprivate: 726930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com typedef SkTypeface_FreeType INHERITED; 736930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com}; 74