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

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

Issue 1316233002: Style Change: NULL->nullptr (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2015-08-27 (Thursday) 10:25:06 EDT Created 5 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/SkFontMgr_fontconfig_factory.cpp ('k') | src/ports/SkImageDecoder_CG.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 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 "SkDWrite.h" 8 #include "SkDWrite.h"
9 #include "SkDWriteFontFileStream.h" 9 #include "SkDWriteFontFileStream.h"
10 #include "SkFontMgr.h" 10 #include "SkFontMgr.h"
(...skipping 24 matching lines...) Expand all
35 35
36 // IDWriteFontFileLoader methods 36 // IDWriteFontFileLoader methods
37 virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey( 37 virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey(
38 void const* fontFileReferenceKey, 38 void const* fontFileReferenceKey,
39 UINT32 fontFileReferenceKeySize, 39 UINT32 fontFileReferenceKeySize,
40 IDWriteFontFileStream** fontFileStream); 40 IDWriteFontFileStream** fontFileStream);
41 41
42 // Takes ownership of stream. 42 // Takes ownership of stream.
43 static HRESULT Create(SkStreamAsset* stream, StreamFontFileLoader** streamFo ntFileLoader) { 43 static HRESULT Create(SkStreamAsset* stream, StreamFontFileLoader** streamFo ntFileLoader) {
44 *streamFontFileLoader = new StreamFontFileLoader(stream); 44 *streamFontFileLoader = new StreamFontFileLoader(stream);
45 if (NULL == streamFontFileLoader) { 45 if (nullptr == streamFontFileLoader) {
46 return E_OUTOFMEMORY; 46 return E_OUTOFMEMORY;
47 } 47 }
48 return S_OK; 48 return S_OK;
49 } 49 }
50 50
51 SkAutoTDelete<SkStreamAsset> fStream; 51 SkAutoTDelete<SkStreamAsset> fStream;
52 52
53 private: 53 private:
54 StreamFontFileLoader(SkStreamAsset* stream) : fStream(stream), fRefCount(1) { } 54 StreamFontFileLoader(SkStreamAsset* stream) : fStream(stream), fRefCount(1) { }
55 virtual ~StreamFontFileLoader() { } 55 virtual ~StreamFontFileLoader() { }
56 56
57 ULONG fRefCount; 57 ULONG fRefCount;
58 }; 58 };
59 59
60 HRESULT StreamFontFileLoader::QueryInterface(REFIID iid, void** ppvObject) { 60 HRESULT StreamFontFileLoader::QueryInterface(REFIID iid, void** ppvObject) {
61 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileLoader)) { 61 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileLoader)) {
62 *ppvObject = this; 62 *ppvObject = this;
63 AddRef(); 63 AddRef();
64 return S_OK; 64 return S_OK;
65 } else { 65 } else {
66 *ppvObject = NULL; 66 *ppvObject = nullptr;
67 return E_NOINTERFACE; 67 return E_NOINTERFACE;
68 } 68 }
69 } 69 }
70 70
71 ULONG StreamFontFileLoader::AddRef() { 71 ULONG StreamFontFileLoader::AddRef() {
72 return InterlockedIncrement(&fRefCount); 72 return InterlockedIncrement(&fRefCount);
73 } 73 }
74 74
75 ULONG StreamFontFileLoader::Release() { 75 ULONG StreamFontFileLoader::Release() {
76 ULONG newCount = InterlockedDecrement(&fRefCount); 76 ULONG newCount = InterlockedDecrement(&fRefCount);
(...skipping 23 matching lines...) Expand all
100 virtual ULONG STDMETHODCALLTYPE AddRef(); 100 virtual ULONG STDMETHODCALLTYPE AddRef();
101 virtual ULONG STDMETHODCALLTYPE Release(); 101 virtual ULONG STDMETHODCALLTYPE Release();
102 102
103 // IDWriteFontFileEnumerator methods 103 // IDWriteFontFileEnumerator methods
104 virtual HRESULT STDMETHODCALLTYPE MoveNext(BOOL* hasCurrentFile); 104 virtual HRESULT STDMETHODCALLTYPE MoveNext(BOOL* hasCurrentFile);
105 virtual HRESULT STDMETHODCALLTYPE GetCurrentFontFile(IDWriteFontFile** fontF ile); 105 virtual HRESULT STDMETHODCALLTYPE GetCurrentFontFile(IDWriteFontFile** fontF ile);
106 106
107 static HRESULT Create(IDWriteFactory* factory, IDWriteFontFileLoader* fontFi leLoader, 107 static HRESULT Create(IDWriteFactory* factory, IDWriteFontFileLoader* fontFi leLoader,
108 StreamFontFileEnumerator** streamFontFileEnumerator) { 108 StreamFontFileEnumerator** streamFontFileEnumerator) {
109 *streamFontFileEnumerator = new StreamFontFileEnumerator(factory, fontFi leLoader); 109 *streamFontFileEnumerator = new StreamFontFileEnumerator(factory, fontFi leLoader);
110 if (NULL == streamFontFileEnumerator) { 110 if (nullptr == streamFontFileEnumerator) {
111 return E_OUTOFMEMORY; 111 return E_OUTOFMEMORY;
112 } 112 }
113 return S_OK; 113 return S_OK;
114 } 114 }
115 private: 115 private:
116 StreamFontFileEnumerator(IDWriteFactory* factory, IDWriteFontFileLoader* fon tFileLoader); 116 StreamFontFileEnumerator(IDWriteFactory* factory, IDWriteFontFileLoader* fon tFileLoader);
117 virtual ~StreamFontFileEnumerator() { } 117 virtual ~StreamFontFileEnumerator() { }
118 118
119 ULONG fRefCount; 119 ULONG fRefCount;
120 120
(...skipping 11 matching lines...) Expand all
132 , fFontFileLoader(SkRefComPtr(fontFileLoader)) 132 , fFontFileLoader(SkRefComPtr(fontFileLoader))
133 , fHasNext(true) 133 , fHasNext(true)
134 { } 134 { }
135 135
136 HRESULT StreamFontFileEnumerator::QueryInterface(REFIID iid, void** ppvObject) { 136 HRESULT StreamFontFileEnumerator::QueryInterface(REFIID iid, void** ppvObject) {
137 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileEnumerator)) { 137 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileEnumerator)) {
138 *ppvObject = this; 138 *ppvObject = this;
139 AddRef(); 139 AddRef();
140 return S_OK; 140 return S_OK;
141 } else { 141 } else {
142 *ppvObject = NULL; 142 *ppvObject = nullptr;
143 return E_NOINTERFACE; 143 return E_NOINTERFACE;
144 } 144 }
145 } 145 }
146 146
147 ULONG StreamFontFileEnumerator::AddRef() { 147 ULONG StreamFontFileEnumerator::AddRef() {
148 return InterlockedIncrement(&fRefCount); 148 return InterlockedIncrement(&fRefCount);
149 } 149 }
150 150
151 ULONG StreamFontFileEnumerator::Release() { 151 ULONG StreamFontFileEnumerator::Release() {
152 ULONG newCount = InterlockedDecrement(&fRefCount); 152 ULONG newCount = InterlockedDecrement(&fRefCount);
153 if (0 == newCount) { 153 if (0 == newCount) {
154 delete this; 154 delete this;
155 } 155 }
156 return newCount; 156 return newCount;
157 } 157 }
158 158
159 HRESULT StreamFontFileEnumerator::MoveNext(BOOL* hasCurrentFile) { 159 HRESULT StreamFontFileEnumerator::MoveNext(BOOL* hasCurrentFile) {
160 *hasCurrentFile = FALSE; 160 *hasCurrentFile = FALSE;
161 161
162 if (!fHasNext) { 162 if (!fHasNext) {
163 return S_OK; 163 return S_OK;
164 } 164 }
165 fHasNext = false; 165 fHasNext = false;
166 166
167 UINT32 dummy = 0; 167 UINT32 dummy = 0;
168 HR(fFactory->CreateCustomFontFileReference( 168 HR(fFactory->CreateCustomFontFileReference(
169 &dummy, //cannot be NULL 169 &dummy, //cannot be nullptr
170 sizeof(dummy), //even if this is 0 170 sizeof(dummy), //even if this is 0
171 fFontFileLoader.get(), 171 fFontFileLoader.get(),
172 &fCurrentFile)); 172 &fCurrentFile));
173 173
174 *hasCurrentFile = TRUE; 174 *hasCurrentFile = TRUE;
175 return S_OK; 175 return S_OK;
176 } 176 }
177 177
178 HRESULT StreamFontFileEnumerator::GetCurrentFontFile(IDWriteFontFile** fontFile) { 178 HRESULT StreamFontFileEnumerator::GetCurrentFontFile(IDWriteFontFile** fontFile) {
179 if (fCurrentFile.get() == NULL) { 179 if (fCurrentFile.get() == nullptr) {
180 *fontFile = NULL; 180 *fontFile = nullptr;
181 return E_FAIL; 181 return E_FAIL;
182 } 182 }
183 183
184 *fontFile = SkRefComPtr(fCurrentFile.get()); 184 *fontFile = SkRefComPtr(fCurrentFile.get());
185 return S_OK; 185 return S_OK;
186 } 186 }
187 187
188 //////////////////////////////////////////////////////////////////////////////// 188 ////////////////////////////////////////////////////////////////////////////////
189 189
190 class StreamFontCollectionLoader : public IDWriteFontCollectionLoader { 190 class StreamFontCollectionLoader : public IDWriteFontCollectionLoader {
191 public: 191 public:
192 // IUnknown methods 192 // IUnknown methods
193 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObjec t); 193 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObjec t);
194 virtual ULONG STDMETHODCALLTYPE AddRef(); 194 virtual ULONG STDMETHODCALLTYPE AddRef();
195 virtual ULONG STDMETHODCALLTYPE Release(); 195 virtual ULONG STDMETHODCALLTYPE Release();
196 196
197 // IDWriteFontCollectionLoader methods 197 // IDWriteFontCollectionLoader methods
198 virtual HRESULT STDMETHODCALLTYPE CreateEnumeratorFromKey( 198 virtual HRESULT STDMETHODCALLTYPE CreateEnumeratorFromKey(
199 IDWriteFactory* factory, 199 IDWriteFactory* factory,
200 void const* collectionKey, 200 void const* collectionKey,
201 UINT32 collectionKeySize, 201 UINT32 collectionKeySize,
202 IDWriteFontFileEnumerator** fontFileEnumerator); 202 IDWriteFontFileEnumerator** fontFileEnumerator);
203 203
204 static HRESULT Create(IDWriteFontFileLoader* fontFileLoader, 204 static HRESULT Create(IDWriteFontFileLoader* fontFileLoader,
205 StreamFontCollectionLoader** streamFontCollectionLoade r) { 205 StreamFontCollectionLoader** streamFontCollectionLoade r) {
206 *streamFontCollectionLoader = new StreamFontCollectionLoader(fontFileLoa der); 206 *streamFontCollectionLoader = new StreamFontCollectionLoader(fontFileLoa der);
207 if (NULL == streamFontCollectionLoader) { 207 if (nullptr == streamFontCollectionLoader) {
208 return E_OUTOFMEMORY; 208 return E_OUTOFMEMORY;
209 } 209 }
210 return S_OK; 210 return S_OK;
211 } 211 }
212 private: 212 private:
213 StreamFontCollectionLoader(IDWriteFontFileLoader* fontFileLoader) 213 StreamFontCollectionLoader(IDWriteFontFileLoader* fontFileLoader)
214 : fRefCount(1) 214 : fRefCount(1)
215 , fFontFileLoader(SkRefComPtr(fontFileLoader)) 215 , fFontFileLoader(SkRefComPtr(fontFileLoader))
216 { } 216 { }
217 virtual ~StreamFontCollectionLoader() { } 217 virtual ~StreamFontCollectionLoader() { }
218 218
219 ULONG fRefCount; 219 ULONG fRefCount;
220 SkTScopedComPtr<IDWriteFontFileLoader> fFontFileLoader; 220 SkTScopedComPtr<IDWriteFontFileLoader> fFontFileLoader;
221 }; 221 };
222 222
223 HRESULT StreamFontCollectionLoader::QueryInterface(REFIID iid, void** ppvObject) { 223 HRESULT StreamFontCollectionLoader::QueryInterface(REFIID iid, void** ppvObject) {
224 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontCollectionLoader)) { 224 if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontCollectionLoader)) {
225 *ppvObject = this; 225 *ppvObject = this;
226 AddRef(); 226 AddRef();
227 return S_OK; 227 return S_OK;
228 } else { 228 } else {
229 *ppvObject = NULL; 229 *ppvObject = nullptr;
230 return E_NOINTERFACE; 230 return E_NOINTERFACE;
231 } 231 }
232 } 232 }
233 233
234 ULONG StreamFontCollectionLoader::AddRef() { 234 ULONG StreamFontCollectionLoader::AddRef() {
235 return InterlockedIncrement(&fRefCount); 235 return InterlockedIncrement(&fRefCount);
236 } 236 }
237 237
238 ULONG StreamFontCollectionLoader::Release() { 238 ULONG StreamFontCollectionLoader::Release() {
239 ULONG newCount = InterlockedDecrement(&fRefCount); 239 ULONG newCount = InterlockedDecrement(&fRefCount);
(...skipping 21 matching lines...) Expand all
261 public: 261 public:
262 /** localeNameLength must include the null terminator. */ 262 /** localeNameLength must include the null terminator. */
263 SkFontMgr_DirectWrite(IDWriteFactory* factory, IDWriteFontCollection* fontCo llection, 263 SkFontMgr_DirectWrite(IDWriteFactory* factory, IDWriteFontCollection* fontCo llection,
264 WCHAR* localeName, int localeNameLength) 264 WCHAR* localeName, int localeNameLength)
265 : fFactory(SkRefComPtr(factory)) 265 : fFactory(SkRefComPtr(factory))
266 , fFontCollection(SkRefComPtr(fontCollection)) 266 , fFontCollection(SkRefComPtr(fontCollection))
267 , fLocaleName(localeNameLength) 267 , fLocaleName(localeNameLength)
268 { 268 {
269 #if SK_HAS_DWRITE_2_H 269 #if SK_HAS_DWRITE_2_H
270 if (!SUCCEEDED(fFactory->QueryInterface(&fFactory2))) { 270 if (!SUCCEEDED(fFactory->QueryInterface(&fFactory2))) {
271 // IUnknown::QueryInterface states that if it fails, punk will be se t to NULL. 271 // IUnknown::QueryInterface states that if it fails, punk will be se t to nullptr.
272 // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/26/96777.aspx 272 // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/26/96777.aspx
273 SK_ALWAYSBREAK(NULL == fFactory2.get()); 273 SK_ALWAYSBREAK(nullptr == fFactory2.get());
274 } 274 }
275 #endif 275 #endif
276 memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR)); 276 memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR));
277 } 277 }
278 278
279 protected: 279 protected:
280 int onCountFamilies() const override; 280 int onCountFamilies() const override;
281 void onGetFamilyName(int index, SkString* familyName) const override; 281 void onGetFamilyName(int index, SkString* familyName) const override;
282 SkFontStyleSet* onCreateStyleSet(int index) const override; 282 SkFontStyleSet* onCreateStyleSet(int index) const override;
283 SkFontStyleSet* onMatchFamily(const char familyName[]) const override; 283 SkFontStyleSet* onMatchFamily(const char familyName[]) const override;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 } 363 }
364 364
365 HRB(are_same(cshFace->fDWriteFontFace.get(), ctxFace->fDWriteFontFace, same) ); 365 HRB(are_same(cshFace->fDWriteFontFace.get(), ctxFace->fDWriteFontFace, same) );
366 if (same) { 366 if (same) {
367 return true; 367 return true;
368 } 368 }
369 369
370 //Check if the two fonts share the same loader and have the same key. 370 //Check if the two fonts share the same loader and have the same key.
371 UINT32 cshNumFiles; 371 UINT32 cshNumFiles;
372 UINT32 ctxNumFiles; 372 UINT32 ctxNumFiles;
373 HRB(cshFace->fDWriteFontFace->GetFiles(&cshNumFiles, NULL)); 373 HRB(cshFace->fDWriteFontFace->GetFiles(&cshNumFiles, nullptr));
374 HRB(ctxFace->fDWriteFontFace->GetFiles(&ctxNumFiles, NULL)); 374 HRB(ctxFace->fDWriteFontFace->GetFiles(&ctxNumFiles, nullptr));
375 if (cshNumFiles != ctxNumFiles) { 375 if (cshNumFiles != ctxNumFiles) {
376 return false; 376 return false;
377 } 377 }
378 378
379 SkTScopedComPtr<IDWriteFontFile> cshFontFile; 379 SkTScopedComPtr<IDWriteFontFile> cshFontFile;
380 SkTScopedComPtr<IDWriteFontFile> ctxFontFile; 380 SkTScopedComPtr<IDWriteFontFile> ctxFontFile;
381 HRB(cshFace->fDWriteFontFace->GetFiles(&cshNumFiles, &cshFontFile)); 381 HRB(cshFace->fDWriteFontFace->GetFiles(&cshNumFiles, &cshFontFile));
382 HRB(ctxFace->fDWriteFontFace->GetFiles(&ctxNumFiles, &ctxFontFile)); 382 HRB(ctxFace->fDWriteFontFace->GetFiles(&ctxNumFiles, &ctxFontFile));
383 383
384 //for (each file) { //we currently only admit fonts from one file. 384 //for (each file) { //we currently only admit fonts from one file.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 wcscmp(cshFaceName.get(), ctxFaceName.get()) == 0; 445 wcscmp(cshFaceName.get(), ctxFaceName.get()) == 0;
446 } 446 }
447 447
448 SkTypeface* SkFontMgr_DirectWrite::createTypefaceFromDWriteFont( 448 SkTypeface* SkFontMgr_DirectWrite::createTypefaceFromDWriteFont(
449 IDWriteFontFace* fontFace, 449 IDWriteFontFace* fontFace,
450 IDWriteFont* font, 450 IDWriteFont* font,
451 IDWriteFontFamily* fontFamily) const { 451 IDWriteFontFamily* fontFamily) const {
452 SkAutoMutexAcquire ama(fTFCacheMutex); 452 SkAutoMutexAcquire ama(fTFCacheMutex);
453 ProtoDWriteTypeface spec = { fontFace, font, fontFamily }; 453 ProtoDWriteTypeface spec = { fontFace, font, fontFamily };
454 SkTypeface* face = fTFCache.findByProcAndRef(FindByDWriteFont, &spec); 454 SkTypeface* face = fTFCache.findByProcAndRef(FindByDWriteFont, &spec);
455 if (NULL == face) { 455 if (nullptr == face) {
456 face = DWriteFontTypeface::Create(fFactory.get(), fontFace, font, fontFa mily); 456 face = DWriteFontTypeface::Create(fFactory.get(), fontFace, font, fontFa mily);
457 if (face) { 457 if (face) {
458 fTFCache.add(face, get_style(font)); 458 fTFCache.add(face, get_style(font));
459 } 459 }
460 } 460 }
461 return face; 461 return face;
462 } 462 }
463 463
464 int SkFontMgr_DirectWrite::onCountFamilies() const { 464 int SkFontMgr_DirectWrite::onCountFamilies() const {
465 return fFontCollection->GetFontFamilyCount(); 465 return fFontCollection->GetFontFamilyCount();
(...skipping 18 matching lines...) Expand all
484 484
485 SkFontStyleSet* SkFontMgr_DirectWrite::onMatchFamily(const char familyName[]) co nst { 485 SkFontStyleSet* SkFontMgr_DirectWrite::onMatchFamily(const char familyName[]) co nst {
486 SkSMallocWCHAR dwFamilyName; 486 SkSMallocWCHAR dwFamilyName;
487 HRN(sk_cstring_to_wchar(familyName, &dwFamilyName)); 487 HRN(sk_cstring_to_wchar(familyName, &dwFamilyName));
488 488
489 UINT32 index; 489 UINT32 index;
490 BOOL exists; 490 BOOL exists;
491 HRNM(fFontCollection->FindFamilyName(dwFamilyName.get(), &index, &exists), 491 HRNM(fFontCollection->FindFamilyName(dwFamilyName.get(), &index, &exists),
492 "Failed while finding family by name."); 492 "Failed while finding family by name.");
493 if (!exists) { 493 if (!exists) {
494 return NULL; 494 return nullptr;
495 } 495 }
496 496
497 return this->onCreateStyleSet(index); 497 return this->onCreateStyleSet(index);
498 } 498 }
499 499
500 SkTypeface* SkFontMgr_DirectWrite::onMatchFamilyStyle(const char familyName[], 500 SkTypeface* SkFontMgr_DirectWrite::onMatchFamilyStyle(const char familyName[],
501 const SkFontStyle& fontsty le) const { 501 const SkFontStyle& fontsty le) const {
502 SkAutoTUnref<SkFontStyleSet> sset(this->matchFamily(familyName)); 502 SkAutoTUnref<SkFontStyleSet> sset(this->matchFamily(familyName));
503 return sset->matchStyle(fontstyle); 503 return sset->matchStyle(fontstyle);
504 } 504 }
505 505
506 class FontFallbackRenderer : public IDWriteTextRenderer { 506 class FontFallbackRenderer : public IDWriteTextRenderer {
507 public: 507 public:
508 FontFallbackRenderer(const SkFontMgr_DirectWrite* outer, UINT32 character) 508 FontFallbackRenderer(const SkFontMgr_DirectWrite* outer, UINT32 character)
509 : fRefCount(1), fOuter(SkSafeRef(outer)), fCharacter(character), fResolv edTypeface(NULL) { 509 : fRefCount(1), fOuter(SkSafeRef(outer)), fCharacter(character), fResolv edTypeface(nullptr) {
510 } 510 }
511 511
512 virtual ~FontFallbackRenderer() { } 512 virtual ~FontFallbackRenderer() { }
513 513
514 // IDWriteTextRenderer methods 514 // IDWriteTextRenderer methods
515 virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun( 515 virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(
516 void* clientDrawingContext, 516 void* clientDrawingContext,
517 FLOAT baselineOriginX, 517 FLOAT baselineOriginX,
518 FLOAT baselineOriginY, 518 FLOAT baselineOriginY,
519 DWRITE_MEASURING_MODE measuringMode, 519 DWRITE_MEASURING_MODE measuringMode,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 609
610 virtual HRESULT STDMETHODCALLTYPE QueryInterface(IID const& riid, void** ppv Object) override{ 610 virtual HRESULT STDMETHODCALLTYPE QueryInterface(IID const& riid, void** ppv Object) override{
611 if (__uuidof(IUnknown) == riid || 611 if (__uuidof(IUnknown) == riid ||
612 __uuidof(IDWritePixelSnapping) == riid || 612 __uuidof(IDWritePixelSnapping) == riid ||
613 __uuidof(IDWriteTextRenderer) == riid) 613 __uuidof(IDWriteTextRenderer) == riid)
614 { 614 {
615 *ppvObject = this; 615 *ppvObject = this;
616 this->AddRef(); 616 this->AddRef();
617 return S_OK; 617 return S_OK;
618 } 618 }
619 *ppvObject = NULL; 619 *ppvObject = nullptr;
620 return E_FAIL; 620 return E_FAIL;
621 } 621 }
622 622
623 SkTypeface* FallbackTypeface() { return fResolvedTypeface; } 623 SkTypeface* FallbackTypeface() { return fResolvedTypeface; }
624 624
625 protected: 625 protected:
626 ULONG fRefCount; 626 ULONG fRefCount;
627 SkAutoTUnref<const SkFontMgr_DirectWrite> fOuter; 627 SkAutoTUnref<const SkFontMgr_DirectWrite> fOuter;
628 UINT32 fCharacter; 628 UINT32 fCharacter;
629 SkTypeface* fResolvedTypeface; 629 SkTypeface* fResolvedTypeface;
(...skipping 11 matching lines...) Expand all
641 641
642 virtual ~FontFallbackSource() { } 642 virtual ~FontFallbackSource() { }
643 643
644 // IDWriteTextAnalysisSource methods 644 // IDWriteTextAnalysisSource methods
645 virtual HRESULT STDMETHODCALLTYPE GetTextAtPosition( 645 virtual HRESULT STDMETHODCALLTYPE GetTextAtPosition(
646 UINT32 textPosition, 646 UINT32 textPosition,
647 WCHAR const** textString, 647 WCHAR const** textString,
648 UINT32* textLength) override 648 UINT32* textLength) override
649 { 649 {
650 if (fLength <= textPosition) { 650 if (fLength <= textPosition) {
651 *textString = NULL; 651 *textString = nullptr;
652 *textLength = 0; 652 *textLength = 0;
653 return S_OK; 653 return S_OK;
654 } 654 }
655 *textString = fString + textPosition; 655 *textString = fString + textPosition;
656 *textLength = fLength - textPosition; 656 *textLength = fLength - textPosition;
657 return S_OK; 657 return S_OK;
658 } 658 }
659 659
660 virtual HRESULT STDMETHODCALLTYPE GetTextBeforePosition( 660 virtual HRESULT STDMETHODCALLTYPE GetTextBeforePosition(
661 UINT32 textPosition, 661 UINT32 textPosition,
662 WCHAR const** textString, 662 WCHAR const** textString,
663 UINT32* textLength) override 663 UINT32* textLength) override
664 { 664 {
665 if (textPosition < 1 || fLength <= textPosition) { 665 if (textPosition < 1 || fLength <= textPosition) {
666 *textString = NULL; 666 *textString = nullptr;
667 *textLength = 0; 667 *textLength = 0;
668 return S_OK; 668 return S_OK;
669 } 669 }
670 *textString = fString; 670 *textString = fString;
671 *textLength = textPosition; 671 *textLength = textPosition;
672 return S_OK; 672 return S_OK;
673 } 673 }
674 674
675 virtual DWRITE_READING_DIRECTION STDMETHODCALLTYPE GetParagraphReadingDirect ion() override { 675 virtual DWRITE_READING_DIRECTION STDMETHODCALLTYPE GetParagraphReadingDirect ion() override {
676 // TODO: this is also interesting. 676 // TODO: this is also interesting.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 } 709 }
710 710
711 virtual HRESULT STDMETHODCALLTYPE QueryInterface(IID const& riid, void** ppv Object) override{ 711 virtual HRESULT STDMETHODCALLTYPE QueryInterface(IID const& riid, void** ppv Object) override{
712 if (__uuidof(IUnknown) == riid || 712 if (__uuidof(IUnknown) == riid ||
713 __uuidof(IDWriteTextAnalysisSource) == riid) 713 __uuidof(IDWriteTextAnalysisSource) == riid)
714 { 714 {
715 *ppvObject = this; 715 *ppvObject = this;
716 this->AddRef(); 716 this->AddRef();
717 return S_OK; 717 return S_OK;
718 } 718 }
719 *ppvObject = NULL; 719 *ppvObject = nullptr;
720 return E_FAIL; 720 return E_FAIL;
721 } 721 }
722 722
723 protected: 723 protected:
724 ULONG fRefCount; 724 ULONG fRefCount;
725 const WCHAR* fString; 725 const WCHAR* fString;
726 UINT32 fLength; 726 UINT32 fLength;
727 const WCHAR* fLocale; 727 const WCHAR* fLocale;
728 IDWriteNumberSubstitution* fNumberSubstitution; 728 IDWriteNumberSubstitution* fNumberSubstitution;
729 }; 729 };
730 730
731 SkTypeface* SkFontMgr_DirectWrite::onMatchFamilyStyleCharacter(const char family Name[], 731 SkTypeface* SkFontMgr_DirectWrite::onMatchFamilyStyleCharacter(const char family Name[],
732 const SkFontStyle & style, 732 const SkFontStyle & style,
733 const char* bcp47 [], int bcp47Count, 733 const char* bcp47 [], int bcp47Count,
734 SkUnichar charact er) const 734 SkUnichar charact er) const
735 { 735 {
736 const DWriteStyle dwStyle(style); 736 const DWriteStyle dwStyle(style);
737 737
738 const WCHAR* dwFamilyName = NULL; 738 const WCHAR* dwFamilyName = nullptr;
739 SkSMallocWCHAR dwFamilyNameLocal; 739 SkSMallocWCHAR dwFamilyNameLocal;
740 if (familyName) { 740 if (familyName) {
741 HRN(sk_cstring_to_wchar(familyName, &dwFamilyNameLocal)); 741 HRN(sk_cstring_to_wchar(familyName, &dwFamilyNameLocal));
742 dwFamilyName = dwFamilyNameLocal; 742 dwFamilyName = dwFamilyNameLocal;
743 } 743 }
744 744
745 WCHAR str[16]; 745 WCHAR str[16];
746 UINT32 strLen = static_cast<UINT32>( 746 UINT32 strLen = static_cast<UINT32>(
747 SkUTF16_FromUnichar(character, reinterpret_cast<uint16_t*>(str))); 747 SkUTF16_FromUnichar(character, reinterpret_cast<uint16_t*>(str)));
748 748
749 const SkSMallocWCHAR* dwBcp47; 749 const SkSMallocWCHAR* dwBcp47;
750 SkSMallocWCHAR dwBcp47Local; 750 SkSMallocWCHAR dwBcp47Local;
751 if (bcp47Count < 1) { 751 if (bcp47Count < 1) {
752 dwBcp47 = &fLocaleName; 752 dwBcp47 = &fLocaleName;
753 } else { 753 } else {
754 // TODO: support fallback stack. 754 // TODO: support fallback stack.
755 // TODO: DirectWrite supports 'zh-CN' or 'zh-Hans', but 'zh' misses comp letely 755 // TODO: DirectWrite supports 'zh-CN' or 'zh-Hans', but 'zh' misses comp letely
756 // and may produce a Japanese font. 756 // and may produce a Japanese font.
757 HRN(sk_cstring_to_wchar(bcp47[bcp47Count - 1], &dwBcp47Local)); 757 HRN(sk_cstring_to_wchar(bcp47[bcp47Count - 1], &dwBcp47Local));
758 dwBcp47 = &dwBcp47Local; 758 dwBcp47 = &dwBcp47Local;
759 } 759 }
760 760
761 #if SK_HAS_DWRITE_2_H 761 #if SK_HAS_DWRITE_2_H
762 if (fFactory2.get()) { 762 if (fFactory2.get()) {
763 SkTScopedComPtr<IDWriteFontFallback> fontFallback; 763 SkTScopedComPtr<IDWriteFontFallback> fontFallback;
764 HRNM(fFactory2->GetSystemFontFallback(&fontFallback), "Could not get sys tem fallback."); 764 HRNM(fFactory2->GetSystemFontFallback(&fontFallback), "Could not get sys tem fallback.");
765 765
766 SkTScopedComPtr<IDWriteNumberSubstitution> numberSubstitution; 766 SkTScopedComPtr<IDWriteNumberSubstitution> numberSubstitution;
767 HRNM(fFactory2->CreateNumberSubstitution(DWRITE_NUMBER_SUBSTITUTION_METH OD_NONE, NULL, TRUE, 767 HRNM(fFactory2->CreateNumberSubstitution(DWRITE_NUMBER_SUBSTITUTION_METH OD_NONE, nullptr, TRUE,
768 &numberSubstitution), 768 &numberSubstitution),
769 "Could not create number substitution."); 769 "Could not create number substitution.");
770 SkTScopedComPtr<FontFallbackSource> fontFallbackSource( 770 SkTScopedComPtr<FontFallbackSource> fontFallbackSource(
771 new FontFallbackSource(str, strLen, *dwBcp47, numberSubstitution.get ())); 771 new FontFallbackSource(str, strLen, *dwBcp47, numberSubstitution.get ()));
772 772
773 UINT32 mappedLength; 773 UINT32 mappedLength;
774 SkTScopedComPtr<IDWriteFont> font; 774 SkTScopedComPtr<IDWriteFont> font;
775 FLOAT scale; 775 FLOAT scale;
776 HRNM(fontFallback->MapCharacters(fontFallbackSource.get(), 776 HRNM(fontFallback->MapCharacters(fontFallbackSource.get(),
777 0, // textPosition, 777 0, // textPosition,
778 strLen, 778 strLen,
779 fFontCollection.get(), 779 fFontCollection.get(),
780 dwFamilyName, 780 dwFamilyName,
781 dwStyle.fWeight, 781 dwStyle.fWeight,
782 dwStyle.fSlant, 782 dwStyle.fSlant,
783 dwStyle.fWidth, 783 dwStyle.fWidth,
784 &mappedLength, 784 &mappedLength,
785 &font, 785 &font,
786 &scale), 786 &scale),
787 "Could not map characters"); 787 "Could not map characters");
788 if (!font.get()) { 788 if (!font.get()) {
789 return NULL; 789 return nullptr;
790 } 790 }
791 791
792 SkTScopedComPtr<IDWriteFontFace> fontFace; 792 SkTScopedComPtr<IDWriteFontFace> fontFace;
793 HRNM(font->CreateFontFace(&fontFace), "Could not get font face from font ."); 793 HRNM(font->CreateFontFace(&fontFace), "Could not get font face from font .");
794 794
795 SkTScopedComPtr<IDWriteFontFamily> fontFamily; 795 SkTScopedComPtr<IDWriteFontFamily> fontFamily;
796 HRNM(font->GetFontFamily(&fontFamily), "Could not get family from font." ); 796 HRNM(font->GetFontFamily(&fontFamily), "Could not get family from font." );
797 return this->createTypefaceFromDWriteFont(fontFace.get(), font.get(), fo ntFamily.get()); 797 return this->createTypefaceFromDWriteFont(fontFace.get(), font.get(), fo ntFamily.get());
798 } 798 }
799 #else 799 #else
(...skipping 13 matching lines...) Expand all
813 813
814 SkTScopedComPtr<IDWriteTextLayout> fallbackLayout; 814 SkTScopedComPtr<IDWriteTextLayout> fallbackLayout;
815 HRNM(fFactory->CreateTextLayout(str, strLen, fallbackFormat.get(), 815 HRNM(fFactory->CreateTextLayout(str, strLen, fallbackFormat.get(),
816 200.0f, 200.0f, 816 200.0f, 200.0f,
817 &fallbackLayout), 817 &fallbackLayout),
818 "Could not create text layout."); 818 "Could not create text layout.");
819 819
820 SkTScopedComPtr<FontFallbackRenderer> fontFallbackRenderer( 820 SkTScopedComPtr<FontFallbackRenderer> fontFallbackRenderer(
821 new FontFallbackRenderer(this, character)); 821 new FontFallbackRenderer(this, character));
822 822
823 HRNM(fallbackLayout->Draw(NULL, fontFallbackRenderer.get(), 50.0f, 50.0f), 823 HRNM(fallbackLayout->Draw(nullptr, fontFallbackRenderer.get(), 50.0f, 50.0f) ,
824 "Could not draw layout with renderer."); 824 "Could not draw layout with renderer.");
825 825
826 return fontFallbackRenderer->FallbackTypeface(); 826 return fontFallbackRenderer->FallbackTypeface();
827 } 827 }
828 828
829 SkTypeface* SkFontMgr_DirectWrite::onMatchFaceStyle(const SkTypeface* familyMemb er, 829 SkTypeface* SkFontMgr_DirectWrite::onMatchFaceStyle(const SkTypeface* familyMemb er,
830 const SkFontStyle& fontstyle ) const { 830 const SkFontStyle& fontstyle ) const {
831 SkString familyName; 831 SkString familyName;
832 SkFontStyleSet_DirectWrite sset( 832 SkFontStyleSet_DirectWrite sset(
833 this, ((DWriteFontTypeface*)familyMember)->fDWriteFontFamily.get() 833 this, ((DWriteFontTypeface*)familyMember)->fDWriteFontFamily.get()
834 ); 834 );
835 return sset.matchStyle(fontstyle); 835 return sset.matchStyle(fontstyle);
836 } 836 }
837 837
838 template <typename T> class SkAutoIDWriteUnregister { 838 template <typename T> class SkAutoIDWriteUnregister {
839 public: 839 public:
840 SkAutoIDWriteUnregister(IDWriteFactory* factory, T* unregister) 840 SkAutoIDWriteUnregister(IDWriteFactory* factory, T* unregister)
841 : fFactory(factory), fUnregister(unregister) 841 : fFactory(factory), fUnregister(unregister)
842 { } 842 { }
843 843
844 ~SkAutoIDWriteUnregister() { 844 ~SkAutoIDWriteUnregister() {
845 if (fUnregister) { 845 if (fUnregister) {
846 unregister(fFactory, fUnregister); 846 unregister(fFactory, fUnregister);
847 } 847 }
848 } 848 }
849 849
850 T* detatch() { 850 T* detatch() {
851 T* old = fUnregister; 851 T* old = fUnregister;
852 fUnregister = NULL; 852 fUnregister = nullptr;
853 return old; 853 return old;
854 } 854 }
855 855
856 private: 856 private:
857 HRESULT unregister(IDWriteFactory* factory, IDWriteFontFileLoader* unregiste r) { 857 HRESULT unregister(IDWriteFactory* factory, IDWriteFontFileLoader* unregiste r) {
858 return factory->UnregisterFontFileLoader(unregister); 858 return factory->UnregisterFontFileLoader(unregister);
859 } 859 }
860 860
861 HRESULT unregister(IDWriteFactory* factory, IDWriteFontCollectionLoader* unr egister) { 861 HRESULT unregister(IDWriteFactory* factory, IDWriteFontCollectionLoader* unr egister) {
862 return factory->UnregisterFontCollectionLoader(unregister); 862 return factory->UnregisterFontCollectionLoader(unregister);
(...skipping 11 matching lines...) Expand all
874 SkAutoIDWriteUnregister<StreamFontFileLoader> autoUnregisterFontFileLoader( 874 SkAutoIDWriteUnregister<StreamFontFileLoader> autoUnregisterFontFileLoader(
875 fFactory.get(), fontFileLoader.get()); 875 fFactory.get(), fontFileLoader.get());
876 876
877 SkTScopedComPtr<StreamFontCollectionLoader> fontCollectionLoader; 877 SkTScopedComPtr<StreamFontCollectionLoader> fontCollectionLoader;
878 HRN(StreamFontCollectionLoader::Create(fontFileLoader.get(), &fontCollection Loader)); 878 HRN(StreamFontCollectionLoader::Create(fontFileLoader.get(), &fontCollection Loader));
879 HRN(fFactory->RegisterFontCollectionLoader(fontCollectionLoader.get())); 879 HRN(fFactory->RegisterFontCollectionLoader(fontCollectionLoader.get()));
880 SkAutoIDWriteUnregister<StreamFontCollectionLoader> autoUnregisterFontCollec tionLoader( 880 SkAutoIDWriteUnregister<StreamFontCollectionLoader> autoUnregisterFontCollec tionLoader(
881 fFactory.get(), fontCollectionLoader.get()); 881 fFactory.get(), fontCollectionLoader.get());
882 882
883 SkTScopedComPtr<IDWriteFontCollection> fontCollection; 883 SkTScopedComPtr<IDWriteFontCollection> fontCollection;
884 HRN(fFactory->CreateCustomFontCollection(fontCollectionLoader.get(), NULL, 0 , &fontCollection)); 884 HRN(fFactory->CreateCustomFontCollection(fontCollectionLoader.get(), nullptr , 0, &fontCollection));
885 885
886 // Find the first non-simulated font which has the given ttc index. 886 // Find the first non-simulated font which has the given ttc index.
887 UINT32 familyCount = fontCollection->GetFontFamilyCount(); 887 UINT32 familyCount = fontCollection->GetFontFamilyCount();
888 for (UINT32 familyIndex = 0; familyIndex < familyCount; ++familyIndex) { 888 for (UINT32 familyIndex = 0; familyIndex < familyCount; ++familyIndex) {
889 SkTScopedComPtr<IDWriteFontFamily> fontFamily; 889 SkTScopedComPtr<IDWriteFontFamily> fontFamily;
890 HRN(fontCollection->GetFontFamily(familyIndex, &fontFamily)); 890 HRN(fontCollection->GetFontFamily(familyIndex, &fontFamily));
891 891
892 UINT32 fontCount = fontFamily->GetFontCount(); 892 UINT32 fontCount = fontFamily->GetFontCount();
893 for (UINT32 fontIndex = 0; fontIndex < fontCount; ++fontIndex) { 893 for (UINT32 fontIndex = 0; fontIndex < fontCount; ++fontIndex) {
894 SkTScopedComPtr<IDWriteFont> font; 894 SkTScopedComPtr<IDWriteFont> font;
895 HRN(fontFamily->GetFont(fontIndex, &font)); 895 HRN(fontFamily->GetFont(fontIndex, &font));
896 if (font->GetSimulations() != DWRITE_FONT_SIMULATIONS_NONE) { 896 if (font->GetSimulations() != DWRITE_FONT_SIMULATIONS_NONE) {
897 continue; 897 continue;
898 } 898 }
899 899
900 SkTScopedComPtr<IDWriteFontFace> fontFace; 900 SkTScopedComPtr<IDWriteFontFace> fontFace;
901 HRN(font->CreateFontFace(&fontFace)); 901 HRN(font->CreateFontFace(&fontFace));
902 902
903 UINT32 faceIndex = fontFace->GetIndex(); 903 UINT32 faceIndex = fontFace->GetIndex();
904 if (faceIndex == ttcIndex) { 904 if (faceIndex == ttcIndex) {
905 return DWriteFontTypeface::Create(fFactory.get(), 905 return DWriteFontTypeface::Create(fFactory.get(),
906 fontFace.get(), font.get(), fo ntFamily.get(), 906 fontFace.get(), font.get(), fo ntFamily.get(),
907 autoUnregisterFontFileLoader.d etatch(), 907 autoUnregisterFontFileLoader.d etatch(),
908 autoUnregisterFontCollectionLo ader.detatch()); 908 autoUnregisterFontCollectionLo ader.detatch());
909 } 909 }
910 } 910 }
911 } 911 }
912 912
913 return NULL; 913 return nullptr;
914 } 914 }
915 915
916 SkTypeface* SkFontMgr_DirectWrite::onCreateFromData(SkData* data, int ttcIndex) const { 916 SkTypeface* SkFontMgr_DirectWrite::onCreateFromData(SkData* data, int ttcIndex) const {
917 return this->createFromStream(new SkMemoryStream(data), ttcIndex); 917 return this->createFromStream(new SkMemoryStream(data), ttcIndex);
918 } 918 }
919 919
920 SkTypeface* SkFontMgr_DirectWrite::onCreateFromFile(const char path[], int ttcIn dex) const { 920 SkTypeface* SkFontMgr_DirectWrite::onCreateFromFile(const char path[], int ttcIn dex) const {
921 return this->createFromStream(SkStream::NewFromFile(path), ttcIndex); 921 return this->createFromStream(SkStream::NewFromFile(path), ttcIndex);
922 } 922 }
923 923
(...skipping 26 matching lines...) Expand all
950 SkTypeface* SkFontMgr_DirectWrite::onLegacyCreateTypeface(const char familyName[ ], 950 SkTypeface* SkFontMgr_DirectWrite::onLegacyCreateTypeface(const char familyName[ ],
951 unsigned styleBits) co nst { 951 unsigned styleBits) co nst {
952 SkTScopedComPtr<IDWriteFontFamily> fontFamily; 952 SkTScopedComPtr<IDWriteFontFamily> fontFamily;
953 if (familyName) { 953 if (familyName) {
954 SkSMallocWCHAR wideFamilyName; 954 SkSMallocWCHAR wideFamilyName;
955 if (SUCCEEDED(sk_cstring_to_wchar(familyName, &wideFamilyName))) { 955 if (SUCCEEDED(sk_cstring_to_wchar(familyName, &wideFamilyName))) {
956 this->getByFamilyName(wideFamilyName, &fontFamily); 956 this->getByFamilyName(wideFamilyName, &fontFamily);
957 } 957 }
958 } 958 }
959 959
960 if (NULL == fontFamily.get()) { 960 if (nullptr == fontFamily.get()) {
961 // No family with given name, try default. 961 // No family with given name, try default.
962 HRNM(this->getDefaultFontFamily(&fontFamily), "Could not get default fon t family."); 962 HRNM(this->getDefaultFontFamily(&fontFamily), "Could not get default fon t family.");
963 } 963 }
964 964
965 if (NULL == fontFamily.get()) { 965 if (nullptr == fontFamily.get()) {
966 // Could not obtain the default font. 966 // Could not obtain the default font.
967 HRNM(fFontCollection->GetFontFamily(0, &fontFamily), 967 HRNM(fFontCollection->GetFontFamily(0, &fontFamily),
968 "Could not get default-default font family."); 968 "Could not get default-default font family.");
969 } 969 }
970 970
971 SkTScopedComPtr<IDWriteFont> font; 971 SkTScopedComPtr<IDWriteFont> font;
972 DWRITE_FONT_WEIGHT weight = (styleBits & SkTypeface::kBold) 972 DWRITE_FONT_WEIGHT weight = (styleBits & SkTypeface::kBold)
973 ? DWRITE_FONT_WEIGHT_BOLD 973 ? DWRITE_FONT_WEIGHT_BOLD
974 : DWRITE_FONT_WEIGHT_NORMAL; 974 : DWRITE_FONT_WEIGHT_NORMAL;
975 DWRITE_FONT_STRETCH stretch = DWRITE_FONT_STRETCH_NORMAL; 975 DWRITE_FONT_STRETCH stretch = DWRITE_FONT_STRETCH_NORMAL;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 HRNM(font->CreateFontFace(&fontFace), "Could not create font face."); 1058 HRNM(font->CreateFontFace(&fontFace), "Could not create font face.");
1059 1059
1060 return fFontMgr->createTypefaceFromDWriteFont(fontFace.get(), font.get(), 1060 return fFontMgr->createTypefaceFromDWriteFont(fontFace.get(), font.get(),
1061 fFontFamily.get()); 1061 fFontFamily.get());
1062 } 1062 }
1063 1063
1064 //////////////////////////////////////////////////////////////////////////////// 1064 ////////////////////////////////////////////////////////////////////////////////
1065 #include "SkTypeface_win.h" 1065 #include "SkTypeface_win.h"
1066 1066
1067 SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory) { 1067 SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory) {
1068 if (NULL == factory) { 1068 if (nullptr == factory) {
1069 factory = sk_get_dwrite_factory(); 1069 factory = sk_get_dwrite_factory();
1070 if (NULL == factory) { 1070 if (nullptr == factory) {
1071 return NULL; 1071 return nullptr;
1072 } 1072 }
1073 } 1073 }
1074 1074
1075 SkTScopedComPtr<IDWriteFontCollection> sysFontCollection; 1075 SkTScopedComPtr<IDWriteFontCollection> sysFontCollection;
1076 HRNM(factory->GetSystemFontCollection(&sysFontCollection, FALSE), 1076 HRNM(factory->GetSystemFontCollection(&sysFontCollection, FALSE),
1077 "Could not get system font collection."); 1077 "Could not get system font collection.");
1078 1078
1079 WCHAR localeNameStorage[LOCALE_NAME_MAX_LENGTH]; 1079 WCHAR localeNameStorage[LOCALE_NAME_MAX_LENGTH];
1080 WCHAR* localeName = NULL; 1080 WCHAR* localeName = nullptr;
1081 int localeNameLen = 0; 1081 int localeNameLen = 0;
1082 1082
1083 // Dynamically load GetUserDefaultLocaleName function, as it is not availabl e on XP. 1083 // Dynamically load GetUserDefaultLocaleName function, as it is not availabl e on XP.
1084 SkGetUserDefaultLocaleNameProc getUserDefaultLocaleNameProc = NULL; 1084 SkGetUserDefaultLocaleNameProc getUserDefaultLocaleNameProc = nullptr;
1085 HRESULT hr = SkGetGetUserDefaultLocaleNameProc(&getUserDefaultLocaleNameProc ); 1085 HRESULT hr = SkGetGetUserDefaultLocaleNameProc(&getUserDefaultLocaleNameProc );
1086 if (NULL == getUserDefaultLocaleNameProc) { 1086 if (nullptr == getUserDefaultLocaleNameProc) {
1087 SK_TRACEHR(hr, "Could not get GetUserDefaultLocaleName."); 1087 SK_TRACEHR(hr, "Could not get GetUserDefaultLocaleName.");
1088 } else { 1088 } else {
1089 localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_N AME_MAX_LENGTH); 1089 localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_N AME_MAX_LENGTH);
1090 if (localeNameLen) { 1090 if (localeNameLen) {
1091 localeName = localeNameStorage; 1091 localeName = localeNameStorage;
1092 }; 1092 };
1093 } 1093 }
1094 1094
1095 return new SkFontMgr_DirectWrite(factory, sysFontCollection.get(), localeNam e, localeNameLen); 1095 return new SkFontMgr_DirectWrite(factory, sysFontCollection.get(), localeNam e, localeNameLen);
1096 } 1096 }
1097 1097
1098 #include "SkFontMgr_indirect.h" 1098 #include "SkFontMgr_indirect.h"
1099 SK_API SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) { 1099 SK_API SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) {
1100 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite()); 1100 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite());
1101 if (impl.get() == NULL) { 1101 if (impl.get() == nullptr) {
1102 return NULL; 1102 return nullptr;
1103 } 1103 }
1104 return new SkFontMgr_Indirect(impl.get(), proxy); 1104 return new SkFontMgr_Indirect(impl.get(), proxy);
1105 } 1105 }
OLDNEW
« no previous file with comments | « src/ports/SkFontMgr_fontconfig_factory.cpp ('k') | src/ports/SkImageDecoder_CG.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698