Les polices Google en BASIC

Nommez une famille et obtenez du vrai texte vectoriel au lieu d'une planche de bitmap, avec l'attente qu'impose un chargement asynchrone et ce qui se passe une fois le jeu exporté.

À quoi ça sert#

Le BASIC classique dessine le texte depuis une image de police : une planche de glyphes que l'on pose avec TextFontImage(texte, image). Ça fonctionne, c'est ce que le dialecte a toujours fait, et ça reste exactement en place. Mais une planche bitmap ne se met pas à l'échelle, et ça se voit.

LoadGoogleFont nomme une famille à la place :

font = LoadGoogleFont("Inter")
PrintFont(font)
Print("Bonjour")
DO
  Sync()
LOOP

Rien n'est retiré. LoadFont, TextFontImage et tout le chemin bitmap continuent de marcher, et un programme peut mélanger les deux.

L'attente n'est pas facultative#

Une police est un fichier, et le fichier arrive après le retour de l'appel. Affichez avant qu'il ne soit là et les premières images sortent dans la police de repli, ce qui se lit comme « la commande n'a rien fait ».

GoogleFontReady est ce qu'on attend :

font = LoadGoogleFont("Inter")
pret = 0
DO
  IF pret = 0
    IF GoogleFontReady(font) = 1
      PrintFont(font)
      pret = 1
    ENDIF
  ENDIF
  Print("Bonjour")
  Sync()
LOOP

Attention : le même piège a déjà attrapé les modules de l'app. Déclarer une police ne la charge pas : un canvas ne télécharge une famille que lorsque quelque chose la réclame, et la réponse arrive une image ou plusieurs plus tard.

Parcourir les familles#

Le moteur porte une liste de familles, et un programme peut la lire, ce qu'il faut pour offrir un sélecteur de police dans un jeu :

nb = GoogleFontCount()
FOR i = 0 TO nb - 1
  Print(GoogleFontName(i))
NEXT i

La liste sert à remplir un sélecteur, ce n'est pas une limite : n'importe quelle famille Google se charge par son nom, qu'elle y figure ou non.

Ce qui se passe à l'export#

Où tourne le jeuCe qui se passe
L'éditeurLa famille est récupérée chez Google au premier appel.
Export navigateurPareil, et le fichier vient du build quand l'exporteur a pu l'embarquer.
Build natif ou BevyLe fichier doit avoir voyagé avec le build. Il n'y a pas de réseau.

L'exporteur lit votre programme, relève chaque famille nommée en clair, la télécharge et l'écrit dans assets/fonts/<Famille>.woff2. Ce build fonctionne alors hors ligne.

Attention : une famille calculée à l'exécution ne peut pas être trouvée en lisant le programme, donc pas embarquée. Le rapport d'export le dit, et le build retombe sur la police par défaut. Écrivez LoadGoogleFont("Inter"), pas LoadGoogleFont(noms[i]), pour tout ce qui doit survivre à un export.

Les commandes#

CommandeCe qu'elle fait
LoadGoogleFont(family)Charge la famille, rend un identifiant
LoadGoogleFont(fontID, family)Pareil, avec un identifiant que vous choisissez
GoogleFontReady(fontID)Vaut 1 dès que le fichier est utilisable
GoogleFontCount()Le nombre de familles proposées
GoogleFontName(index)Un nom de famille de la liste

Le reste passe par la machinerie de polices existante : PrintFont(id) pour Print, TextFontSet(texte, id) pour un objet Text, DeleteFont(id) pour la libérer.

Pour aller plus loin#