Compartir a través de


Colecciones de fuentes personalizadas (Windows 7/8)

DirectWrite proporciona acceso a la colección de fuentes del sistema mediante el método IDWriteFactory::GetSystemFontCollection. Esta es la colección de fuentes que se usa con más frecuencia. Sin embargo, algunas aplicaciones tienen que usar fuentes que no están instaladas en el sistema, como desde archivos de fuente incluidos o archivos de fuente incrustados en la aplicación.

Si las fuentes que desea no están en la colección de fuentes del sistema, puede crear una colección de fuentes personalizada derivada de IDWriteFontCollection.

Esta información general consta de las siguientes partes:

Registro y anulación del registro de un cargador de colección de fuentes

Se registra un cargador de colección de fuentes mediante el método IDWriteFactory::RegisterFontCollectionLoader y se pasa una interfaz IDWriteFontCollectionLoader implementada por la aplicación como un objeto singleton. Este objeto cargará las fuentes cuando se solicite la colección personalizada. Tanto la colección de fuentes del sistema como las colecciones de fuentes personalizadas se almacenan en caché, por lo que las fuentes solo se cargan una vez.

El cargador de la colección de fuentes debe descargarse finalmente mediante IDWriteFactory::UnregisterFontCollectionLoader.

Nota:

Registrar el cargador de colecciones de fuentes agrega al recuento de referencias; no llame a UnregisterFontCollectionLoader desde el destructor o el objeto del cargador de recopilación nunca se anulará el registro.

 

IDWriteFontCollectionLoader

Puede crear un objeto IDWriteFontFileEnumerator mediante idWriteFactory::CreateCustomFontCollection y pasarle una clave definida por la aplicación. La clave es un puntero void y el tipo de datos, el formato y el significado se definen mediante la aplicación y son opacos para el sistema de fuentes.

Mientras que la clave puede ser cualquier cosa, DirectWrite requiere que cada clave sea la siguiente:

  • Exclusivo de una sola colección de fuentes dentro del ámbito del cargador.
  • Válido hasta que el cargador no se registra mediante el generador.

Cuando se llama al método CreateCustomFontCollection, DirectWrite llama de nuevo a una interfaz IDWriteFontCollectionLoader implementada como un objeto singleton por la aplicación. La DirectWrite usa el método de devolución de llamada IDWriteFontCollectionLoader::CreateEnumeratorFromKey para recuperar un objeto IDWriteFontFileEnumerator implementado por la aplicación. El objeto IDWriteFactory que se usa para crear la colección se pasa a este método y el enumerador de archivos de fuente debe usarse para crear los objetos IDWriteFontFile que se incluirán en la colección.

La clave que se pasa a este método identifica la colección de fuentes y es la misma clave que se pasa a CreateCustomFontCollection.

IDWriteFontFileEnumerator

El objeto IDWriteFontFileEnumerator definido por la aplicación creado por el método CreateEnumeratorFromKey se usa para enumerar los archivos de fuente de una colección, creando un objeto IDWriteFontFile para cada archivo. El método IDWriteFontFileEnumerator::MoveNext cambia la posición al siguiente archivo de fuente. Si hay un archivo en la posición, establecerá hasCurrentFile en TRUE. De lo contrario, se establecerá en FALSE y el método devolverá S_OK.

Nota

El enumerador de archivos de fuente debe iniciarse colocado antes del primer elemento y avanzado en la primera llamada a MoveNext.

 

El método IDWriteFontFile genera un objeto IDWriteFontFileEnumerator::GetCurrentFontFile. Si no hay ningún archivo de fuente en la posición actual, ya que MoveNext aún no se ha llamado o hasCurrentFile se estableció en FALSE, GetCurrentFontFile devolverá E_FAIL.

CreateCustomFontFileReference

La salida del objeto IDWriteFontFile porGetCurrentFontFile se puede crear llamando a IDWriteFactory::CreateCustomFontFileReference. La clave de referencia del archivo de fuente identifica una referencia de archivo de fuente específica y debe ser única dentro del cargador de archivos de fuente que cargará el archivo.

IDWriteFontFileLoader

El método CreateCustomFontFileReference toma un objeto IDWriteFontFileLoader implementado por la aplicación que se usa para cargar la fuente. El método de devolución de llamada IDWriteFontFileLoader::CreateStreamFromKey se pasa la clave y genera un objeto IDWriteFontFileStream .

IDWriteFontFileStream

El objeto IDWriteFontFileStream implementado por la aplicación proporciona los datos del archivo de fuente para una referencia de archivo de fuente desde un cargador de archivos de fuente personalizado. Junto con el tamaño de archivo y la hora de última escritura, proporciona un método (ReadFileFragment) para recuperar fragmentos de archivo que se van a compilar en un objeto IDWriteFontFile .

Nota

Las implementaciones readFileFragment deben devolver un error si el fragmento solicitado está fuera de los límites del archivo.

 

Un IDWriteFontFileStream puede obtener el contenido del archivo de fuente desde cualquier lugar, como la unidad de disco duro local o los recursos incrustados.