• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 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 #ifndef SkTestScalerContext_DEFINED
9 #define SkTestScalerContext_DEFINED
10 
11 #include "SkFixed.h"
12 #include "SkPaint.h"
13 #include "SkPath.h"
14 #include "SkRefCnt.h"
15 #include "SkTDArray.h"
16 #include "SkTypeface.h"
17 
18 class SkTestFont;
19 
20 struct SkTestFontData {
21     const SkScalar* fPoints;
22     const unsigned char* fVerbs;
23     const unsigned* fCharCodes;
24     const size_t fCharCodesCount;
25     const SkFixed* fWidths;
26     const SkPaint::FontMetrics& fMetrics;
27     const char* fName;
28     SkFontStyle fStyle;
29     sk_sp<SkTestFont> fCachedFont;
30 };
31 
32 class SkTestFont : public SkRefCnt {
33 public:
34     SkTestFont(const SkTestFontData& );
35     virtual ~SkTestFont();
36     int codeToIndex(SkUnichar charCode) const;
37     void init(const SkScalar* pts, const unsigned char* verbs);
38 private:
39     const unsigned* fCharCodes;
40     const size_t fCharCodesCount;
41     const SkFixed* fWidths;
42     const SkPaint::FontMetrics& fMetrics;
43     const char* fName;
44     SkPath** fPaths;
45     friend class SkTestTypeface;
46     typedef SkRefCnt INHERITED;
47 };
48 
49 
50 class SkTestTypeface : public SkTypeface {
51 public:
52     SkTestTypeface(sk_sp<SkTestFont>, const SkFontStyle& style);
53     void getAdvance(SkGlyph* glyph);
54     void getFontMetrics(SkPaint::FontMetrics* metrics);
55     void getMetrics(SkGlyph* glyph);
56     void getPath(SkGlyphID glyph, SkPath* path);
57 protected:
58     SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
59                                            const SkDescriptor* desc) const override;
60     void onFilterRec(SkScalerContextRec* rec) const override;
61     std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override;
62 
onOpenStream(int * ttcIndex)63     SkStreamAsset* onOpenStream(int* ttcIndex) const override {
64         return nullptr;
65     }
66 
67     void onGetFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const override;
68 
69     int onCharsToGlyphs(const void* chars, Encoding encoding,
70                         uint16_t glyphs[], int glyphCount) const override;
71 
onCountGlyphs()72     int onCountGlyphs() const override {
73         return (int) fTestFont->fCharCodesCount;
74     }
75 
onGetUPEM()76     int onGetUPEM() const override {
77         return 2048;
78     }
79 
80     void onGetFamilyName(SkString* familyName) const override;
81     SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override;
82 
onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[],int coordinateCount)83     int onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[],
84                                      int coordinateCount) const override
85     {
86         return 0;
87     }
88 
onGetTableTags(SkFontTableTag tags[])89     int onGetTableTags(SkFontTableTag tags[]) const override {
90         return 0;
91     }
92 
onGetTableData(SkFontTableTag tag,size_t offset,size_t length,void * data)93     size_t onGetTableData(SkFontTableTag tag, size_t offset,
94                           size_t length, void* data) const override {
95         return 0;
96     }
97 private:
98     sk_sp<SkTestFont> fTestFont;
99     friend class SkTestScalerContext;
100 };
101 
102 #endif
103