| 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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 | 105 |
| 106 /** localeNameLength must include the null terminator. */ | 106 /** localeNameLength must include the null terminator. */ |
| 107 SkRemotableFontMgr_DirectWrite(IDWriteFontCollection* fontCollection, | 107 SkRemotableFontMgr_DirectWrite(IDWriteFontCollection* fontCollection, |
| 108 WCHAR* localeName, int localeNameLength) | 108 WCHAR* localeName, int localeNameLength) |
| 109 : fFontCollection(SkRefComPtr(fontCollection)) | 109 : fFontCollection(SkRefComPtr(fontCollection)) |
| 110 , fLocaleName(localeNameLength) | 110 , fLocaleName(localeNameLength) |
| 111 { | 111 { |
| 112 memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR)); | 112 memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR)); |
| 113 } | 113 } |
| 114 | 114 |
| 115 virtual SkDataTable* getFamilyNames() const SK_OVERRIDE { | 115 SkDataTable* getFamilyNames() const SK_OVERRIDE { |
| 116 int count = fFontCollection->GetFontFamilyCount(); | 116 int count = fFontCollection->GetFontFamilyCount(); |
| 117 | 117 |
| 118 SkDataTableBuilder names(1024); | 118 SkDataTableBuilder names(1024); |
| 119 for (int index = 0; index < count; ++index) { | 119 for (int index = 0; index < count; ++index) { |
| 120 SkTScopedComPtr<IDWriteFontFamily> fontFamily; | 120 SkTScopedComPtr<IDWriteFontFamily> fontFamily; |
| 121 HRNM(fFontCollection->GetFontFamily(index, &fontFamily), | 121 HRNM(fFontCollection->GetFontFamily(index, &fontFamily), |
| 122 "Could not get requested family."); | 122 "Could not get requested family."); |
| 123 | 123 |
| 124 SkTScopedComPtr<IDWriteLocalizedStrings> familyNames; | 124 SkTScopedComPtr<IDWriteLocalizedStrings> familyNames; |
| 125 HRNM(fontFamily->GetFamilyNames(&familyNames), "Could not get family
names."); | 125 HRNM(fontFamily->GetFamilyNames(&familyNames), "Could not get family
names."); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 SkASSERT(false); | 172 SkASSERT(false); |
| 173 } | 173 } |
| 174 | 174 |
| 175 int weight = font->GetWeight(); | 175 int weight = font->GetWeight(); |
| 176 int width = font->GetStretch(); | 176 int width = font->GetStretch(); |
| 177 | 177 |
| 178 fontId->fFontStyle = SkFontStyle(weight, width, slant); | 178 fontId->fFontStyle = SkFontStyle(weight, width, slant); |
| 179 return S_OK; | 179 return S_OK; |
| 180 } | 180 } |
| 181 | 181 |
| 182 virtual SkRemotableFontIdentitySet* getIndex(int familyIndex) const SK_OVERR
IDE { | 182 SkRemotableFontIdentitySet* getIndex(int familyIndex) const SK_OVERRIDE { |
| 183 SkTScopedComPtr<IDWriteFontFamily> fontFamily; | 183 SkTScopedComPtr<IDWriteFontFamily> fontFamily; |
| 184 HRNM(fFontCollection->GetFontFamily(familyIndex, &fontFamily), | 184 HRNM(fFontCollection->GetFontFamily(familyIndex, &fontFamily), |
| 185 "Could not get requested family."); | 185 "Could not get requested family."); |
| 186 | 186 |
| 187 int count = fontFamily->GetFontCount(); | 187 int count = fontFamily->GetFontCount(); |
| 188 SkFontIdentity* fontIds; | 188 SkFontIdentity* fontIds; |
| 189 SkAutoTUnref<SkRemotableFontIdentitySet> fontIdSet( | 189 SkAutoTUnref<SkRemotableFontIdentitySet> fontIdSet( |
| 190 new SkRemotableFontIdentitySet(count, &fontIds)); | 190 new SkRemotableFontIdentitySet(count, &fontIds)); |
| 191 for (int fontIndex = 0; fontIndex < count; ++fontIndex) { | 191 for (int fontIndex = 0; fontIndex < count; ++fontIndex) { |
| 192 SkTScopedComPtr<IDWriteFont> font; | 192 SkTScopedComPtr<IDWriteFont> font; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 } | 230 } |
| 231 | 231 |
| 232 size_t len = wcsnlen_s(metrics.lfMessageFont.lfFaceName, LF_FACESIZE) +
1; | 232 size_t len = wcsnlen_s(metrics.lfMessageFont.lfFaceName, LF_FACESIZE) +
1; |
| 233 if (0 != wcsncpy_s(name->reset(len), len, metrics.lfMessageFont.lfFaceNa
me, _TRUNCATE)) { | 233 if (0 != wcsncpy_s(name->reset(len), len, metrics.lfMessageFont.lfFaceNa
me, _TRUNCATE)) { |
| 234 return E_UNEXPECTED; | 234 return E_UNEXPECTED; |
| 235 } | 235 } |
| 236 | 236 |
| 237 return S_OK; | 237 return S_OK; |
| 238 } | 238 } |
| 239 | 239 |
| 240 virtual SkRemotableFontIdentitySet* matchName(const char familyName[]) const
SK_OVERRIDE { | 240 SkRemotableFontIdentitySet* matchName(const char familyName[]) const SK_OVER
RIDE { |
| 241 SkSMallocWCHAR dwFamilyName; | 241 SkSMallocWCHAR dwFamilyName; |
| 242 if (NULL == familyName) { | 242 if (NULL == familyName) { |
| 243 HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName), | 243 HR_GENERAL(getDefaultFontFamilyName(&dwFamilyName), |
| 244 NULL, SkRemotableFontIdentitySet::NewEmpty()); | 244 NULL, SkRemotableFontIdentitySet::NewEmpty()); |
| 245 } else { | 245 } else { |
| 246 HR_GENERAL(sk_cstring_to_wchar(familyName, &dwFamilyName), | 246 HR_GENERAL(sk_cstring_to_wchar(familyName, &dwFamilyName), |
| 247 NULL, SkRemotableFontIdentitySet::NewEmpty()); | 247 NULL, SkRemotableFontIdentitySet::NewEmpty()); |
| 248 } | 248 } |
| 249 | 249 |
| 250 UINT32 index; | 250 UINT32 index; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 365 |
| 366 virtual HRESULT STDMETHODCALLTYPE GetPixelsPerDip( | 366 virtual HRESULT STDMETHODCALLTYPE GetPixelsPerDip( |
| 367 void* clientDrawingContext, | 367 void* clientDrawingContext, |
| 368 FLOAT* pixelsPerDip) SK_OVERRIDE | 368 FLOAT* pixelsPerDip) SK_OVERRIDE |
| 369 { | 369 { |
| 370 *pixelsPerDip = 1.0f; | 370 *pixelsPerDip = 1.0f; |
| 371 return S_OK; | 371 return S_OK; |
| 372 } | 372 } |
| 373 | 373 |
| 374 // IUnknown methods | 374 // IUnknown methods |
| 375 virtual ULONG STDMETHODCALLTYPE AddRef() SK_OVERRIDE { | 375 ULONG STDMETHODCALLTYPE AddRef() SK_OVERRIDE { |
| 376 return InterlockedIncrement(&fRefCount); | 376 return InterlockedIncrement(&fRefCount); |
| 377 } | 377 } |
| 378 | 378 |
| 379 virtual ULONG STDMETHODCALLTYPE Release() SK_OVERRIDE { | 379 ULONG STDMETHODCALLTYPE Release() SK_OVERRIDE { |
| 380 ULONG newCount = InterlockedDecrement(&fRefCount); | 380 ULONG newCount = InterlockedDecrement(&fRefCount); |
| 381 if (0 == newCount) { | 381 if (0 == newCount) { |
| 382 delete this; | 382 delete this; |
| 383 } | 383 } |
| 384 return newCount; | 384 return newCount; |
| 385 } | 385 } |
| 386 | 386 |
| 387 virtual HRESULT STDMETHODCALLTYPE QueryInterface( | 387 virtual HRESULT STDMETHODCALLTYPE QueryInterface( |
| 388 IID const& riid, void** ppvObject) SK_OVERRIDE | 388 IID const& riid, void** ppvObject) SK_OVERRIDE |
| 389 { | 389 { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 SkTScopedComPtr<FontFallbackRenderer> fontFallbackRenderer( | 466 SkTScopedComPtr<FontFallbackRenderer> fontFallbackRenderer( |
| 467 new FontFallbackRenderer(this, character)); | 467 new FontFallbackRenderer(this, character)); |
| 468 | 468 |
| 469 HR_GENERAL(fallbackLayout->Draw(NULL, fontFallbackRenderer.get(), 50.0f,
50.0f), | 469 HR_GENERAL(fallbackLayout->Draw(NULL, fontFallbackRenderer.get(), 50.0f,
50.0f), |
| 470 "Could not draw layout with renderer.", | 470 "Could not draw layout with renderer.", |
| 471 identity); | 471 identity); |
| 472 | 472 |
| 473 return fontFallbackRenderer->FallbackIdentity(); | 473 return fontFallbackRenderer->FallbackIdentity(); |
| 474 } | 474 } |
| 475 | 475 |
| 476 virtual SkStreamAsset* getData(int dataId) const SK_OVERRIDE { | 476 SkStreamAsset* getData(int dataId) const SK_OVERRIDE { |
| 477 SkAutoMutexAcquire ama(fDataIdCacheMutex); | 477 SkAutoMutexAcquire ama(fDataIdCacheMutex); |
| 478 if (dataId >= fDataIdCache.count()) { | 478 if (dataId >= fDataIdCache.count()) { |
| 479 return NULL; | 479 return NULL; |
| 480 } | 480 } |
| 481 const DataId& id = fDataIdCache[dataId]; | 481 const DataId& id = fDataIdCache[dataId]; |
| 482 | 482 |
| 483 SkTScopedComPtr<IDWriteFontFileLoader> loader; | 483 SkTScopedComPtr<IDWriteFontFileLoader> loader; |
| 484 HRNM(id.fLoader->QueryInterface(&loader), "QuerryInterface IDWriteFontFi
leLoader failed"); | 484 HRNM(id.fLoader->QueryInterface(&loader), "QuerryInterface IDWriteFontFi
leLoader failed"); |
| 485 | 485 |
| 486 SkTScopedComPtr<IDWriteFontFileStream> fontFileStream; | 486 SkTScopedComPtr<IDWriteFontFileStream> fontFileStream; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 } else { | 519 } else { |
| 520 localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_N
AME_MAX_LENGTH); | 520 localeNameLen = getUserDefaultLocaleNameProc(localeNameStorage, LOCALE_N
AME_MAX_LENGTH); |
| 521 if (localeNameLen) { | 521 if (localeNameLen) { |
| 522 localeName = localeNameStorage; | 522 localeName = localeNameStorage; |
| 523 }; | 523 }; |
| 524 } | 524 } |
| 525 | 525 |
| 526 return SkNEW_ARGS(SkRemotableFontMgr_DirectWrite, (sysFontCollection.get(), | 526 return SkNEW_ARGS(SkRemotableFontMgr_DirectWrite, (sysFontCollection.get(), |
| 527 localeName, localeNameLen
)); | 527 localeName, localeNameLen
)); |
| 528 } | 528 } |
| OLD | NEW |