OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "SkTypes.h" | 8 #include "SkTypes.h" |
9 #if defined(SK_BUILD_FOR_ANDROID) | |
10 | 9 |
11 #include "SkFixed.h" | 10 #include "SkFixed.h" |
12 #include "SkFontDescriptor.h" | 11 #include "SkFontDescriptor.h" |
13 #include "SkFontHost_FreeType_common.h" | 12 #include "SkFontHost_FreeType_common.h" |
14 #include "SkFontMgr.h" | 13 #include "SkFontMgr.h" |
15 #include "SkFontMgr_android.h" | 14 #include "SkFontMgr_android.h" |
16 #include "SkFontMgr_android_parser.h" | 15 #include "SkFontMgr_android_parser.h" |
17 #include "SkFontStyle.h" | 16 #include "SkFontStyle.h" |
18 #include "SkPaint.h" | 17 #include "SkPaint.h" |
19 #include "SkRefCnt.h" | 18 #include "SkRefCnt.h" |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 SkFixedToDouble(axisSpecified.fValue), | 200 SkFixedToDouble(axisSpecified.fValue), |
202 SkFixedToDouble(axisValues[i]))); | 201 SkFixedToDouble(axisValues[i]))); |
203 } | 202 } |
204 break; | 203 break; |
205 } | 204 } |
206 } | 205 } |
207 // TODO: warn on defaulted axis? | 206 // TODO: warn on defaulted axis? |
208 } | 207 } |
209 | 208 |
210 SkDEBUGCODE( | 209 SkDEBUGCODE( |
211 // Check for axis specified, but not matched in font. | 210 // Check for axis specified, but not matched in font. |
212 for (int i = 0; i < fontFile.fAxes.count(); ++i) { | 211 for (int i = 0; i < fontFile.fAxes.count(); ++i) { |
213 SkFourByteTag skTag = fontFile.fAxes[i].fTag; | 212 SkFourByteTag skTag = fontFile.fAxes[i].fTag; |
214 bool found = false; | 213 bool found = false; |
215 for (int j = 0; j < axisDefinitions.count(); ++j) { | 214 for (int j = 0; j < axisDefinitions.count(); ++j) { |
216 if (skTag == axisDefinitions[j].fTag) { | 215 if (skTag == axisDefinitions[j].fTag) { |
217 found = true; | 216 found = true; |
218 break; | 217 break; |
219 } | |
220 } | 218 } |
221 if (!found) { | 219 } |
222 SkDEBUGF(("Requested font axis not found: %s '%c%c%c
%c'\n", | 220 if (!found) { |
223 familyName.c_str(), (skTag >> 24) & 0xFF, | 221 SkDEBUGF(("Requested font axis not found: %s '%c%c%c%c'\
n", |
224 (skTag >> 16) & 0xFF, (skTag >> 8) & 0xFF,
(skTag)&0xFF)); | 222 familyName.c_str(), (skTag >> 24) & 0xFF, |
225 } | 223 (skTag >> 16) & 0xFF, (skTag >> 8) & 0xFF, (
skTag)&0xFF)); |
226 }) | 224 } |
| 225 } |
| 226 ) |
227 | 227 |
228 fStyles.push_back().reset(new SkTypeface_AndroidSystem( | 228 fStyles.push_back().reset(new SkTypeface_AndroidSystem( |
229 pathName, ttcIndex, axisValues.get(), axisDefinition
s.count(), style, | 229 pathName, ttcIndex, axisValues.get(), axisDefinitions.count(
), style, |
230 isFixedWidth, familyName, lang, variant)); | 230 isFixedWidth, familyName, lang, variant)); |
231 } | 231 } |
232 } | 232 } |
233 | 233 |
234 int count() override { | 234 int count() override { |
235 return fStyles.count(); | 235 return fStyles.count(); |
236 } | 236 } |
237 void getStyle(int index, SkFontStyle* style, SkString* name) override { | 237 void getStyle(int index, SkFontStyle* style, SkString* name) override { |
238 if (index < 0 || fStyles.count() <= index) { | 238 if (index < 0 || fStyles.count() <= index) { |
239 return; | 239 return; |
240 } | 240 } |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 bool isFixedPitch; | 469 bool isFixedPitch; |
470 SkFontStyle style; | 470 SkFontStyle style; |
471 SkString name; | 471 SkString name; |
472 if (!fScanner.scanFont(stream, ttcIndex, &name, &style, &isFixedPitch, n
ullptr)) { | 472 if (!fScanner.scanFont(stream, ttcIndex, &name, &style, &isFixedPitch, n
ullptr)) { |
473 return nullptr; | 473 return nullptr; |
474 } | 474 } |
475 SkFontData* data(new SkFontData(stream.detach(), ttcIndex, nullptr, 0)); | 475 SkFontData* data(new SkFontData(stream.detach(), ttcIndex, nullptr, 0)); |
476 return new SkTypeface_AndroidStream(data, style, isFixedPitch, name); | 476 return new SkTypeface_AndroidStream(data, style, isFixedPitch, name); |
477 } | 477 } |
478 | 478 |
| 479 SkTypeface* onCreateFromStream(SkStreamAsset* s, const FontParameters& param
s) const override { |
| 480 using Scanner = SkTypeface_FreeType::Scanner; |
| 481 SkAutoTDelete<SkStreamAsset> stream(s); |
| 482 bool isFixedPitch; |
| 483 SkFontStyle style; |
| 484 SkString name; |
| 485 Scanner::AxisDefinitions axisDefinitions; |
| 486 if (!fScanner.scanFont(stream, params.getCollectionIndex(), &name, &styl
e, &isFixedPitch, |
| 487 &axisDefinitions)) |
| 488 { |
| 489 return nullptr; |
| 490 } |
| 491 |
| 492 int paramAxisCount; |
| 493 const FontParameters::Axis* paramAxes = params.getAxes(¶mAxisCount); |
| 494 SkAutoSTMalloc<4, SkFixed> axisValues(axisDefinitions.count()); |
| 495 Scanner::computeAxisValues(axisDefinitions, paramAxes, paramAxisCount, a
xisValues, name); |
| 496 |
| 497 SkFontData* data(new SkFontData(stream.detach(), params.getCollectionInd
ex(), |
| 498 axisValues.get(), axisDefinitions.count(
))); |
| 499 return new SkTypeface_AndroidStream(data, style, isFixedPitch, name); |
| 500 } |
| 501 |
479 SkTypeface* onCreateFromFontData(SkFontData* data) const override { | 502 SkTypeface* onCreateFromFontData(SkFontData* data) const override { |
480 SkStreamAsset* stream(data->getStream()); | 503 SkStreamAsset* stream(data->getStream()); |
481 bool isFixedPitch; | 504 bool isFixedPitch; |
482 SkFontStyle style; | 505 SkFontStyle style; |
483 SkString name; | 506 SkString name; |
484 if (!fScanner.scanFont(stream, data->getIndex(), &name, &style, &isFixed
Pitch, nullptr)) { | 507 if (!fScanner.scanFont(stream, data->getIndex(), &name, &style, &isFixed
Pitch, nullptr)) { |
485 return nullptr; | 508 return nullptr; |
486 } | 509 } |
487 return new SkTypeface_AndroidStream(data, style, isFixedPitch, name); | 510 return new SkTypeface_AndroidStream(data, style, isFixedPitch, name); |
488 } | 511 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 SkASSERT(custom->fSystemFontUse < SK_ARRAY_COUNT(gSystemFontUseStrings))
; | 605 SkASSERT(custom->fSystemFontUse < SK_ARRAY_COUNT(gSystemFontUseStrings))
; |
583 SkDEBUGF(("SystemFontUse: %s BasePath: %s Fonts: %s FallbackFonts: %s\n"
, | 606 SkDEBUGF(("SystemFontUse: %s BasePath: %s Fonts: %s FallbackFonts: %s\n"
, |
584 gSystemFontUseStrings[custom->fSystemFontUse], | 607 gSystemFontUseStrings[custom->fSystemFontUse], |
585 custom->fBasePath, | 608 custom->fBasePath, |
586 custom->fFontsXml, | 609 custom->fFontsXml, |
587 custom->fFallbackFontsXml)); | 610 custom->fFallbackFontsXml)); |
588 } | 611 } |
589 | 612 |
590 return new SkFontMgr_Android(custom); | 613 return new SkFontMgr_Android(custom); |
591 } | 614 } |
592 | |
593 #endif//defined(SK_BUILD_FOR_ANDROID) | |
OLD | NEW |