10998baede3366d71437433b63117d067f9a99a85reed@google.com/* 20998baede3366d71437433b63117d067f9a99a85reed@google.com * Copyright 2013 Google Inc. 30998baede3366d71437433b63117d067f9a99a85reed@google.com * 40998baede3366d71437433b63117d067f9a99a85reed@google.com * Use of this source code is governed by a BSD-style license that can be 50998baede3366d71437433b63117d067f9a99a85reed@google.com * found in the LICENSE file. 60998baede3366d71437433b63117d067f9a99a85reed@google.com */ 70998baede3366d71437433b63117d067f9a99a85reed@google.com 80998baede3366d71437433b63117d067f9a99a85reed@google.com#ifndef SkFontMgr_DEFINED 90998baede3366d71437433b63117d067f9a99a85reed@google.com#define SkFontMgr_DEFINED 100998baede3366d71437433b63117d067f9a99a85reed@google.com 110998baede3366d71437433b63117d067f9a99a85reed@google.com#include "SkRefCnt.h" 120998baede3366d71437433b63117d067f9a99a85reed@google.com#include "SkFontStyle.h" 130998baede3366d71437433b63117d067f9a99a85reed@google.com 140998baede3366d71437433b63117d067f9a99a85reed@google.comclass SkData; 150998baede3366d71437433b63117d067f9a99a85reed@google.comclass SkStream; 160998baede3366d71437433b63117d067f9a99a85reed@google.comclass SkString; 179ba926b719dcfa84ff950a26280c9f880217b09dreed@google.comclass SkTypeface; 180998baede3366d71437433b63117d067f9a99a85reed@google.com 19235b7fcd640ae71e0efa2dcbdf2b1ab6cc9ba429reed@google.comclass SK_API SkFontStyleSet : public SkRefCnt { 200998baede3366d71437433b63117d067f9a99a85reed@google.compublic: 218a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org SK_DECLARE_INST_COUNT(SkFontStyleSet) 228a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org 231a63d8b44b5a0d4f2aec4f104dc8aa0d7bb112b4reed@google.com virtual int count() = 0; 241a63d8b44b5a0d4f2aec4f104dc8aa0d7bb112b4reed@google.com virtual void getStyle(int index, SkFontStyle*, SkString* style) = 0; 251a63d8b44b5a0d4f2aec4f104dc8aa0d7bb112b4reed@google.com virtual SkTypeface* createTypeface(int index) = 0; 26c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com virtual SkTypeface* matchStyle(const SkFontStyle& pattern) = 0; 27c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com 28c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com static SkFontStyleSet* CreateEmpty(); 298a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org 308a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.orgprivate: 318a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org typedef SkRefCnt INHERITED; 320998baede3366d71437433b63117d067f9a99a85reed@google.com}; 330998baede3366d71437433b63117d067f9a99a85reed@google.com 349eb97e001c9414b43ff71b75398146d7d4aab149reed@google.comclass SkTypeface; 359eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com 36235b7fcd640ae71e0efa2dcbdf2b1ab6cc9ba429reed@google.comclass SK_API SkFontMgr : public SkRefCnt { 370998baede3366d71437433b63117d067f9a99a85reed@google.compublic: 388a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org SK_DECLARE_INST_COUNT(SkFontMgr) 398a88bbd8fc321b3402816621ec4971d721197840commit-bot@chromium.org 405c44448a7661a5e21afc204839e907638dd1726ereed@google.com int countFamilies(); 415c44448a7661a5e21afc204839e907638dd1726ereed@google.com void getFamilyName(int index, SkString* familyName); 425c44448a7661a5e21afc204839e907638dd1726ereed@google.com SkFontStyleSet* createStyleSet(int index); 430998baede3366d71437433b63117d067f9a99a85reed@google.com 44c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com SkFontStyleSet* matchFamily(const char familyName[]); 45c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com 460998baede3366d71437433b63117d067f9a99a85reed@google.com /** 470998baede3366d71437433b63117d067f9a99a85reed@google.com * Find the closest matching typeface to the specified familyName and style 480998baede3366d71437433b63117d067f9a99a85reed@google.com * and return a ref to it. The caller must call unref() on the returned 490998baede3366d71437433b63117d067f9a99a85reed@google.com * object. Will never return NULL, as it will return the default font if 500998baede3366d71437433b63117d067f9a99a85reed@google.com * no matching font is found. 510998baede3366d71437433b63117d067f9a99a85reed@google.com */ 520998baede3366d71437433b63117d067f9a99a85reed@google.com SkTypeface* matchFamilyStyle(const char familyName[], const SkFontStyle&); 530998baede3366d71437433b63117d067f9a99a85reed@google.com 545c44448a7661a5e21afc204839e907638dd1726ereed@google.com SkTypeface* matchFaceStyle(const SkTypeface*, const SkFontStyle&); 555c44448a7661a5e21afc204839e907638dd1726ereed@google.com 560998baede3366d71437433b63117d067f9a99a85reed@google.com /** 570998baede3366d71437433b63117d067f9a99a85reed@google.com * Create a typeface for the specified data and TTC index (pass 0 for none) 580998baede3366d71437433b63117d067f9a99a85reed@google.com * or NULL if the data is not recognized. The caller must call unref() on 590998baede3366d71437433b63117d067f9a99a85reed@google.com * the returned object if it is not null. 600998baede3366d71437433b63117d067f9a99a85reed@google.com */ 610998baede3366d71437433b63117d067f9a99a85reed@google.com SkTypeface* createFromData(SkData*, int ttcIndex = 0); 620998baede3366d71437433b63117d067f9a99a85reed@google.com 630998baede3366d71437433b63117d067f9a99a85reed@google.com /** 640998baede3366d71437433b63117d067f9a99a85reed@google.com * Create a typeface for the specified stream and TTC index 650998baede3366d71437433b63117d067f9a99a85reed@google.com * (pass 0 for none) or NULL if the stream is not recognized. The caller 660998baede3366d71437433b63117d067f9a99a85reed@google.com * must call unref() on the returned object if it is not null. 670998baede3366d71437433b63117d067f9a99a85reed@google.com */ 680998baede3366d71437433b63117d067f9a99a85reed@google.com SkTypeface* createFromStream(SkStream*, int ttcIndex = 0); 690998baede3366d71437433b63117d067f9a99a85reed@google.com 700998baede3366d71437433b63117d067f9a99a85reed@google.com /** 710998baede3366d71437433b63117d067f9a99a85reed@google.com * Create a typeface for the specified fileName and TTC index 720998baede3366d71437433b63117d067f9a99a85reed@google.com * (pass 0 for none) or NULL if the file is not found, or its contents are 730998baede3366d71437433b63117d067f9a99a85reed@google.com * not recognized. The caller must call unref() on the returned object 740998baede3366d71437433b63117d067f9a99a85reed@google.com * if it is not null. 750998baede3366d71437433b63117d067f9a99a85reed@google.com */ 760998baede3366d71437433b63117d067f9a99a85reed@google.com SkTypeface* createFromFile(const char path[], int ttcIndex = 0); 770998baede3366d71437433b63117d067f9a99a85reed@google.com 789eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com SkTypeface* legacyCreateTypeface(const char familyName[], 799eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com unsigned typefaceStyleBits); 809eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com 815c44448a7661a5e21afc204839e907638dd1726ereed@google.com /** 825c44448a7661a5e21afc204839e907638dd1726ereed@google.com * Return a ref to the default fontmgr. The caller must call unref() on 835c44448a7661a5e21afc204839e907638dd1726ereed@google.com * the returned object. 845c44448a7661a5e21afc204839e907638dd1726ereed@google.com */ 855c44448a7661a5e21afc204839e907638dd1726ereed@google.com static SkFontMgr* RefDefault(); 865c44448a7661a5e21afc204839e907638dd1726ereed@google.com 875c44448a7661a5e21afc204839e907638dd1726ereed@google.comprotected: 885c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual int onCountFamilies() = 0; 895c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual void onGetFamilyName(int index, SkString* familyName) = 0; 905c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual SkFontStyleSet* onCreateStyleSet(int index) = 0; 915c44448a7661a5e21afc204839e907638dd1726ereed@google.com 92c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com virtual SkFontStyleSet* onMatchFamily(const char familyName[]) = 0; 93c0d88a81b3e6e4ffe900fb88e1938515f8a4363creed@google.com 945c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual SkTypeface* onMatchFamilyStyle(const char familyName[], 955c44448a7661a5e21afc204839e907638dd1726ereed@google.com const SkFontStyle&) = 0; 965c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual SkTypeface* onMatchFaceStyle(const SkTypeface*, 975c44448a7661a5e21afc204839e907638dd1726ereed@google.com const SkFontStyle&) = 0; 985c44448a7661a5e21afc204839e907638dd1726ereed@google.com 995c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual SkTypeface* onCreateFromData(SkData*, int ttcIndex) = 0; 1005c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual SkTypeface* onCreateFromStream(SkStream*, int ttcIndex) = 0; 1015c44448a7661a5e21afc204839e907638dd1726ereed@google.com virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) = 0; 1020276087ad80d50ca55926abe6bdc8f003b021a90skia.committer@gmail.com 1039eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com // TODO: make this pure-virtual once all ports know about it 1049eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com virtual SkTypeface* onLegacyCreateTypeface(const char familyName[], 1059eb97e001c9414b43ff71b75398146d7d4aab149reed@google.com unsigned styleBits); 1060998baede3366d71437433b63117d067f9a99a85reed@google.comprivate: 1075c44448a7661a5e21afc204839e907638dd1726ereed@google.com static SkFontMgr* Factory(); // implemented by porting layer 1080276087ad80d50ca55926abe6bdc8f003b021a90skia.committer@gmail.com 1090998baede3366d71437433b63117d067f9a99a85reed@google.com typedef SkRefCnt INHERITED; 1100998baede3366d71437433b63117d067f9a99a85reed@google.com}; 1110998baede3366d71437433b63117d067f9a99a85reed@google.com 1120998baede3366d71437433b63117d067f9a99a85reed@google.com#endif 113