SkFontConfigTypeface.h revision 6930b57221ea7010dcab516559fa6bc5a0fb3807
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 "SkTypefaceCache.h"
11
12class SkFontDescriptor;
13class SkStream;
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, SkStream* localStream)
30            : INHERITED(style, SkTypefaceCache::NewFontID(), false) {
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
51protected:
52    friend class SkFontHost;    // hack until we can make public versions
53
54    virtual int onGetTableTags(SkFontTableTag tags[]) const SK_OVERRIDE;
55    virtual size_t onGetTableData(SkFontTableTag, size_t offset,
56                                  size_t length, void* data) const SK_OVERRIDE;
57    virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE;
58    virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE;
59
60private:
61    typedef SkTypeface_FreeType INHERITED;
62};
63
64