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