84 lines
2.4 KiB
C++
84 lines
2.4 KiB
C++
// 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;
|
|
}
|