blob: 4af9bf3dfd8eeff5a33661828a580fa54e639875 [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
benjaminwagner6c71e0a2016-04-07 08:49:31 -070011#include "SkFixed.h"
caryclark5fb6bd42014-06-23 11:25:00 -070012#include "SkPaint.h"
13#include "SkPath.h"
Cary Clark992c7b02014-07-31 08:58:44 -040014#include "SkRefCnt.h"
caryclark5fb6bd42014-06-23 11:25:00 -070015#include "SkTDArray.h"
16#include "SkTypeface.h"
17
Cary Clark992c7b02014-07-31 08:58:44 -040018class SkTestFont;
19
20struct 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 SkTypeface::Style fStyle;
29 SkTestFont* fFontCache;
30};
31
32class SkTestFont : public SkRefCnt {
33public:
mtklein2766c002015-06-26 11:45:03 -070034
Cary Clark992c7b02014-07-31 08:58:44 -040035
36 SkTestFont(const SkTestFontData& );
37 virtual ~SkTestFont();
38 int codeToIndex(SkUnichar charCode) const;
39 void init(const SkScalar* pts, const unsigned char* verbs);
40#ifdef SK_DEBUG // detect missing test font data
41 mutable unsigned char fDebugBits[16];
42 mutable SkUnichar fDebugOverage[8];
43 const char* fDebugName;
44 SkTypeface::Style fDebugStyle;
45 const char* debugFontName() const { return fName; }
46#endif
47private:
48 const unsigned* fCharCodes;
49 const size_t fCharCodesCount;
50 const SkFixed* fWidths;
51 const SkPaint::FontMetrics& fMetrics;
52 const char* fName;
53 SkPath** fPaths;
54 friend class SkTestTypeface;
55 typedef SkRefCnt INHERITED;
56};
57
58
59class SkTestTypeface : public SkTypeface {
60public:
bungemana4c4a2d2014-10-20 13:33:19 -070061 SkTestTypeface(SkTestFont*, const SkFontStyle& style);
Cary Clark992c7b02014-07-31 08:58:44 -040062 virtual ~SkTestTypeface() {
63 SkSafeUnref(fTestFont);
64 }
65 void getAdvance(SkGlyph* glyph);
66 void getFontMetrics(SkPaint::FontMetrics* metrics);
67 void getMetrics(SkGlyph* glyph);
68 void getPath(const SkGlyph& glyph, SkPath* path);
69protected:
mtklein36352bf2015-03-25 18:17:31 -070070 SkScalerContext* onCreateScalerContext(const SkDescriptor* desc) const override;
71 void onFilterRec(SkScalerContextRec* rec) const override;
tfarina37a92b42015-04-24 14:25:33 -070072 SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
reed39a9a502015-05-12 09:50:04 -070073 PerGlyphInfo,
tfarina37a92b42015-04-24 14:25:33 -070074 const uint32_t* glyphIDs,
75 uint32_t glyphIDsCount) const override;
Cary Clark992c7b02014-07-31 08:58:44 -040076
mtklein36352bf2015-03-25 18:17:31 -070077 SkStreamAsset* onOpenStream(int* ttcIndex) const override {
halcanary96fcdcc2015-08-27 07:41:13 -070078 return nullptr;
Cary Clark992c7b02014-07-31 08:58:44 -040079 }
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