| 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 "SkDataTable.h" | 8 #include "SkDataTable.h" |
| 9 #include "SkDWrite.h" | 9 #include "SkDWrite.h" |
| 10 #include "SkDWriteFontFileStream.h" | 10 #include "SkDWriteFontFileStream.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 | 84 |
| 85 /** localeNameLength must include the null terminator. */ | 85 /** localeNameLength must include the null terminator. */ |
| 86 SkRemotableFontMgr_DirectWrite(IDWriteFontCollection* fontCollection, | 86 SkRemotableFontMgr_DirectWrite(IDWriteFontCollection* fontCollection, |
| 87 WCHAR* localeName, int localeNameLength) | 87 WCHAR* localeName, int localeNameLength) |
| 88 : fFontCollection(SkRefComPtr(fontCollection)) | 88 : fFontCollection(SkRefComPtr(fontCollection)) |
| 89 , fLocaleName(localeNameLength) | 89 , fLocaleName(localeNameLength) |
| 90 { | 90 { |
| 91 memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR)); | 91 memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR)); |
| 92 } | 92 } |
| 93 | 93 |
| 94 SkDataTable* getFamilyNames() const SK_OVERRIDE { | 94 SkDataTable* getFamilyNames() const override { |
| 95 int count = fFontCollection->GetFontFamilyCount(); | 95 int count = fFontCollection->GetFontFamilyCount(); |
| 96 | 96 |
| 97 SkDataTableBuilder names(1024); | 97 SkDataTableBuilder names(1024); |
| 98 for (int index = 0; index < count; ++index) { | 98 for (int index = 0; index < count; ++index) { |
| 99 SkTScopedComPtr<IDWriteFontFamily> fontFamily; | 99 SkTScopedComPtr<IDWriteFontFamily> fontFamily; |
| 100 HRNM(fFontCollection->GetFontFamily(index, &fontFamily), | 100 HRNM(fFontCollection->GetFontFamily(index, &fontFamily), |
| 101 "Could not get requested family."); | 101 "Could not get requested family."); |
| 102 | 102 |
| 103 SkTScopedComPtr<IDWriteLocalizedStrings> familyNames; | 103 SkTScopedComPtr<IDWriteLocalizedStrings> familyNames; |
| 104 HRNM(fontFamily->GetFamilyNames(&familyNames), "Could not get family
names."); | 104 HRNM(fontFamily->GetFamilyNames(&familyNames), "Could not get family
names."); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 SkASSERT(false); | 151 SkASSERT(false); |
| 152 } | 152 } |
| 153 | 153 |
| 154 int weight = font->GetWeight(); | 154 int weight = font->GetWeight(); |
| 155 int width = font->GetStretch(); | 155 int width = font->GetStretch(); |
| 156 | 156 |
| 157 fontId->fFontStyle = SkFontStyle(weight, width, slant); | 157 fontId->fFontStyle = SkFontStyle(weight, width, slant); |
| 158 return S_OK; | 158 return S_OK; |
| 159 } | 159 } |
| 160 | 160 |
| 161 SkRemotableFontIdentitySet* getIndex(int familyIndex) const SK_OVERRIDE { | 161 SkRemotableFontIdentitySet* getIndex(int familyIndex) const override { |
| 162 SkTScopedComPtr<IDWriteFontFamily> fontFamily; | 162 SkTScopedComPtr<IDWriteFontFamily> fontFamily; |
| 163 HRNM(fFontCollection->GetFontFamily(familyIndex, &fontFamily), | 163 HRNM(fFontCollection->GetFontFamily(familyIndex, &fontFamily), |
| 164 "Could not get requested family."); | 164 "Could not get requested family."); |
| 165 | 165 |
| 166 int count = fontFamily->GetFontCount(); | 166 int count = fontFamily->GetFontCount(); |
| 167 SkFontIdentity* fontIds; | 167 SkFontIdentity* fontIds; |
| 168 SkAutoTUnref<SkRemotableFontIdentitySet> fontIdSet( | 168 SkAutoTUnref<SkRemotableFontIdentitySet> fontIdSet( |
| 169 new SkRemotableFontIdentitySet(count, &fontIds)); | 169 new SkRemotableFontIdentitySet(count, &fontIds)); |
| 170 for (int fontIndex = 0; fontIndex < count; ++fontIndex) { | 170 for (int fontIndex = 0; fontIndex < count; ++fontIndex) { |
| 171 SkTScopedComPtr<IDWriteFont> font; | 171 SkTScopedComPtr<IDWriteFont> font; |
| 172 HRNM(fontFamily->GetFont(fontIndex, &font), "Could not get font."); | 172 HRNM(fontFamily->GetFont(fontIndex, &font), "Could not get font."); |
| 173 | 173 |
| 174 HRN(FontToIdentity(font.get(), &fontIds[fontIndex])); | 174 HRN(FontToIdentity(font.get(), &fontIds[fontIndex])); |
| 175 } | 175 } |
| 176 return fontIdSet.detach(); | 176 return fontIdSet.detach(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 virtual SkFontIdentity matchIndexStyle(int familyIndex, | 179 virtual SkFontIdentity matchIndexStyle(int familyIndex, |
| 180 const SkFontStyle& pattern) const SK_
OVERRIDE | 180 const SkFontStyle& pattern) const ove
rride |
| 181 { | 181 { |
| 182 SkFontIdentity identity = { SkFontIdentity::kInvalidDataId }; | 182 SkFontIdentity identity = { SkFontIdentity::kInvalidDataId }; |
| 183 | 183 |
| 184 SkTScopedComPtr<IDWriteFontFamily> fontFamily; | 184 SkTScopedComPtr<IDWriteFontFamily> fontFamily; |
| 185 HR_GENERAL(fFontCollection->GetFontFamily(familyIndex, &fontFamily), | 185 HR_GENERAL(fFontCollection->GetFontFamily(familyIndex, &fontFamily), |
| 186 "Could not get requested family.", | 186 "Could not get requested family.", |
| 187 identity); | 187 identity); |
| 188 | 188 |
| 189 const DWriteStyle dwStyle(pattern); | 189 const DWriteStyle dwStyle(pattern); |
| 190 SkTScopedComPtr<IDWriteFont> font; | 190 SkTScopedComPtr<IDWriteFont> font; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 209 } | 209 } |
| 210 | 210 |
| 211 size_t len = wcsnlen_s(metrics.lfMessageFont.lfFaceName, LF_FACESIZE) +
1; | 211 size_t len = wcsnlen_s(metrics.lfMessageFont.lfFaceName, LF_FACESIZE) +
1; |
| 212 if (0 != wcsncpy_s(name->reset(len), len, metrics.lfMessageFont.lfFaceNa
me, _TRUNCATE)) { | 212 if (0 != wcsncpy_s(name->reset(len), len, metrics.lfMessageFont.lfFaceNa
me, _TRUNCATE)) { |
| 213 return E_UNEXPECTED; | 213 return E_UNEXPECTED; |
| 214 } | 214 } |
| 215 | 215 |
| 216 return S_OK; | 216 return S_OK; |
| 217 } | 217 } |
| 218 | 218 |
| 219 SkRemotableFontIdentitySet* matchName(const char familyName[]) const SK_OVER
RIDE { | 219 SkRemotableFontIdentitySet* matchName(const char familyName[]) const overrid
e { |
| 220 SkSMallocWCHAR dwFamilyName; | 220 SkSMallocWCHAR dwFamilyName; |
| 221 if (NULL == familyName) { | 221 if (NULL == familyName) { |
| 222 HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName), | 222 HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName), |
| 223 NULL, SkRemotableFontIdentitySet::NewEmpty()); | 223 NULL, SkRemotableFontIdentitySet::NewEmpty()); |
| 224 } else { | 224 } else { |
| 225 HR_GENERAL(sk_cstring_to_wchar(familyName, &dwFamilyName), | 225 HR_GENERAL(sk_cstring_to_wchar(familyName, &dwFamilyName), |
| 226 NULL, SkRemotableFontIdentitySet::NewEmpty()); | 226 NULL, SkRemotableFontIdentitySet::NewEmpty()); |
| 227 } | 227 } |
| 228 | 228 |
| 229 UINT32 index; | 229 UINT32 index; |
| 230 BOOL exists; | 230 BOOL exists; |
| 231 HR_GENERAL(fFontCollection->FindFamilyName(dwFamilyName.get(), &index, &
exists), | 231 HR_GENERAL(fFontCollection->FindFamilyName(dwFamilyName.get(), &index, &
exists), |
| 232 "Failed while finding family by name.", | 232 "Failed while finding family by name.", |
| 233 SkRemotableFontIdentitySet::NewEmpty()); | 233 SkRemotableFontIdentitySet::NewEmpty()); |
| 234 if (!exists) { | 234 if (!exists) { |
| 235 return SkRemotableFontIdentitySet::NewEmpty(); | 235 return SkRemotableFontIdentitySet::NewEmpty(); |
| 236 } | 236 } |
| 237 | 237 |
| 238 return this->getIndex(index); | 238 return this->getIndex(index); |
| 239 } | 239 } |
| 240 | 240 |
| 241 virtual SkFontIdentity matchNameStyle(const char familyName[], | 241 virtual SkFontIdentity matchNameStyle(const char familyName[], |
| 242 const SkFontStyle& style) const SK_OVE
RRIDE | 242 const SkFontStyle& style) const overri
de |
| 243 { | 243 { |
| 244 SkFontIdentity identity = { SkFontIdentity::kInvalidDataId }; | 244 SkFontIdentity identity = { SkFontIdentity::kInvalidDataId }; |
| 245 | 245 |
| 246 SkSMallocWCHAR dwFamilyName; | 246 SkSMallocWCHAR dwFamilyName; |
| 247 if (NULL == familyName) { | 247 if (NULL == familyName) { |
| 248 HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName), NULL, identity); | 248 HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName), NULL, identity); |
| 249 } else { | 249 } else { |
| 250 HR_GENERAL(sk_cstring_to_wchar(familyName, &dwFamilyName), NULL, ide
ntity); | 250 HR_GENERAL(sk_cstring_to_wchar(familyName, &dwFamilyName), NULL, ide
ntity); |
| 251 } | 251 } |
| 252 | 252 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 272 virtual ~FontFallbackRenderer() { } | 272 virtual ~FontFallbackRenderer() { } |
| 273 | 273 |
| 274 // IDWriteTextRenderer methods | 274 // IDWriteTextRenderer methods |
| 275 virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun( | 275 virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun( |
| 276 void* clientDrawingContext, | 276 void* clientDrawingContext, |
| 277 FLOAT baselineOriginX, | 277 FLOAT baselineOriginX, |
| 278 FLOAT baselineOriginY, | 278 FLOAT baselineOriginY, |
| 279 DWRITE_MEASURING_MODE measuringMode, | 279 DWRITE_MEASURING_MODE measuringMode, |
| 280 DWRITE_GLYPH_RUN const* glyphRun, | 280 DWRITE_GLYPH_RUN const* glyphRun, |
| 281 DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription, | 281 DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription, |
| 282 IUnknown* clientDrawingEffect) SK_OVERRIDE | 282 IUnknown* clientDrawingEffect) override |
| 283 { | 283 { |
| 284 SkTScopedComPtr<IDWriteFont> font; | 284 SkTScopedComPtr<IDWriteFont> font; |
| 285 HRM(fOuter->fFontCollection->GetFontFromFontFace(glyphRun->fontFace,
&font), | 285 HRM(fOuter->fFontCollection->GetFontFromFontFace(glyphRun->fontFace,
&font), |
| 286 "Could not get font from font face."); | 286 "Could not get font from font face."); |
| 287 | 287 |
| 288 // It is possible that the font passed does not actually have the re
quested character, | 288 // It is possible that the font passed does not actually have the re
quested character, |
| 289 // due to no font being found and getting the fallback font. | 289 // due to no font being found and getting the fallback font. |
| 290 // Check that the font actually contains the requested character. | 290 // Check that the font actually contains the requested character. |
| 291 BOOL exists; | 291 BOOL exists; |
| 292 HRM(font->HasCharacter(fCharacter, &exists), "Could not find charact
er."); | 292 HRM(font->HasCharacter(fCharacter, &exists), "Could not find charact
er."); |
| 293 | 293 |
| 294 if (exists) { | 294 if (exists) { |
| 295 HR(fOuter->FontToIdentity(font.get(), &fIdentity)); | 295 HR(fOuter->FontToIdentity(font.get(), &fIdentity)); |
| 296 } | 296 } |
| 297 | 297 |
| 298 return S_OK; | 298 return S_OK; |
| 299 } | 299 } |
| 300 | 300 |
| 301 virtual HRESULT STDMETHODCALLTYPE DrawUnderline( | 301 virtual HRESULT STDMETHODCALLTYPE DrawUnderline( |
| 302 void* clientDrawingContext, | 302 void* clientDrawingContext, |
| 303 FLOAT baselineOriginX, | 303 FLOAT baselineOriginX, |
| 304 FLOAT baselineOriginY, | 304 FLOAT baselineOriginY, |
| 305 DWRITE_UNDERLINE const* underline, | 305 DWRITE_UNDERLINE const* underline, |
| 306 IUnknown* clientDrawingEffect) SK_OVERRIDE | 306 IUnknown* clientDrawingEffect) override |
| 307 { return E_NOTIMPL; } | 307 { return E_NOTIMPL; } |
| 308 | 308 |
| 309 virtual HRESULT STDMETHODCALLTYPE DrawStrikethrough( | 309 virtual HRESULT STDMETHODCALLTYPE DrawStrikethrough( |
| 310 void* clientDrawingContext, | 310 void* clientDrawingContext, |
| 311 FLOAT baselineOriginX, | 311 FLOAT baselineOriginX, |
| 312 FLOAT baselineOriginY, | 312 FLOAT baselineOriginY, |
| 313 DWRITE_STRIKETHROUGH const* strikethrough, | 313 DWRITE_STRIKETHROUGH const* strikethrough, |
| 314 IUnknown* clientDrawingEffect) SK_OVERRIDE | 314 IUnknown* clientDrawingEffect) override |
| 315 { return E_NOTIMPL; } | 315 { return E_NOTIMPL; } |
| 316 | 316 |
| 317 virtual HRESULT STDMETHODCALLTYPE DrawInlineObject( | 317 virtual HRESULT STDMETHODCALLTYPE DrawInlineObject( |
| 318 void* clientDrawingContext, | 318 void* clientDrawingContext, |
| 319 FLOAT originX, | 319 FLOAT originX, |
| 320 FLOAT originY, | 320 FLOAT originY, |
| 321 IDWriteInlineObject* inlineObject, | 321 IDWriteInlineObject* inlineObject, |
| 322 BOOL isSideways, | 322 BOOL isSideways, |
| 323 BOOL isRightToLeft, | 323 BOOL isRightToLeft, |
| 324 IUnknown* clientDrawingEffect) SK_OVERRIDE | 324 IUnknown* clientDrawingEffect) override |
| 325 { return E_NOTIMPL; } | 325 { return E_NOTIMPL; } |
| 326 | 326 |
| 327 // IDWritePixelSnapping methods | 327 // IDWritePixelSnapping methods |
| 328 virtual HRESULT STDMETHODCALLTYPE IsPixelSnappingDisabled( | 328 virtual HRESULT STDMETHODCALLTYPE IsPixelSnappingDisabled( |
| 329 void* clientDrawingContext, | 329 void* clientDrawingContext, |
| 330 BOOL* isDisabled) SK_OVERRIDE | 330 BOOL* isDisabled) override |
| 331 { | 331 { |
| 332 *isDisabled = FALSE; | 332 *isDisabled = FALSE; |
| 333 return S_OK; | 333 return S_OK; |
| 334 } | 334 } |
| 335 | 335 |
| 336 virtual HRESULT STDMETHODCALLTYPE GetCurrentTransform( | 336 virtual HRESULT STDMETHODCALLTYPE GetCurrentTransform( |
| 337 void* clientDrawingContext, | 337 void* clientDrawingContext, |
| 338 DWRITE_MATRIX* transform) SK_OVERRIDE | 338 DWRITE_MATRIX* transform) override |
| 339 { | 339 { |
| 340 const DWRITE_MATRIX ident = {1.0, 0.0, 0.0, 1.0, 0.0, 0.0}; | 340 const DWRITE_MATRIX ident = {1.0, 0.0, 0.0, 1.0, 0.0, 0.0}; |
| 341 *transform = ident; | 341 *transform = ident; |
| 342 return S_OK; | 342 return S_OK; |
| 343 } | 343 } |
| 344 | 344 |
| 345 virtual HRESULT STDMETHODCALLTYPE GetPixelsPerDip( | 345 virtual HRESULT STDMETHODCALLTYPE GetPixelsPerDip( |
| 346 void* clientDrawingContext, | 346 void* clientDrawingContext, |
| 347 FLOAT* pixelsPerDip) SK_OVERRIDE | 347 FLOAT* pixelsPerDip) override |
| 348 { | 348 { |
| 349 *pixelsPerDip = 1.0f; | 349 *pixelsPerDip = 1.0f; |
| 350 return S_OK; | 350 return S_OK; |
| 351 } | 351 } |
| 352 | 352 |
| 353 // IUnknown methods | 353 // IUnknown methods |
| 354 ULONG STDMETHODCALLTYPE AddRef() SK_OVERRIDE { | 354 ULONG STDMETHODCALLTYPE AddRef() override { |
| 355 return InterlockedIncrement(&fRefCount); | 355 return InterlockedIncrement(&fRefCount); |
| 356 } | 356 } |
| 357 | 357 |
| 358 ULONG STDMETHODCALLTYPE Release() SK_OVERRIDE { | 358 ULONG STDMETHODCALLTYPE Release() override { |
| 359 ULONG newCount = InterlockedDecrement(&fRefCount); | 359 ULONG newCount = InterlockedDecrement(&fRefCount); |
| 360 if (0 == newCount) { | 360 if (0 == newCount) { |
| 361 delete this; | 361 delete this; |
| 362 } | 362 } |
| 363 return newCount; | 363 return newCount; |
| 364 } | 364 } |
| 365 | 365 |
| 366 virtual HRESULT STDMETHODCALLTYPE QueryInterface( | 366 virtual HRESULT STDMETHODCALLTYPE QueryInterface( |
| 367 IID const& riid, void** ppvObject) SK_OVERRIDE | 367 IID const& riid, void** ppvObject) override |
| 368 { | 368 { |
| 369 if (__uuidof(IUnknown) == riid || | 369 if (__uuidof(IUnknown) == riid || |
| 370 __uuidof(IDWritePixelSnapping) == riid || | 370 __uuidof(IDWritePixelSnapping) == riid || |
| 371 __uuidof(IDWriteTextRenderer) == riid) | 371 __uuidof(IDWriteTextRenderer) == riid) |
| 372 { | 372 { |
| 373 *ppvObject = this; | 373 *ppvObject = this; |
| 374 this->AddRef(); | 374 this->AddRef(); |
| 375 return S_OK; | 375 return S_OK; |
| 376 } | 376 } |
| 377 *ppvObject = NULL; | 377 *ppvObject = NULL; |
| 378 return E_FAIL; | 378 return E_FAIL; |
| 379 } | 379 } |
| 380 | 380 |
| 381 const SkFontIdentity FallbackIdentity() { return fIdentity; } | 381 const SkFontIdentity FallbackIdentity() { return fIdentity; } |
| 382 | 382 |
| 383 protected: | 383 protected: |
| 384 ULONG fRefCount; | 384 ULONG fRefCount; |
| 385 SkAutoTUnref<const SkRemotableFontMgr_DirectWrite> fOuter; | 385 SkAutoTUnref<const SkRemotableFontMgr_DirectWrite> fOuter; |
| 386 UINT32 fCharacter; | 386 UINT32 fCharacter; |
| 387 SkFontIdentity fIdentity; | 387 SkFontIdentity fIdentity; |
| 388 }; | 388 }; |
| 389 | 389 |
| 390 virtual SkFontIdentity matchNameStyleCharacter(const char familyName[], | 390 virtual SkFontIdentity matchNameStyleCharacter(const char familyName[], |
| 391 const SkFontStyle& pattern, | 391 const SkFontStyle& pattern, |
| 392 const char* bcp47[], int bcp4
7Count, | 392 const char* bcp47[], int bcp4
7Count, |
| 393 SkUnichar character) const SK
_OVERRIDE | 393 SkUnichar character) const ov
erride |
| 394 { | 394 { |
| 395 SkFontIdentity identity = { SkFontIdentity::kInvalidDataId }; | 395 SkFontIdentity identity = { SkFontIdentity::kInvalidDataId }; |
| 396 | 396 |
| 397 IDWriteFactory* dwFactory = sk_get_dwrite_factory(); | 397 IDWriteFactory* dwFactory = sk_get_dwrite_factory(); |
| 398 if (NULL == dwFactory) { | 398 if (NULL == dwFactory) { |
| 399 return identity; | 399 return identity; |
| 400 } | 400 } |
| 401 | 401 |
| 402 // TODO: use IDWriteFactory2::GetSystemFontFallback when available. | 402 // TODO: use IDWriteFactory2::GetSystemFontFallback when available. |
| 403 | 403 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 SkTScopedComPtr<FontFallbackRenderer> fontFallbackRenderer( | 445 SkTScopedComPtr<FontFallbackRenderer> fontFallbackRenderer( |
| 446 new FontFallbackRenderer(this, character)); | 446 new FontFallbackRenderer(this, character)); |
| 447 | 447 |
| 448 HR_GENERAL(fallbackLayout->Draw(NULL, fontFallbackRenderer.get(), 50.0f,
50.0f), | 448 HR_GENERAL(fallbackLayout->Draw(NULL, fontFallbackRenderer.get(), 50.0f,
50.0f), |
| 449 "Could not draw layout with renderer.", | 449 "Could not draw layout with renderer.", |
| 450 identity); | 450 identity); |
| 451 | 451 |
| 452 return fontFallbackRenderer->FallbackIdentity(); | 452 return fontFallbackRenderer->FallbackIdentity(); |
| 453 } | 453 } |
| 454 | 454 |
| 455 SkStreamAsset* getData(int dataId) const SK_OVERRIDE { | 455 SkStreamAsset* getData(int dataId) const override { |
| 456 SkAutoMutexAcquire ama(fDataIdCacheMutex); | 456 SkAutoMutexAcquire ama(fDataIdCacheMutex); |
| 457 if (dataId >= fDataIdCache.count()) { | 457 if (dataId >= fDataIdCache.count()) { |
| 458 return NULL; | 458 return NULL; |
| 459 } | 459 } |
| 460 const DataId& id = fDataIdCache[dataId]; | 460 const DataId& id = fDataIdCache[dataId]; |
| 461 | 461 |
| 462 SkTScopedComPtr<IDWriteFontFileLoader> loader; | 462 SkTScopedComPtr<IDWriteFontFileLoader> loader; |
| 463 HRNM(id.fLoader->QueryInterface(&loader), "QuerryInterface IDWriteFontFi
leLoader failed"); | 463 HRNM(id.fLoader->QueryInterface(&loader), "QuerryInterface IDWriteFontFi
leLoader failed"); |
| 464 | 464 |
| 465 SkTScopedComPtr<IDWriteFontFileStream> fontFileStream; | 465 SkTScopedComPtr<IDWriteFontFileStream> fontFileStream; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 } else { | 498 } else { |
| 499 localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_N
AME_MAX_LENGTH); | 499 localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_N
AME_MAX_LENGTH); |
| 500 if (localeNameLen) { | 500 if (localeNameLen) { |
| 501 localeName = localeNameStorage; | 501 localeName = localeNameStorage; |
| 502 }; | 502 }; |
| 503 } | 503 } |
| 504 | 504 |
| 505 return SkNEW_ARGS(SkRemotableFontMgr_DirectWrite, (sysFontCollection.get(), | 505 return SkNEW_ARGS(SkRemotableFontMgr_DirectWrite, (sysFontCollection.get(), |
| 506 localeName, localeNameLen
)); | 506 localeName, localeNameLen
)); |
| 507 } | 507 } |
| OLD | NEW |