Partilhar via


Coleções de fontes personalizadas (Windows 7/8)

DirectWrite fornece acesso à coleção de fontes do sistema usando o métodoIDWriteFactory::GetSystemFontCollection. Esta é a coleção de fontes usada com mais frequência. No entanto, alguns aplicativos têm que usar fontes que não estão instaladas no sistema, como a partir de arquivos de fonte incluídos ou arquivos de fonte incorporados no aplicativo.

Se as fontes desejadas não estiverem na coleção de fontes do sistema, você poderá criar uma coleção de fontes personalizada derivada de IDWriteFontCollection.

Esta visão geral consiste nas seguintes partes:

Registrando e cancelando o registro de um carregador de coleção de fontes

Você registra um carregador de coleção de fontes usando o IDWriteFactory::RegisterFontCollectionLoader método e passando-lhe um IDWriteFontCollectionLoader interface implementada pelo aplicativo como um objeto singleton. Este objeto carregará as fontes quando a coleção personalizada for solicitada. Tanto a coleção de fontes do sistema quanto as coleções de fontes personalizadas são armazenadas em cache, portanto, as fontes são carregadas apenas uma vez.

O carregador de coleta de fontes deve ser descarregado eventualmente usando o IDWriteFactory::UnregisterFontCollectionLoader.

Observação

O registro do carregador de coleta de fontes aumenta a contagem de referência; não chame UnregisterFontCollectionLoader de dentro do destruidor ou o objeto do carregador de coleção nunca será cancelado.

 

IDWriteFontCollectionLoader

Você cria um IDWriteFontFileEnumerator objeto usando o IDWriteFactory::CreateCustomFontCollection e passando-lhe uma chave definida pelo aplicativo. A chave é um ponteiro vazio e o tipo de dados, formato e significado são definidos pelo aplicativo e são opacos para o sistema de fontes.

Considerando que a chave pode ser qualquer coisa, DirectWrite requer que cada chave seja ambas:

  • Exclusivo para uma única coleção de fontes dentro do escopo do carregador.
  • Válido até que o carregador não seja registrado usando a fábrica.

Quando o métodoCreateCustomFontCollection é chamado, DirectWrite chama de volta para um IDWriteFontCollectionLoader interface implementada como um objeto singleton pelo aplicativo. O IDWriteFontCollectionLoader::CreateEnumeratorFromKey método de retorno de chamada é usado pelo DirectWrite para recuperar um IDWriteFontFileEnumerator objeto implementado pelo aplicativo. O IDWriteFactory objeto que está sendo usado para criar a coleção é passado para esse método e deve ser usado pelo enumerador de arquivo de fonte para criar os IDWriteFontFile objetos a serem incluídos na coleção.

A chave passada para esse método identifica a coleção de fontes e é a mesma chave passada para CreateCustomFontCollection.

IDWriteFontFileEnumerator

O objeto deIDWriteFontFileEnumeratordefinido pelo aplicativo que foi criado pelo método de CreateEnumeratorFromKey é usado para enumerar os arquivos de fonte em uma coleção, criando um IDWriteFontFile objeto para cada arquivo. O IDWriteFontFileEnumerator::MoveNext método altera a posição para o próximo arquivo de fonte. Se houver um arquivo na posição, ele definirá o hasCurrentFile como TRUE. Caso contrário, ele será definido como FALSE e o método retornará S_OK.

Observação

O enumerador de arquivo de fonte deve iniciar posicionado antes do primeiro elemento e avançado na primeira chamada para MoveNext.

 

Um IDWriteFontFile objeto é gerado pelo IDWriteFontFileEnumerator::GetCurrentFontFile método. Se não houver nenhum arquivo de fonte na posição atual, porque MoveNext ainda não foi chamado ou hasCurrentFile foi definido como FALSE, GetCurrentFontFile retornará E_FAIL.

CreateCustomFontFileReference

O IDWriteFontFile saída de objeto peloGetCurrentFontFilepode ser criado chamando IDWriteFactory::CreateCustomFontFileReference. A chave de referência do arquivo de fonte identifica uma referência de arquivo de fonte específica e deve ser exclusiva dentro do carregador de arquivos de fonte que carregará o arquivo.

IDWriteFontFileLoader

O método de CreateCustomFontFileReference usa um IDWriteFontFileLoader objeto implementado pelo aplicativo que é usado para carregar a fonte. O IDWriteFontFileLoader::CreateStreamFromKey método de retorno de chamada é passado a chave e gera um IDWriteFontFileStream objeto.

IDWriteFontFileStream

O objeto deIDWriteFontFileStreamimplementado pelo aplicativo fornece os dados do arquivo de fonte para uma referência de arquivo de fonte de um carregador de arquivos de fonte personalizado. Juntamente com o tamanho do arquivo e o último tempo de gravação, ele fornece um método (ReadFileFragment) para recuperar fragmentos de arquivo que devem ser compilados em um IDWriteFontFile objeto.

Observação

implementações de ReadFileFragment devem retornar um erro se o fragmento solicitado estiver fora dos limites do arquivo.

 

Um IDWriteFontFileStream pode obter o conteúdo do arquivo de fonte de qualquer lugar, como a unidade de disco rígido local ou recursos incorporados.