// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) Microsoft Corporation. All rights reserved // //---------------------------------------------------------------------------- #include "Common.h" #include "CustomFont.h" #include "ResourceFontContext.h" #include "ResourceFontCollectionLoader.h" #include "ResourceFontFileLoader.h" ResourceFontContext::ResourceFontContext() : hr_(S_FALSE) { } ResourceFontContext::~ResourceFontContext() { g_dwriteFactory->UnregisterFontCollectionLoader(ResourceFontCollectionLoader::GetLoader()); g_dwriteFactory->UnregisterFontFileLoader(ResourceFontFileLoader::GetLoader()); } HRESULT ResourceFontContext::Initialize() { if (hr_ == S_FALSE) { hr_ = InitializeInternal(); } return hr_; } HRESULT ResourceFontContext::InitializeInternal() { HRESULT hr = S_OK; if (!ResourceFontFileLoader::IsLoaderInitialized() || !ResourceFontCollectionLoader::IsLoaderInitialized()) { return E_FAIL; } // Register our custom loaders with the factory object. // // Note: For this application we just use the shared DWrite factory object which is accessed via // a global variable. If we were using fonts embedded in *documents* then it might make sense // to create an isolated factory for each document. When unloading the document, one would // also release the isolated factory, thus ensuring that all cached font data specific to // that document would be promptly disposed of. // if (FAILED(hr = g_dwriteFactory->RegisterFontFileLoader(ResourceFontFileLoader::GetLoader()))) return hr; hr = g_dwriteFactory->RegisterFontCollectionLoader(ResourceFontCollectionLoader::GetLoader()); return hr; } HRESULT ResourceFontContext::CreateFontCollection( UINT const* fontCollectionKey, // [keySize] in bytes UINT32 keySize, OUT IDWriteFontCollection** result ) { *result = NULL; HRESULT hr = S_OK; hr = Initialize(); if (FAILED(hr)) return hr; hr = g_dwriteFactory->CreateCustomFontCollection( ResourceFontCollectionLoader::GetLoader(), fontCollectionKey, keySize, result ); return hr; }