Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Side by Side Diff: src/ports/SkFontHost_mac.cpp

Issue 2343933002: Revert of SkFontData to use smart pointers. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ports/SkFontHost_FreeType_common.h ('k') | src/ports/SkFontHost_win.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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" // Keep this before any #ifdef ... 8 #include "SkTypes.h" // Keep this before any #ifdef ...
9 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) 9 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
10 10
(...skipping 10 matching lines...) Expand all
21 21
22 #include "SkAdvancedTypefaceMetrics.h" 22 #include "SkAdvancedTypefaceMetrics.h"
23 #include "SkCGUtils.h" 23 #include "SkCGUtils.h"
24 #include "SkColorPriv.h" 24 #include "SkColorPriv.h"
25 #include "SkDescriptor.h" 25 #include "SkDescriptor.h"
26 #include "SkEndian.h" 26 #include "SkEndian.h"
27 #include "SkFloatingPoint.h" 27 #include "SkFloatingPoint.h"
28 #include "SkFontDescriptor.h" 28 #include "SkFontDescriptor.h"
29 #include "SkFontMgr.h" 29 #include "SkFontMgr.h"
30 #include "SkGlyph.h" 30 #include "SkGlyph.h"
31 #include "SkMakeUnique.h"
32 #include "SkMaskGamma.h" 31 #include "SkMaskGamma.h"
33 #include "SkMathPriv.h" 32 #include "SkMathPriv.h"
34 #include "SkMutex.h" 33 #include "SkMutex.h"
35 #include "SkOTTable_glyf.h" 34 #include "SkOTTable_glyf.h"
36 #include "SkOTTable_head.h" 35 #include "SkOTTable_head.h"
37 #include "SkOTTable_hhea.h" 36 #include "SkOTTable_hhea.h"
38 #include "SkOTTable_loca.h" 37 #include "SkOTTable_loca.h"
39 #include "SkOTUtils.h" 38 #include "SkOTUtils.h"
40 #include "SkOnce.h" 39 #include "SkOnce.h"
41 #include "SkPaint.h" 40 #include "SkPaint.h"
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 SkASSERT(fontRef); 504 SkASSERT(fontRef);
506 } 505 }
507 506
508 AutoCFRelease<CTFontRef> fFontRef; 507 AutoCFRelease<CTFontRef> fFontRef;
509 AutoCFRelease<CFTypeRef> fOriginatingCFTypeRef; 508 AutoCFRelease<CFTypeRef> fOriginatingCFTypeRef;
510 const bool fHasColorGlyphs; 509 const bool fHasColorGlyphs;
511 510
512 protected: 511 protected:
513 int onGetUPEM() const override; 512 int onGetUPEM() const override;
514 SkStreamAsset* onOpenStream(int* ttcIndex) const override; 513 SkStreamAsset* onOpenStream(int* ttcIndex) const override;
515 std::unique_ptr<SkFontData> onMakeFontData() const override; 514 SkFontData* onCreateFontData() const override;
516 void onGetFamilyName(SkString* familyName) const override; 515 void onGetFamilyName(SkString* familyName) const override;
517 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override; 516 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override;
518 int onGetTableTags(SkFontTableTag tags[]) const override; 517 int onGetTableTags(SkFontTableTag tags[]) const override;
519 virtual size_t onGetTableData(SkFontTableTag, size_t offset, 518 virtual size_t onGetTableData(SkFontTableTag, size_t offset,
520 size_t length, void* data) const override; 519 size_t length, void* data) const override;
521 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&, 520 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
522 const SkDescriptor*) const override; 521 const SkDescriptor*) const override;
523 void onFilterRec(SkScalerContextRec*) const override; 522 void onFilterRec(SkScalerContextRec*) const override;
524 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override; 523 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override;
525 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( 524 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
(...skipping 1353 matching lines...) Expand 10 before | Expand all | Expand 10 after
1879 } 1878 }
1880 (*axisValues)[(int)i] = SkDoubleToFixed(axisDefaultValueDouble); 1879 (*axisValues)[(int)i] = SkDoubleToFixed(axisDefaultValueDouble);
1881 } 1880 }
1882 1881
1883 // Override the default values with the given font's stated axis values. 1882 // Override the default values with the given font's stated axis values.
1884 NonDefaultAxesContext c = { axisValues->get(), cgAxes.get() }; 1883 NonDefaultAxesContext c = { axisValues->get(), cgAxes.get() };
1885 CFDictionaryApplyFunction(cgVariations, set_non_default_axes, &c); 1884 CFDictionaryApplyFunction(cgVariations, set_non_default_axes, &c);
1886 1885
1887 return true; 1886 return true;
1888 } 1887 }
1889 std::unique_ptr<SkFontData> SkTypeface_Mac::onMakeFontData() const { 1888 SkFontData* SkTypeface_Mac::onCreateFontData() const {
1890 int index; 1889 int index;
1891 std::unique_ptr<SkStreamAsset> stream(this->onOpenStream(&index)); 1890 SkAutoTDelete<SkStreamAsset> stream(this->onOpenStream(&index));
1892 1891
1893 CFIndex cgAxisCount; 1892 CFIndex cgAxisCount;
1894 SkAutoSTMalloc<4, SkFixed> axisValues; 1893 SkAutoSTMalloc<4, SkFixed> axisValues;
1895 if (get_variations(fFontRef, &cgAxisCount, &axisValues)) { 1894 if (get_variations(fFontRef, &cgAxisCount, &axisValues)) {
1896 return skstd::make_unique<SkFontData>(std::move(stream), index, 1895 return new SkFontData(stream.release(), index, axisValues.get(), cgAxisC ount);
1897 axisValues.get(), cgAxisCount);
1898 } 1896 }
1899 return skstd::make_unique<SkFontData>(std::move(stream), index, nullptr, 0); 1897 return new SkFontData(stream.release(), index, nullptr, 0);
1900 } 1898 }
1901 1899
1902 /////////////////////////////////////////////////////////////////////////////// 1900 ///////////////////////////////////////////////////////////////////////////////
1903 /////////////////////////////////////////////////////////////////////////////// 1901 ///////////////////////////////////////////////////////////////////////////////
1904 1902
1905 int SkTypeface_Mac::onGetUPEM() const { 1903 int SkTypeface_Mac::onGetUPEM() const {
1906 AutoCFRelease<CGFontRef> cgFont(CTFontCopyGraphicsFont(fFontRef, nullptr)); 1904 AutoCFRelease<CGFontRef> cgFont(CTFontCopyGraphicsFont(fFontRef, nullptr));
1907 return CGFontGetUnitsPerEm(cgFont); 1905 return CGFontGetUnitsPerEm(cgFont);
1908 } 1906 }
1909 1907
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
2362 AutoCFRelease<CTFontRef> fallbackFont(CTFontCreateForString(currentFont, string, range)); 2360 AutoCFRelease<CTFontRef> fallbackFont(CTFontCreateForString(currentFont, string, range));
2363 return create_from_CTFontRef(fallbackFont.release(), nullptr, false); 2361 return create_from_CTFontRef(fallbackFont.release(), nullptr, false);
2364 } 2362 }
2365 2363
2366 virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember, 2364 virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember,
2367 const SkFontStyle&) const override { 2365 const SkFontStyle&) const override {
2368 return nullptr; 2366 return nullptr;
2369 } 2367 }
2370 2368
2371 SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const override { 2369 SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const override {
2372 AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromData(sk_ref_ sp(data))); 2370 AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromData(data));
2373 if (nullptr == pr) { 2371 if (nullptr == pr) {
2374 return nullptr; 2372 return nullptr;
2375 } 2373 }
2376 return create_from_dataProvider(pr); 2374 return create_from_dataProvider(pr);
2377 } 2375 }
2378 2376
2379 SkTypeface* onCreateFromStream(SkStreamAsset* bareStream, int ttcIndex) cons t override { 2377 SkTypeface* onCreateFromStream(SkStreamAsset* stream, int ttcIndex) const ov erride {
2380 std::unique_ptr<SkStreamAsset> stream(bareStream); 2378 AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromStream(strea m));
2381 AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromStream(std:: move(stream)));
2382 if (nullptr == pr) { 2379 if (nullptr == pr) {
2383 return nullptr; 2380 return nullptr;
2384 } 2381 }
2385 return create_from_dataProvider(pr); 2382 return create_from_dataProvider(pr);
2386 } 2383 }
2387 2384
2388 static CFNumberRef get_tag_for_name(CFStringRef name, CFArrayRef ctAxes) { 2385 static CFNumberRef get_tag_for_name(CFStringRef name, CFArrayRef ctAxes) {
2389 CFIndex ctAxisCount = CFArrayGetCount(ctAxes); 2386 CFIndex ctAxisCount = CFArrayGetCount(ctAxes);
2390 for (int i = 0; i < ctAxisCount; ++i) { 2387 for (int i = 0; i < ctAxisCount; ++i) {
2391 CFTypeRef ctAxisInfo = CFArrayGetValueAtIndex(ctAxes, i); 2388 CFTypeRef ctAxisInfo = CFArrayGetValueAtIndex(ctAxes, i);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
2489 break; 2486 break;
2490 } 2487 }
2491 } 2488 }
2492 CFNumberRef valueNumber = CFNumberCreate(kCFAllocatorDefault, kCFNum berDoubleType, 2489 CFNumberRef valueNumber = CFNumberCreate(kCFAllocatorDefault, kCFNum berDoubleType,
2493 &value); 2490 &value);
2494 CFDictionaryAddValue(dict, axisName, valueNumber); 2491 CFDictionaryAddValue(dict, axisName, valueNumber);
2495 CFRelease(valueNumber); 2492 CFRelease(valueNumber);
2496 } 2493 }
2497 return dict; 2494 return dict;
2498 } 2495 }
2499 SkTypeface* onCreateFromStream(SkStreamAsset* bs, const FontParameters& para ms) const override { 2496 SkTypeface* onCreateFromStream(SkStreamAsset* s, const FontParameters& param s) const override {
2500 std::unique_ptr<SkStreamAsset> s(bs); 2497 AutoCFRelease<CGDataProviderRef> provider(SkCreateDataProviderFromStream (s));
2501 AutoCFRelease<CGDataProviderRef> provider(SkCreateDataProviderFromStream (std::move(s)));
2502 if (nullptr == provider) { 2498 if (nullptr == provider) {
2503 return nullptr; 2499 return nullptr;
2504 } 2500 }
2505 AutoCFRelease<CGFontRef> cg(CGFontCreateWithDataProvider(provider)); 2501 AutoCFRelease<CGFontRef> cg(CGFontCreateWithDataProvider(provider));
2506 if (nullptr == cg) { 2502 if (nullptr == cg) {
2507 return nullptr; 2503 return nullptr;
2508 } 2504 }
2509 2505
2510 AutoCFRelease<CFDictionaryRef> cgVariations(get_axes(cg, params)); 2506 AutoCFRelease<CFDictionaryRef> cgVariations(get_axes(cg, params));
2511 // The CGFontRef returned by CGFontCreateCopyWithVariations when the pas sed CGFontRef was 2507 // The CGFontRef returned by CGFontCreateCopyWithVariations when the pas sed CGFontRef was
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2571 } 2567 }
2572 double value = SkTPin(SkFixedToDouble(fontData->getAxis()[i]), minDo uble, maxDouble); 2568 double value = SkTPin(SkFixedToDouble(fontData->getAxis()[i]), minDo uble, maxDouble);
2573 CFNumberRef valueNumber = CFNumberCreate(kCFAllocatorDefault, kCFNum berDoubleType, 2569 CFNumberRef valueNumber = CFNumberCreate(kCFAllocatorDefault, kCFNum berDoubleType,
2574 &value); 2570 &value);
2575 2571
2576 CFDictionaryAddValue(dict, axisName, valueNumber); 2572 CFDictionaryAddValue(dict, axisName, valueNumber);
2577 CFRelease(valueNumber); 2573 CFRelease(valueNumber);
2578 } 2574 }
2579 return dict; 2575 return dict;
2580 } 2576 }
2581 SkTypeface* onCreateFromFontData(std::unique_ptr<SkFontData> fontData) const override { 2577 SkTypeface* onCreateFromFontData(SkFontData* data) const override {
2582 AutoCFRelease<CGDataProviderRef> provider( 2578 SkAutoTDelete<SkFontData> fontData(data);
2583 SkCreateDataProviderFromStream(fontData->detachStream())); 2579 SkStreamAsset* stream = fontData->detachStream();
2580 AutoCFRelease<CGDataProviderRef> provider(SkCreateDataProviderFromStream (stream));
2584 if (nullptr == provider) { 2581 if (nullptr == provider) {
2585 return nullptr; 2582 return nullptr;
2586 } 2583 }
2587 AutoCFRelease<CGFontRef> cg(CGFontCreateWithDataProvider(provider)); 2584 AutoCFRelease<CGFontRef> cg(CGFontCreateWithDataProvider(provider));
2588 if (nullptr == cg) { 2585 if (nullptr == cg) {
2589 return nullptr; 2586 return nullptr;
2590 } 2587 }
2591 2588
2592 AutoCFRelease<CFDictionaryRef> cgVariations(get_axes(cg, fontData.get()) ); 2589 AutoCFRelease<CFDictionaryRef> cgVariations(get_axes(cg, fontData));
2593 // The CGFontRef returned by CGFontCreateCopyWithVariations when the pas sed CGFontRef was 2590 // The CGFontRef returned by CGFontCreateCopyWithVariations when the pas sed CGFontRef was
2594 // created from a data provider does not appear to have any ownership of the underlying 2591 // created from a data provider does not appear to have any ownership of the underlying
2595 // data. The original CGFontRef must be kept alive until the copy will n o longer be used. 2592 // data. The original CGFontRef must be kept alive until the copy will n o longer be used.
2596 AutoCFRelease<CGFontRef> cgVariant; 2593 AutoCFRelease<CGFontRef> cgVariant;
2597 if (cgVariations) { 2594 if (cgVariations) {
2598 cgVariant.reset(CGFontCreateCopyWithVariations(cg, cgVariations)); 2595 cgVariant.reset(CGFontCreateCopyWithVariations(cg, cgVariations));
2599 } else { 2596 } else {
2600 cgVariant.reset(cg.release()); 2597 cgVariant.reset(cg.release());
2601 } 2598 }
2602 2599
(...skipping 28 matching lines...) Expand all
2631 2628
2632 return SkSafeRef(GetDefaultFace()); 2629 return SkSafeRef(GetDefaultFace());
2633 } 2630 }
2634 }; 2631 };
2635 2632
2636 /////////////////////////////////////////////////////////////////////////////// 2633 ///////////////////////////////////////////////////////////////////////////////
2637 2634
2638 SkFontMgr* SkFontMgr::Factory() { return new SkFontMgr_Mac; } 2635 SkFontMgr* SkFontMgr::Factory() { return new SkFontMgr_Mac; }
2639 2636
2640 #endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) 2637 #endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
OLDNEW
« no previous file with comments | « src/ports/SkFontHost_FreeType_common.h ('k') | src/ports/SkFontHost_win.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698