blob: 573a3df21241244d0376e80bc8f2fee4f2613824 [file] [log] [blame]
caryclark5fb6bd42014-06-23 11:25:00 -07001/*
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 "SkPaint.h"
12#include "SkPath.h"
Cary Clark992c7b02014-07-31 08:58:44 -040013#include "SkRefCnt.h"
caryclark5fb6bd42014-06-23 11:25:00 -070014#include "SkTDArray.h"
15#include "SkTypeface.h"
16
Cary Clark992c7b02014-07-31 08:58:44 -040017class SkTestFont;
18
19struct SkTestFontData {
20 const SkScalar* fPoints;
21 const unsigned char* fVerbs;
22 const unsigned* fCharCodes;
23 const size_t fCharCodesCount;
24 const SkFixed* fWidths;
25 const SkPaint::FontMetrics& fMetrics;
26 const char* fName;
27 SkTypeface::Style fStyle;
28 SkTestFont* fFontCache;
29};
30
31class SkTestFont : public SkRefCnt {
32public:
33 SK_DECLARE_INST_COUNT(SkTestFont)
34
35 SkTestFont(const SkTestFontData& );
36 virtual ~SkTestFont();
37 int codeToIndex(SkUnichar charCode) const;
38 void init(const SkScalar* pts, const unsigned char* verbs);
39#ifdef SK_DEBUG // detect missing test font data
40 mutable unsigned char fDebugBits[16];
41 mutable SkUnichar fDebugOverage[8];
42 const char* fDebugName;
43 SkTypeface::Style fDebugStyle;
44 const char* debugFontName() const { return fName; }
45#endif
46private:
47 const unsigned* fCharCodes;
48 const size_t fCharCodesCount;
49 const SkFixed* fWidths;
50 const SkPaint::FontMetrics& fMetrics;
51 const char* fName;
52 SkPath** fPaths;
53 friend class SkTestTypeface;
54 typedef SkRefCnt INHERITED;
55};
56
57
58class SkTestTypeface : public SkTypeface {
59public:
bungemana4c4a2d2014-10-20 13:33:19 -070060 SkTestTypeface(SkTestFont*, const SkFontStyle& style);
Cary Clark992c7b02014-07-31 08:58:44 -040061 virtual ~SkTestTypeface() {
62 SkSafeUnref(fTestFont);
63 }
64 void getAdvance(SkGlyph* glyph);
65 void getFontMetrics(SkPaint::FontMetrics* metrics);
66 void getMetrics(SkGlyph* glyph);
67 void getPath(const SkGlyph& glyph, SkPath* path);
68protected:
mtklein36352bf2015-03-25 18:17:31 -070069 SkScalerContext* onCreateScalerContext(const SkDescriptor* desc) const override;
70 void onFilterRec(SkScalerContextRec* rec) const override;
tfarina37a92b42015-04-24 14:25:33 -070071 SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
72 SkAdvancedTypefaceMetrics::PerGlyphInfo,
73 const uint32_t* glyphIDs,
74 uint32_t glyphIDsCount) const override;
Cary Clark992c7b02014-07-31 08:58:44 -040075
mtklein36352bf2015-03-25 18:17:31 -070076 SkStreamAsset* onOpenStream(int* ttcIndex) const override {
Cary Clark992c7b02014-07-31 08:58:44 -040077 SkASSERT(0); // don't expect to get here
78 return NULL;
79 }
80
mtklein36352bf2015-03-25 18:17:31 -070081 void onGetFontDescriptor(SkFontDescriptor* desc, bool* isLocal) const override;
Cary Clark992c7b02014-07-31 08:58:44 -040082
tfarina37a92b42015-04-24 14:25:33 -070083 int onCharsToGlyphs(const void* chars, Encoding encoding,
84 uint16_t glyphs[], int glyphCount) const override;
Cary Clark992c7b02014-07-31 08:58:44 -040085
mtklein36352bf2015-03-25 18:17:31 -070086 int onCountGlyphs() const override {
Cary Clark992c7b02014-07-31 08:58:44 -040087 return (int) fTestFont->fCharCodesCount;
88 }
89
mtklein36352bf2015-03-25 18:17:31 -070090 int onGetUPEM() const override {
Cary Clark992c7b02014-07-31 08:58:44 -040091 SkASSERT(0); // don't expect to get here
92 return 1;
93 }
94
mtklein36352bf2015-03-25 18:17:31 -070095 void onGetFamilyName(SkString* familyName) const override;
96 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override;
Cary Clark992c7b02014-07-31 08:58:44 -040097
mtklein36352bf2015-03-25 18:17:31 -070098 int onGetTableTags(SkFontTableTag tags[]) const override {
Cary Clark992c7b02014-07-31 08:58:44 -040099 return 0;
100 }
101
tfarina37a92b42015-04-24 14:25:33 -0700102 size_t onGetTableData(SkFontTableTag tag, size_t offset,
103 size_t length, void* data) const override {
Cary Clark992c7b02014-07-31 08:58:44 -0400104 return 0;
105 }
106private:
107 SkTestFont* fTestFont;
108 friend class SkTestScalerContext;
109};
110
111SkTypeface* CreateTestTypeface(const char* name, SkTypeface::Style style);
caryclark5fb6bd42014-06-23 11:25:00 -0700112
113#endif