1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkFontConfigInterface.h"
9#include "SkFontHost_FreeType_common.h"
10#include "SkStream.h"
11#include "SkTypefaceCache.h"
12
13class SkFontDescriptor;
14
15class FontConfigTypeface : public SkTypeface_FreeType {
16    SkFontConfigInterface::FontIdentity fIdentity;
17    SkString fFamilyName;
18    SkStream* fLocalStream;
19
20public:
21    FontConfigTypeface(Style style,
22                       const SkFontConfigInterface::FontIdentity& fi,
23                       const SkString& familyName)
24            : INHERITED(style, SkTypefaceCache::NewFontID(), false)
25            , fIdentity(fi)
26            , fFamilyName(familyName)
27            , fLocalStream(NULL) {}
28
29    FontConfigTypeface(Style style, bool fixedWidth, SkStream* localStream)
30            : INHERITED(style, SkTypefaceCache::NewFontID(), fixedWidth) {
31        // we default to empty fFamilyName and fIdentity
32        fLocalStream = localStream;
33        SkSafeRef(localStream);
34    }
35
36    virtual ~FontConfigTypeface() {
37        SkSafeUnref(fLocalStream);
38    }
39
40    const SkFontConfigInterface::FontIdentity& getIdentity() const {
41        return fIdentity;
42    }
43
44    const char* getFamilyName() const { return fFamilyName.c_str(); }
45    SkStream*   getLocalStream() const { return fLocalStream; }
46
47    bool isFamilyName(const char* name) const {
48        return fFamilyName.equals(name);
49    }
50
51    static SkTypeface* LegacyCreateTypeface(const SkTypeface* family,
52                                            const char familyName[],
53                                            SkTypeface::Style);
54
55protected:
56    friend class SkFontHost;    // hack until we can make public versions
57
58    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
59    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
60
61private:
62    typedef SkTypeface_FreeType INHERITED;
63};
64