Percebo que não sei essencialmente nada sobre como as fontes são renderizadas no meu computador.
Pelo que pude observar, a renderização da fonte geralmente é feita de maneira consistente em todo o sistema. Por exemplo, as configurações de dicas de fonte do subpixel que eu configuro no meu painel de controle do DE influenciam o texto que aparece nas bordas da janela, no meu navegador, no meu editor de texto e assim por diante. (Devo observar que alguns aplicativos Java mostram uma diferença notável, então acho que eles estão usando um mecanismo de renderização de fonte diferente).
O que eu recebo do exposto acima é que provavelmente todos os aplicativos que precisam de renderização de fonte usam alguma biblioteca de todo o SO (ou DE).
Por outro lado, os navegadores geralmente gerenciam sua própria renderização por meio de um mecanismo de renderização, que cuida do posicionamento de vários itens - incluindo texto - de acordo com regras de fluxo específicas.
Não tenho certeza de como esses dois fatos são compatíveis. Eu diria que o navegador teria que pedir ao sistema operacional para desenhar um glifo em uma determinada posição, mas como ele pode gerenciar o fluxo de texto sem saber de antemão quanto espaço o glifo precisará? Existem chamadas separadas para determinar os tamanhos dos glifos, para que o navegador possa gerenciar o fluxo como se os caracteres fossem pequenas caixas que são posteriormente preenchidas pelo sistema operacional? (Embora isso não cuide do kerning). Ou o SO é responsável por desenhar uma área de texto inteira, incluindo o fluxo de texto? O sistema operacional retorna o glifo renderizado como um bitmap e o deixa para o aplicativo desenhá-lo na tela?
Respostas:
Você está certo de que, em geral, os aplicativos usam bibliotecas fornecidas pelo SO ou por um kit de ferramentas da GUI para renderizar fontes.
Os mecanismos de fonte típicos permitem vários modos de operação. No caso simples, um aplicativo pode solicitar que uma sequência de texto seja desenhada em uma determinada posição, e o mecanismo cuida de tudo (medição, posicionamento, desenho dos pixels na tela, etc.).
Para aplicativos que exigem um nível mais fino de controle - navegadores ou processadores de texto, por exemplo - o mecanismo expõe interfaces nas quais o aplicativo pode solicitar que um determinado pedaço de texto seja medido com antecedência. O aplicativo pode usar esse conhecimento para determinar a quantidade de texto que pode caber em uma linha, onde devem ser as quebras de linha, quanto espaço um parágrafo ocupará etc. O aplicativo ainda pode solicitar ao mecanismo que faça a renderização real dos pixels.
(Pode haver um cenário intermediário em que o mecanismo pode usar um parâmetro de largura máxima e possivelmente alguns parâmetros de kerning / padding e renderizar automaticamente o máximo de texto possível).
Por fim, o mecanismo de fonte pode permitir que o aplicativo assuma a renderização final do texto, retornando bitmaps de glifos pré-renderizados em um determinado tamanho, permitindo que o aplicativo o posicione e componha na exibição final. Ou o mecanismo pode até oferecer retornar os dados brutos do contorno do glifo para renderização com algum kit de ferramentas de vetor.
fonte