Trois fontes d'affichage, et le centrage qu'une fonte japonaise décale has been fixed.
See more details at : https://github.com/pdulvp/pdcartes-rami/issues/5
- l'enseigne du logo en Zen Tokyo Zoo, sa ligne du dessus et les titres de
section en Zen Dots, et tout le texte de la fenêtre en M PLUS 2
- src/Fonts.* les charge une fois et les nomme par leur métier --
signFamily(), capsFamily(), proseFamily() -- de sorte qu'en changer
une soit un chemin à changer ; seules les graisses dont le jeu se sert sont
compilées dedans, et la licence de chacune s'installe à côté du jeu
- capCentred() corrige le centrage vertical : Qt centre sur la boîte de
ligne, haute dans une fonte japonaise, et tout ce qui est écrit dans une
pastille serrée se retrouvait bas. Tiré des métriques de la fonte, donc
valable pour la suivante ; ce que Qt dessine lui-même -- boutons, menus --
se corrige au rembourrage, faute de prise sur son drawText
- DialogChrome laissé tel quel : il se compile aussi dans
cartes-set-creator, qui ne porte pas cette fonte
Trois fontes au lieu d'une, et le centrage que ça casse
<sub>2026-10-23-2257-trois-fontes-et-le-centrage-vertical.md — 2026-10-23-2257</sub>
L'écran titre tirait déjà une fonte d'affichage du binaire. Deux autres l'ont
rejointe, et la dernière — la fonte de toute la fenêtre — est japonaise, ce
qui a décentré tout ce qui est écrit dans une pastille.
Écrit après coup : ce travail a commencé par « utilise cette fonte-là » et a
grossi de demande en demande jusqu'à une passe de typographie sur toute
l'application. Il aurait dû avoir son plan dès qu'il a dépassé la première.
Décisions
- Trois fontes, trois métiers. L'enseigne (RAMI) en Zen Tokyo Zoo, qui
veut de la hauteur ; la ligne du dessus (PDCARTES) et les titres de
section en Zen Dots, qui est net au cinquième de cette taille là où le trait
rainuré se brouille ; tout le texte de la fenêtre en M PLUS 2. Une seule
fonte pour les trois ferait soit une enseigne tiède, soit un menu illisible.
- src/Fonts.*, et les fontes nommées par leur métier — signFamily(),
capsFamily(), proseFamily() — et non par leur nom de fonderie : en
changer une est alors un chemin à changer, et le reste du programme ne sait
même pas qu'il y en a eu une autre. Ce qui a servi : Zen Kaku Gothic New a
tenu le rôle du texte une demi-heure avant M PLUS 2.
- Les titres de section passent en Zen Dots, la fonte du haut du logo : ce
sont ce que la page a de plus proche d'une enseigne. Elle n'a pas de
bas-de-casse, ses minuscules étant ses capitales, si bien que le texte source
garde sa casse et que AllUppercase ne sert qu'au repli.
- On n'embarque que les graisses dont on se sert. Deux sur neuf pour
M PLUS 2 : une fonte japonaise porte ses milliers d'idéogrammes qu'on les
écrive ou non, et chaque graisse pèse deux mégaoctets. Zen Kaku reste dans
assets/ sans être compilée — y revenir est deux chemins — parce qu'une
fonte dans le binaire que rien ne demande est quatre mégaoctets que tout le
monde télécharge. La licence de chacune s'installe à côté du jeu, renommée
d'après elle.
- Les graisses figées plutôt que la fonte variable. M PLUS 2 en livre une
qui porte les neuf en un fichier, mais il faudrait que Qt sache en tirer
l'axe de graisse : deux fichiers qui marchent valent mieux qu'un qui dépend
de la version.
- Le centrage vertical se corrige par les capitales. Qt centre un texte
sur la boîte de ligne de la fonte. Dans une fonte latine le milieu des
lettres y tombe presque ; dans une japonaise, non — sa boîte doit loger un
idéogramme et ses signes, d'où une montante de 1,16 cadratin contre une
capitale de 0,73 — et tout ce qui est écrit dans une pastille serrée s'est
retrouvé bas. capCentred() rend la boîte à passer à drawText pour que ce
soit le milieu des capitales qui tombe au milieu. Tiré des métriques de la
fonte et non d'un chiffre à la main : il se corrige tout seul si la fonte
change encore.
- Ce que Qt dessine lui-même se corrige au rembourrage. Boutons et entrées
de menu : un pixel de moins en haut, un de plus en bas. C'est la seule prise
qu'on ait sur un texte qu'on ne dessine pas.
- DialogChrome n'est pas touché. Le même défaut l'atteint, mais il vit
dans ../cartes-set-creator/lib et se compile aussi dans l'autre programme,
qui ne porte pas cette fonte : les boutons des boîtes de dialogue gardent
leur décalage résiduel plutôt que de décaler ceux d'à côté.
Étapes
- [x] src/Fonts.h / .cpp — les trois fontes chargées une fois, nommées
par leur métier, et familyFont() qui en habille une fonte.
- [x] src/TitleMark.cpp — le logo demande ses deux fontes au lieu de les
charger ; src/TitlePage.cpp — la ligne qui respire demande la
troisième.
- [x] src/TablePicker.cpp — les titres de section en Zen Dots capitales.
- [x] src/main.cpp — dressApplicationFont() avant la première fenêtre :
un widget garde la fonte qu'il avait en naissant. La famille seule, le
corps restant celui du bureau.
- [x] CMakeLists.txt — les deux ressources fondues en un appel, les
graisses choisies, et la licence de chaque fonte installée sous son nom.
- [x] capCentred() posé sur les pastilles peintes — points d'une table,
niveau d'un adversaire, initiale d'un médaillon, compte de cartes,
FERMÉ, points d'ouverture — et le rembourrage corrigé dans les
feuilles de style du projet.
Vérifié
Les familles lues au démarrage plutôt que jugées à l'oeil :
enseigne [Zen Tokyo Zoo], capitales [Zen Dots], texte [M PLUS 2], la
fenêtre demandant et rendant M PLUS 2 en poids 400, et le gras rendant un
vrai 700 et non un trait épaissi.
Les métriques mesurées des deux côtés : Cantarell montante 0,98 / jambage
0,22 / capitale 0,69 cadratin, M PLUS 2 1,16 / 0,29 / 0,73 — d'où un décalage
qui passe de 0,4 à 0,8 pixel au corps du texte et à 1,1 au corps des titres.
Les pastilles avant et après, au même endroit et grossies quatre fois : le
texte qui touchait presque le bas de l'ovale y est centré.
Le menu, la table et l'écran titre rendus hors écran ; le jeu démarre et tient,
sans un mot sur la sortie d'erreur ; l'installation emporte
OFL-MPLUS2.txt, OFL-ZenDots.txt, OFL-ZenTokyoZoo.txt. Binaire 5,6 Mo,
contre 2,3 avant les fontes.
Trois pièges rencontrés
Une fonte qui ne charge pas ne dit rien. Un remplacement de chemin a raté
sa cible dans proseFamily(), qui a continué de demander des fichiers retirés
de la ressource ; addApplicationFont a rendu -1, dressApplicationFont est
sortie sans rien faire, et la fenêtre est restée sur la fonte du système. La
capture d'écran avait l'air neuve — elle l'était, d'un retour en arrière. Le
repli silencieux est voulu, mais il rend une vérification à l'oeil sans
valeur : c'est une sonde qui nomme la famille résolue qui l'a attrapé.
**Deux qt_add_resources du même nom sur la même cible se disputent le même
fichier** : le deuxième argument nomme la ressource, et rcc en tire le nom de
ce qu'il écrit. Les fontes passent par un seul appel.
BASE est ce qui garde le dossier de chaque fonte sans y coller le
chemin du disque : :/fonts/ZenDots/ZenDots-Regular.ttf et non
:/fonts/assets/ZenDots/....
<sub>Filed by prel from the completed plans at commit time.</sub>