OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkString.h" | 10 #include "SkString.h" |
11 #include "SkTypeface.h" | 11 #include "SkTypeface.h" |
12 #include "SkTypes.h" | 12 #include "SkTypes.h" |
13 | 13 |
14 static const char* gFaces[] = { | 14 static const char* gFaces[] = { |
15 "Times Roman", | 15 "Times Roman", |
16 "Hiragino Maru Gothic Pro", | 16 "Hiragino Maru Gothic Pro", |
17 "Papyrus", | 17 "Papyrus", |
18 "Helvetica", | 18 "Helvetica", |
19 "Courier New" | 19 "Courier New" |
20 }; | 20 }; |
21 | 21 |
22 class TypefaceGM : public skiagm::GM { | 22 class TypefaceGM : public skiagm::GM { |
23 public: | 23 public: |
24 TypefaceGM() { | 24 TypefaceGM() |
25 : fFaces(NULL) { | |
26 } | |
27 | |
28 virtual ~TypefaceGM() { | |
29 if (fFaces) { | |
30 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) { | |
31 SkSafeUnref(fFaces[i]); | |
32 } | |
33 delete [] fFaces; | |
34 } | |
35 } | |
36 | |
37 protected: | |
38 void onOnceBeforeDraw() override { | |
25 fFaces = new SkTypeface*[SK_ARRAY_COUNT(gFaces)]; | 39 fFaces = new SkTypeface*[SK_ARRAY_COUNT(gFaces)]; |
26 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) { | 40 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) { |
27 fFaces[i] = sk_tool_utils::create_portable_typeface(gFaces[i], SkTyp eface::kNormal); | 41 fFaces[i] = sk_tool_utils::create_portable_typeface(gFaces[i], SkTyp eface::kNormal); |
28 } | 42 } |
29 } | 43 } |
30 | 44 |
31 virtual ~TypefaceGM() { | |
32 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) { | |
33 SkSafeUnref(fFaces[i]); | |
34 } | |
35 delete [] fFaces; | |
36 } | |
37 | |
38 protected: | |
39 SkString onShortName() override { | 45 SkString onShortName() override { |
40 return SkString("typeface"); | 46 return SkString("typeface"); |
41 } | 47 } |
42 | 48 |
43 SkISize onISize() override { | 49 SkISize onISize() override { |
44 return SkISize::Make(640, 480); | 50 return SkISize::Make(640, 480); |
45 } | 51 } |
46 | 52 |
47 void onDraw(SkCanvas* canvas) override { | 53 void onDraw(SkCanvas* canvas) override { |
48 SkString text("Typefaces are fun!"); | 54 SkString text("Typefaces are fun!"); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
150 { "monospace", SkTypeface::kBoldItalic }, | 156 { "monospace", SkTypeface::kBoldItalic }, |
151 }; | 157 }; |
152 | 158 |
153 static const int gFaceStylesCount = SK_ARRAY_COUNT(gFaceStyles); | 159 static const int gFaceStylesCount = SK_ARRAY_COUNT(gFaceStyles); |
154 | 160 |
155 class TypefaceStylesGM : public skiagm::GM { | 161 class TypefaceStylesGM : public skiagm::GM { |
156 SkTypeface* fFaces[gFaceStylesCount]; | 162 SkTypeface* fFaces[gFaceStylesCount]; |
157 bool fApplyKerning; | 163 bool fApplyKerning; |
158 | 164 |
159 public: | 165 public: |
160 TypefaceStylesGM(bool applyKerning) : fApplyKerning(applyKerning) { | 166 TypefaceStylesGM(bool applyKerning) |
161 for (int i = 0; i < gFaceStylesCount; i++) { | 167 : fApplyKerning(applyKerning) { |
162 fFaces[i] = sk_tool_utils::create_portable_typeface(gFaceStyles[i].f Name, | 168 memset(fFaces, 0, sizeof(fFaces)); |
mtklein
2015/05/21 13:09:25
Just FYI, we usually use sk_bzero for this so we d
| |
163 gFaceStyles[i].fStyle); | |
164 } | |
165 } | 169 } |
166 | 170 |
167 virtual ~TypefaceStylesGM() { | 171 virtual ~TypefaceStylesGM() { |
168 for (int i = 0; i < gFaceStylesCount; i++) { | 172 for (int i = 0; i < gFaceStylesCount; i++) { |
169 SkSafeUnref(fFaces[i]); | 173 SkSafeUnref(fFaces[i]); |
170 } | 174 } |
171 } | 175 } |
172 | 176 |
173 protected: | 177 protected: |
178 void onOnceBeforeDraw() override { | |
179 for (int i = 0; i < gFaceStylesCount; i++) { | |
180 fFaces[i] = sk_tool_utils::create_portable_typeface(gFaceStyles[i].f Name, | |
181 gFaceStyles[i].fStyle); | |
182 } | |
183 } | |
184 | |
174 SkString onShortName() override { | 185 SkString onShortName() override { |
175 SkString name("typefacestyles"); | 186 SkString name("typefacestyles"); |
176 if (fApplyKerning) { | 187 if (fApplyKerning) { |
177 name.append("_kerning"); | 188 name.append("_kerning"); |
178 } | 189 } |
179 return name; | 190 return name; |
180 } | 191 } |
181 | 192 |
182 SkISize onISize() override { | 193 SkISize onISize() override { |
183 return SkISize::Make(640, 480); | 194 return SkISize::Make(640, 480); |
(...skipping 28 matching lines...) Expand all Loading... | |
212 | 223 |
213 private: | 224 private: |
214 typedef skiagm::GM INHERITED; | 225 typedef skiagm::GM INHERITED; |
215 }; | 226 }; |
216 | 227 |
217 /////////////////////////////////////////////////////////////////////////////// | 228 /////////////////////////////////////////////////////////////////////////////// |
218 | 229 |
219 DEF_GM( return new TypefaceGM; ) | 230 DEF_GM( return new TypefaceGM; ) |
220 DEF_GM( return new TypefaceStylesGM(false); ) | 231 DEF_GM( return new TypefaceStylesGM(false); ) |
221 DEF_GM( return new TypefaceStylesGM(true); ) | 232 DEF_GM( return new TypefaceStylesGM(true); ) |
OLD | NEW |